ferencd@0: cmake_minimum_required (VERSION 3.1) ferencd@0: ferencd@0: project(thymian) ferencd@0: ferencd@0: # CMake Settings ferencd@0: SET(CMAKE_COLOR_MAKEFILE ON) ferencd@0: SET(CMAKE_VERBOSE_MAKEFILE OFF) ferencd@0: set(THYMIAN_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}) ferencd@0: ferencd@0: if(NOT CMAKE_BUILD_TYPE) ferencd@0: set(CMAKE_BUILD_TYPE "Debug") ferencd@0: endif() ferencd@0: ferencd@0: IF(${CMAKE_BUILD_TYPE} STREQUAL "Debug") ferencd@0: add_definitions("-DDEBUG_BUILD") ferencd@0: message("Debug build for development purposes only") ferencd@0: ENDIF() ferencd@0: ferencd@0: include(cmake/TargetArch.cmake) ferencd@0: target_architecture(TARGET_CPU) ferencd@0: message("Targeting: ${TARGET_CPU}") ferencd@0: ferencd@0: # Options ferencd@0: option(ENABLE_TESTS "Enable some unit tests" ON) ferencd@0: option(CLANG_SANITIZE "Use specific clang sanitizer compilation, development only" OFF) ferencd@0: option(coverage-build "gcov/lcov test coverage analysis (make coverage_test)" OFF) ferencd@0: ferencd@0: # Python ferencd@0: find_package (Python3 ferencd@0: COMPONENTS Interpreter Development Compiler) ferencd@0: ferencd@0: set(CMAKE_CXX_STANDARD 17) ferencd@0: set(CMAKE_CXX_STANDARD_REQUIRED ON) ferencd@0: ferencd@0: set(COMMON_COMPILER_FLAGS "-pedantic") ferencd@0: ferencd@0: if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") ferencd@0: if(CLANG_SANITIZE) ferencd@0: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_COMPILER_FLAGS} -fsanitize=address -fno-omit-frame-pointer -O1 -fno-optimize-sibling-calls") ferencd@0: else() ferencd@0: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_COMPILER_FLAGS} -fPIC -fsanitize=address -fno-omit-frame-pointer -O1 -fno-optimize-sibling-calls") ferencd@0: endif() ferencd@0: else() ferencd@0: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_COMPILER_FLAGS} -fpermissive -finline-functions -Wno-long-long -fvisibility-inlines-hidden") ferencd@0: endif() ferencd@0: ferencd@0: # Coverage build? ferencd@0: if(coverage-build) ferencd@0: set(CMAKE_BUILD_TYPE Debug) ferencd@0: message("building for coverage ...") ferencd@0: SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage -rdynamic -ftest-coverage -fprofile-arcs -fpermissive -finline-functions -Wno-long-long -fvisibility-inlines-hidden -fno-omit-frame-pointer -fsanitize=address") ferencd@0: SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage -rdynamic -ftest-coverage -fprofile-arcs -fpermissive -finline-functions -Wno-long-long -fvisibility-inlines-hidden -fno-omit-frame-pointer -fsanitize=address") ferencd@0: include(cmake/CodeCoverage.cmake) ferencd@0: SETUP_TARGET_FOR_COVERAGE(templater_test ctest coverage) ferencd@0: endif() ferencd@0: ferencd@0: MESSAGE("CMAKE FLAGS: ${CMAKE_CXX_FLAGS}") ferencd@0: add_definitions("-D_GLIBCXX_USE_CXX11_ABI") ferencd@0: ferencd@0: message("Generator: ${CMAKE_GENERATOR}") ferencd@0: ferencd@0: ## Compiler flags ferencd@0: if(CMAKE_COMPILER_IS_GNUCXX) ferencd@0: # Optimize the stuff if building RELEASE ferencd@0: if(CMAKE_BUILD_TYPE MATCHES RELEASE) ferencd@0: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Os") ## Optimize ferencd@0: set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s") ## Strip binary ferencd@0: else() ferencd@0: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") ## All warnings, please ferencd@0: endif() ferencd@0: ferencd@0: if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") ferencd@0: message("GCC version: ${CMAKE_CXX_COMPILER_VERSION}") ferencd@0: ferencd@0: if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.1) ferencd@0: add_definitions(-Wimplicit-fallthrough=0) ferencd@0: endif() ferencd@0: endif() ferencd@0: ferencd@0: endif() ferencd@0: ferencd@0: # Generate the header files for version info ferencd@0: set(WEB_VERSION_MAJOR 1) ferencd@0: set(WEB_VERSION_MINOR 0) ferencd@0: set(WEB_VERSION_PATCH 0) ferencd@0: ferencd@0: configure_file ( ferencd@0: ${CMAKE_CURRENT_SOURCE_DIR}/version.h.tpl ferencd@0: ${CMAKE_CURRENT_BINARY_DIR}/version.h ferencd@0: ) ferencd@0: ferencd@0: # Include directories ferencd@0: set(CMAKE_INCLUDE_CURRENT_DIR ON) ferencd@0: ferencd@0: include_directories( ferencd@0: SYSTEM ferencd@0: ${CONAN_INCLUDE_DIRS} ferencd@0: ${CMAKE_CURRENT_BINARY_DIR} ferencd@0: ${CMAKE_CURRENT_SOURCE_DIR} ferencd@0: ${CMAKE_CURRENT_SOURCE_DIR}/templates ferencd@0: ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/compressor ferencd@0: ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/tinyxml ferencd@0: ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty ferencd@0: ${CMAKE_CURRENT_SOURCE_DIR}/common ferencd@0: ${CMAKE_CURRENT_SOURCE_DIR}/cppdb ferencd@0: ${Python3_INCLUDE_DIRS} ferencd@0: ) ferencd@0: ferencd@0: add_definitions("-DPYTHON_SCRIPTING") ferencd@0: ferencd@0: add_subdirectory(cppdb) ferencd@0: add_subdirectory(common) ferencd@0: add_subdirectory(3rdparty/tinyxml) ferencd@0: add_subdirectory(3rdparty/compressor) ferencd@0: add_subdirectory(mailer) ferencd@0: add_subdirectory(templates) ferencd@0: add_subdirectory(server) ferencd@0: ferencd@0: if(ENABLE_TESTS) ferencd@0: add_subdirectory(tests) ferencd@0: enable_testing() ferencd@0: add_test(NAME templater_test COMMAND templ_test) ferencd@0: endif()