annotate CMakeLists.txt @ 0:a4671277546c tip

created the repository for the thymian project
author ferencd
date Tue, 17 Aug 2021 11:19:54 +0200
parents
children
rev   line source
ferencd@0 1 cmake_minimum_required (VERSION 3.1)
ferencd@0 2
ferencd@0 3 project(thymian)
ferencd@0 4
ferencd@0 5 # CMake Settings
ferencd@0 6 SET(CMAKE_COLOR_MAKEFILE ON)
ferencd@0 7 SET(CMAKE_VERBOSE_MAKEFILE OFF)
ferencd@0 8 set(THYMIAN_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
ferencd@0 9
ferencd@0 10 if(NOT CMAKE_BUILD_TYPE)
ferencd@0 11 set(CMAKE_BUILD_TYPE "Debug")
ferencd@0 12 endif()
ferencd@0 13
ferencd@0 14 IF(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
ferencd@0 15 add_definitions("-DDEBUG_BUILD")
ferencd@0 16 message("Debug build for development purposes only")
ferencd@0 17 ENDIF()
ferencd@0 18
ferencd@0 19 include(cmake/TargetArch.cmake)
ferencd@0 20 target_architecture(TARGET_CPU)
ferencd@0 21 message("Targeting: ${TARGET_CPU}")
ferencd@0 22
ferencd@0 23 # Options
ferencd@0 24 option(ENABLE_TESTS "Enable some unit tests" ON)
ferencd@0 25 option(CLANG_SANITIZE "Use specific clang sanitizer compilation, development only" OFF)
ferencd@0 26 option(coverage-build "gcov/lcov test coverage analysis (make coverage_test)" OFF)
ferencd@0 27
ferencd@0 28 # Python
ferencd@0 29 find_package (Python3
ferencd@0 30 COMPONENTS Interpreter Development Compiler)
ferencd@0 31
ferencd@0 32 set(CMAKE_CXX_STANDARD 17)
ferencd@0 33 set(CMAKE_CXX_STANDARD_REQUIRED ON)
ferencd@0 34
ferencd@0 35 set(COMMON_COMPILER_FLAGS "-pedantic")
ferencd@0 36
ferencd@0 37 if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
ferencd@0 38 if(CLANG_SANITIZE)
ferencd@0 39 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_COMPILER_FLAGS} -fsanitize=address -fno-omit-frame-pointer -O1 -fno-optimize-sibling-calls")
ferencd@0 40 else()
ferencd@0 41 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_COMPILER_FLAGS} -fPIC -fsanitize=address -fno-omit-frame-pointer -O1 -fno-optimize-sibling-calls")
ferencd@0 42 endif()
ferencd@0 43 else()
ferencd@0 44 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_COMPILER_FLAGS} -fpermissive -finline-functions -Wno-long-long -fvisibility-inlines-hidden")
ferencd@0 45 endif()
ferencd@0 46
ferencd@0 47 # Coverage build?
ferencd@0 48 if(coverage-build)
ferencd@0 49 set(CMAKE_BUILD_TYPE Debug)
ferencd@0 50 message("building for coverage ...")
ferencd@0 51 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 52 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 53 include(cmake/CodeCoverage.cmake)
ferencd@0 54 SETUP_TARGET_FOR_COVERAGE(templater_test ctest coverage)
ferencd@0 55 endif()
ferencd@0 56
ferencd@0 57 MESSAGE("CMAKE FLAGS: ${CMAKE_CXX_FLAGS}")
ferencd@0 58 add_definitions("-D_GLIBCXX_USE_CXX11_ABI")
ferencd@0 59
ferencd@0 60 message("Generator: ${CMAKE_GENERATOR}")
ferencd@0 61
ferencd@0 62 ## Compiler flags
ferencd@0 63 if(CMAKE_COMPILER_IS_GNUCXX)
ferencd@0 64 # Optimize the stuff if building RELEASE
ferencd@0 65 if(CMAKE_BUILD_TYPE MATCHES RELEASE)
ferencd@0 66 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Os") ## Optimize
ferencd@0 67 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s") ## Strip binary
ferencd@0 68 else()
ferencd@0 69 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") ## All warnings, please
ferencd@0 70 endif()
ferencd@0 71
ferencd@0 72 if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
ferencd@0 73 message("GCC version: ${CMAKE_CXX_COMPILER_VERSION}")
ferencd@0 74
ferencd@0 75 if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.1)
ferencd@0 76 add_definitions(-Wimplicit-fallthrough=0)
ferencd@0 77 endif()
ferencd@0 78 endif()
ferencd@0 79
ferencd@0 80 endif()
ferencd@0 81
ferencd@0 82 # Generate the header files for version info
ferencd@0 83 set(WEB_VERSION_MAJOR 1)
ferencd@0 84 set(WEB_VERSION_MINOR 0)
ferencd@0 85 set(WEB_VERSION_PATCH 0)
ferencd@0 86
ferencd@0 87 configure_file (
ferencd@0 88 ${CMAKE_CURRENT_SOURCE_DIR}/version.h.tpl
ferencd@0 89 ${CMAKE_CURRENT_BINARY_DIR}/version.h
ferencd@0 90 )
ferencd@0 91
ferencd@0 92 # Include directories
ferencd@0 93 set(CMAKE_INCLUDE_CURRENT_DIR ON)
ferencd@0 94
ferencd@0 95 include_directories(
ferencd@0 96 SYSTEM
ferencd@0 97 ${CONAN_INCLUDE_DIRS}
ferencd@0 98 ${CMAKE_CURRENT_BINARY_DIR}
ferencd@0 99 ${CMAKE_CURRENT_SOURCE_DIR}
ferencd@0 100 ${CMAKE_CURRENT_SOURCE_DIR}/templates
ferencd@0 101 ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/compressor
ferencd@0 102 ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/tinyxml
ferencd@0 103 ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty
ferencd@0 104 ${CMAKE_CURRENT_SOURCE_DIR}/common
ferencd@0 105 ${CMAKE_CURRENT_SOURCE_DIR}/cppdb
ferencd@0 106 ${Python3_INCLUDE_DIRS}
ferencd@0 107 )
ferencd@0 108
ferencd@0 109 add_definitions("-DPYTHON_SCRIPTING")
ferencd@0 110
ferencd@0 111 add_subdirectory(cppdb)
ferencd@0 112 add_subdirectory(common)
ferencd@0 113 add_subdirectory(3rdparty/tinyxml)
ferencd@0 114 add_subdirectory(3rdparty/compressor)
ferencd@0 115 add_subdirectory(mailer)
ferencd@0 116 add_subdirectory(templates)
ferencd@0 117 add_subdirectory(server)
ferencd@0 118
ferencd@0 119 if(ENABLE_TESTS)
ferencd@0 120 add_subdirectory(tests)
ferencd@0 121 enable_testing()
ferencd@0 122 add_test(NAME templater_test COMMAND templ_test)
ferencd@0 123 endif()