|
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()
|