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 20) 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") option ( ADD_JOURNAL_LOGGING "All logging write to journalctl" ON ) option ( ADD_PHOSPHOR_LOGGING "All logging write to webui" OFF ) 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 && ./bootstrap.sh BUILD_COMMAND cd && ./b2 --exec-prefix= --prefix= --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) 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() 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}) find_package (PkgConfig REQUIRED) pkg_check_modules (LOGGING phosphor-logging REQUIRED) endif() include_directories(src) set(SRC_DIR src) set(MESSAGE_DIR src/message) set(SERVICE_DIR src/service) set(MANAGEMENT_DIR src/management) set(FILE_DIR src/file) set(MANAGER_BUILDER_DIR src/management/builder) set(CONVERTER_DIR src/converter) set(LOGGER_DIR src/logger) set(CHECKER_DIR src/checker) set(GENERAL_DIR src/general) set(THREAD_DIR src/thread) set(SRC_FILES ${SRC_DIR}/main.cpp ${SERVICE_DIR}/smtp.cpp ${SERVICE_DIR}/smtp.hpp ${MESSAGE_DIR}/sender.hpp ${MESSAGE_DIR}/sender.cpp ${MESSAGE_DIR}/queue_sender.hpp ${MESSAGE_DIR}/queue_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 ${MANAGEMENT_DIR}/mail.hpp ${MANAGEMENT_DIR}/mail.cpp ${MANAGEMENT_DIR}/settings.hpp ${MANAGEMENT_DIR}/settings.cpp ${FILE_DIR}/mail/file_decorator.hpp ${FILE_DIR}/mail/file_decorator.cpp ${FILE_DIR}/mail/sort_decorator.hpp ${FILE_DIR}/mail/sort_decorator.cpp ${FILE_DIR}/mail/checker_decorator.hpp ${FILE_DIR}/mail/checker_decorator.cpp ${FILE_DIR}/mail/types/ifile_manipulator.hpp ${FILE_DIR}/settings/settings.hpp ${FILE_DIR}/settings/settings.cpp ${FILE_DIR}/settings/parser.hpp ${FILE_DIR}/settings/parser.cpp ${FILE_DIR}/settings/file_decorator.hpp ${FILE_DIR}/settings/file_decorator.cpp ${FILE_DIR}/settings/checker_decorator.hpp ${FILE_DIR}/settings/checker_decorator.cpp ${FILE_DIR}/settings/types/ifile_manipulator.hpp ${FILE_DIR}/errors/registrator.hpp ${FILE_DIR}/errors/registrator.cpp ${FILE_DIR}/errors/not_create.hpp ${FILE_DIR}/errors/not_create.cpp ${FILE_DIR}/errors/types/ierror.hpp ${CONVERTER_DIR}/struct_to_file.hpp ${CONVERTER_DIR}/struct_to_file.cpp ${CONVERTER_DIR}/file_to_struct.hpp ${CONVERTER_DIR}/file_to_struct.cpp ${CONVERTER_DIR}/file_to_string.hpp ${CONVERTER_DIR}/file_to_string.cpp ${CONVERTER_DIR}/struct_to_string.hpp ${CONVERTER_DIR}/struct_to_string.cpp ${MANAGER_BUILDER_DIR}/settings.hpp ${MANAGER_BUILDER_DIR}/settings.cpp ${MANAGER_BUILDER_DIR}/mail.hpp ${MANAGER_BUILDER_DIR}/mail.cpp ${LOGGER_DIR}/types/ilogger.hpp ${LOGGER_DIR}/journal.cpp ${LOGGER_DIR}/journal.hpp ${LOGGER_DIR}/logger_set.cpp ${LOGGER_DIR}/logger_set.hpp ${CHECKER_DIR}/registrator_mails.hpp ${CHECKER_DIR}/registrator_mails.cpp ${CHECKER_DIR}/registrator_settings.hpp ${CHECKER_DIR}/errors/settings/port_number.cpp ${CHECKER_DIR}/errors/settings/port_number.hpp ${CHECKER_DIR}/errors/settings/server.cpp ${CHECKER_DIR}/errors/settings/server.hpp ${CHECKER_DIR}/errors/mail/empty.hpp ${CHECKER_DIR}/errors/mail/empty.cpp ${CHECKER_DIR}/errors/mail/at_sign.hpp ${CHECKER_DIR}/errors/mail/at_sign.cpp ${CHECKER_DIR}/errors/types/imails_error.hpp ${CHECKER_DIR}/errors/types/isettings_error.hpp ${GENERAL_DIR}/struct.hpp ${GENERAL_DIR}/idecorator.hpp ${THREAD_DIR}/queue.hpp ${THREAD_DIR}/queue.cpp ) if( ${ADD_PHOSPHOR_LOGGING} STREQUAL "ON") message("hello") set(PHOSPHOR_LOGGING_FILES src/logger/phosphor.cpp src/logger/phosphor.hpp ) endif() add_executable(${PROJECT_NAME} ${SRC_FILES} ${PHOSPHOR_LOGGING_FILES}) if(NOT ${YOCTO_DEPENDENCIES}) add_dependencies(${PROJECT_NAME} sdbusplus-project) elseif(${ADD_PHOSPHOR_LOGGING}) target_link_libraries (${PROJECT_NAME} phosphor_logging) endif() target_link_libraries(${PROJECT_NAME} boost_context) target_link_libraries(${PROJECT_NAME} sdbusplus) target_link_libraries(${PROJECT_NAME} systemd) target_link_libraries(${PROJECT_NAME} curl) install(TARGETS ${PROJECT_NAME} DESTINATION bin) install(FILES ${PROJECT_SOURCE_DIR}/xyz.openbmc_project.SMTP.service DESTINATION /lib/systemd/system/) target_compile_definitions ( ${PROJECT_NAME} PRIVATE $<$: -DADD_JOURNAL_LOGGING> ) target_compile_definitions ( ${PROJECT_NAME} PRIVATE $<$: -DADD_PHOSPHOR_LOGGING> )