summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
blob: 7b4acc39e109627921a1f13fe59b3e6bfd4523bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
cmake_minimum_required(VERSION 3.5)

project(smtp LANGUAGES CXX)

cmake_policy(SET CMP0054 NEW)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -fno-rtti")
# Silence sdbusplus warnings
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os -flto")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")

if(NOT ${YOCTO_DEPENDENCIES})
  include(ExternalProject)

  ExternalProject_Add(
    Boost
    URL "https://boostorg.jfrog.io/artifactory/main/release/1.76.0/source/boost_1_76_0.tar.bz2"
    URL_MD5 "33334dd7f862e8ac9fe1cc7c6584fb6d"
    SOURCE_DIR ${CMAKE_BINARY_DIR}/src/boost
    BINARY_DIR ${CMAKE_BINARY_DIR}/libs/boost
    CONFIGURE_COMMAND cd <SOURCE_DIR> && ./bootstrap.sh
    BUILD_COMMAND cd <SOURCE_DIR> && ./b2 --exec-prefix=<BINARY_DIR>
                  --prefix=<BINARY_DIR> --with-system --with-coroutine install
    INSTALL_COMMAND ""
    UPDATE_COMMAND "")

  set(CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/libs/boost/ ${CMAKE_PREFIX_PATH})
  include_directories(SYSTEM ${CMAKE_BINARY_DIR}/libs/boost/include)
  link_directories(SYSTEM ${CMAKE_BINARY_DIR}/libs/boost/lib)

  ExternalProject_Add(
    sdbusplus-project
    PREFIX ${CMAKE_BINARY_DIR}/sdbusplus-project
    GIT_REPOSITORY https://github.com/openbmc/sdbusplus.git
    GIT_TAG afe80cf2e5dc4aefe3b041adeb0230e61929bf12
    SOURCE_DIR ${CMAKE_BINARY_DIR}/sdbusplus-src
    BINARY_DIR ${CMAKE_BINARY_DIR}/sdbusplus-build
    CONFIGURE_COMMAND ""
    BUILD_COMMAND cd ${CMAKE_BINARY_DIR}/sdbusplus-src && ./bootstrap.sh &&
                  ./configure --enable-transaction && make -j libsdbusplus.la
    INSTALL_COMMAND ""
    LOG_DOWNLOAD ON
    UPDATE_COMMAND "")

  include_directories(${CMAKE_BINARY_DIR}/sdbusplus-src)
  link_directories(${CMAKE_BINARY_DIR}/sdbusplus-src/.libs)

  # Boost related definitions
  add_definitions(-DBOOST_COROUTINES_NO_DEPRECATION_WARNING)
  add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)
  add_definitions(-DBOOST_SYSTEM_NO_DEPRECATED)
  add_definitions(-DBOOST_ALL_NO_LIB)
  add_definitions(-DBOOST_NO_RTTI)
  add_definitions(-DBOOST_NO_TYPEID)
  add_definitions(-DBOOST_ASIO_DISABLE_THREADS)
else()
  # Include Boost library. This allows specify exact version of BOOST to be
  # used, especially important while using valgrind, to point BOOST that is
  # compiled with valgrind support
  if(${BOOST_VERSION})
    find_package(Boost ${BOOST_VERSION} EXACT)
  else()
    find_package(Boost 1.69 REQUIRED COMPONENTS coroutine context)
  endif()
  message("++ Using Boost version: " ${Boost_VERSION})

  include_directories(${Boost_INCLUDE_DIRS})
  link_directories(${Boost_LIBRARY_DIRS})
endif()

include_directories(src)

set(SRC_DIR src)
set(MESSAGE_DIR src/message)
set(SERVICE_DIR src/service)

set(SRC_FILES
    ${SRC_DIR}/main.cpp

    ${SERVICE_DIR}/smtp.cpp
    ${SERVICE_DIR}/smtp.hpp
    ${SERVICE_DIR}/settings.hpp
    ${SERVICE_DIR}/settings.cpp

    ${MESSAGE_DIR}/sender.hpp
    ${MESSAGE_DIR}/sender.cpp

    ${MESSAGE_DIR}/builder/date.hpp
    ${MESSAGE_DIR}/builder/date.cpp
    ${MESSAGE_DIR}/builder/mail_to.hpp
    ${MESSAGE_DIR}/builder/mail_to.cpp
    ${MESSAGE_DIR}/builder/cc.hpp
    ${MESSAGE_DIR}/builder/cc.cpp
    ${MESSAGE_DIR}/builder/subject.hpp
    ${MESSAGE_DIR}/builder/subject.cpp
    ${MESSAGE_DIR}/builder/text.hpp
    ${MESSAGE_DIR}/builder/text.cpp
    ${MESSAGE_DIR}/builder/from.hpp
    ${MESSAGE_DIR}/builder/from.cpp
    ${MESSAGE_DIR}/builder/types/imessage_builder.hpp
    ${MESSAGE_DIR}/builder/types/idecorator.hpp
    )

add_executable(smtp ${SRC_FILES})
if(NOT ${YOCTO_DEPENDENCIES})
  add_dependencies(smtp sdbusplus-project)
endif()
target_link_libraries(smtp boost_context)
target_link_libraries(smtp sdbusplus)
target_link_libraries(smtp systemd)
target_link_libraries(smtp curl)

#target_link_libraries(curl_smtp curl)
#target_link_libraries (${PROJECT_NAME} ${Boost_LIBRARIES})
#target_link_libraries (${PROJECT_NAME} ${SDBUSPLUSPLUS_LIBRARIES}
#                       phosphor_logging)
install(TARGETS smtp DESTINATION bin)
install(FILES ${PROJECT_SOURCE_DIR}/xyz.openbmc_project.SMTP.service
        DESTINATION /lib/systemd/system/)