/
CMakeCompilers.txt
105 lines (86 loc) · 4.14 KB
/
CMakeCompilers.txt
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
#
# @file
#
set(CMAKE_CONFIGURATION_TYPES debug release relwithdebinfo calltrace distrib)
if (NOT DEFINED ARCH_TYPE)
set(ARCH_TYPE "native")
endif()
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_ARCH_FLAGS "-march=${ARCH_TYPE}")
set(CMAKE_CXX_COMMON_FLAGS "-Wall -Wextra ${CMAKE_CXX_ARCH_FLAGS} -fPIC")
if (CODE_COVERAGE)
set(CODE_COVERAGE_FLAGS "-O0 --coverage")
set(CTEST_COVERAGE_COMMAND "gcov")
message(STATUS "Code coverage instrumentation enabled")
endif()
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "${CMAKE_CXX_COMMON_FLAGS} ${CODE_COVERAGE_FLAGS}")
###############################################################################
# Configure linker
###############################################################################
# Use ld.mold if available
OPTION(USE_LD_MOLD "Use mold linker" ON)
if (USE_LD_MOLD)
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -fuse-ld=mold -Wl,--version ERROR_QUIET OUTPUT_VARIABLE LD_VERSION)
if ("${LD_VERSION}" MATCHES "mold")
message(STATUS "using mold linker as it is available.")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=mold -Wl,--disable-new-dtags")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=mold -Wl,--disable-new-dtags")
else ()
message(WARNING "mold linker isn't available, using the default system linker.")
set(USE_LD_MOLD OFF)
endif ()
endif ()
# Use ccache if installed
find_program(CCACHE_PROGRAM ccache)
if(NOT CODE_COVERAGE)
if(CCACHE_PROGRAM)
set(CXX_LAUNCHER "${CCACHE_PROGRAM}")
message(STATUS "Compilation will be done with CCache")
message(STATUS "CCACHE_DIR=${CCACHE_DIR}")
endif()
endif()
MESSAGE(STATUS "Build type is ${CMAKE_BUILD_TYPE}")
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_CXX_COMMON_FLAGS "-Qunused-arguments ${CMAKE_CXX_COMMON_FLAGS}")
endif()
OPTION(USE_LTO "Use LTO" OFF)
if (${USER_TARGET} STREQUAL "Customer")
set(USE_LTO true)
endif()
if (USE_LD_MOLD AND USE_LTO)
message(STATUS "LTO will be used.")
if (CMAKE_COMPILER_IS_GNUCC)
set(LTO_CXX_FLAGS "-flto")
set(LTO_LINK_FLAGS "-flto")
endif()
else()
message(STATUS "LTO won't be used.")
set(LTO_CXX_FLAGS "")
set(LTO_LINK_FLAGS "")
endif()
set(CMAKE_CXX_COMMON_FLAGS "${CMAKE_CXX_COMMON_FLAGS} ${LTO_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS_DEBUG "-ggdb ${CMAKE_CXX_ARCH_FLAGS} ${CMAKE_CXX_COMMON_FLAGS}")
list(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG ${LTO_LINK_FLAGS})
list(APPEND CMAKE_MODULE_LINKER_FLAGS_DEBUG ${LTO_LINK_FLAGS})
list(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG ${LTO_LINK_FLAGS})
set(CMAKE_CXX_FLAGS_RELEASE "-Ofast -DNDEBUG ${CMAKE_CXX_ARCH_FLAGS} ${CMAKE_CXX_COMMON_FLAGS}")
list(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE ${LTO_LINK_FLAGS})
list(APPEND CMAKE_MODULE_LINKER_FLAGS_RELEASE ${LTO_LINK_FLAGS})
list(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE ${LTO_LINK_FLAGS})
set(CMAKE_CXX_FLAGS_DISTRIB "-Ofast -ggdb -DNDEBUG ${CMAKE_CXX_ARCH_FLAGS} ${CMAKE_CXX_COMMON_FLAGS}")
list(APPEND CMAKE_SHARED_LINKER_FLAGS_DISTRIB ${LTO_LINK_FLAGS})
list(APPEND CMAKE_MODULE_LINKER_FLAGS_DISTRIB ${LTO_LINK_FLAGS})
list(APPEND CMAKE_EXE_LINKER_FLAGS_DISTRIB ${LTO_LINK_FLAGS})
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-Ofast -ggdb -DNDEBUG ${CMAKE_CXX_ARCH_FLAGS} ${CMAKE_CXX_COMMON_FLAGS}")
list(APPEND CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO ${LTO_LINK_FLAGS})
list(APPEND CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO ${LTO_LINK_FLAGS})
list(APPEND CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO ${LTO_LINK_FLAGS})
message(STATUS CMAKE_CXX_FLAGS_RELWITHDEBINFO=${CMAKE_CXX_FLAGS_RELWITHDEBINFO})
# due to a GCC problem, instrinsics must be exluded from instrumentation
# http://nic.uoregon.edu/pipermail/tau-users/2012-September/000713.htm
# http://nic.uoregon.edu/pipermail/tau-users/2012-September/000717.html
set(CMAKE_CXX_FLAGS_CALLTRACE "-ggdb -finstrument-functions -finstrument-functions-exclude-file-list=intrin,include/c++,include/tbb,include/boost ${CMAKE_CXX_ARCH_FLAGS} ${CMAKE_CXX_COMMON_FLAGS}")
list(APPEND CMAKE_SHARED_LINKER_FLAGS_CALLTRACE ${LTO_LINK_FLAGS})
list(APPEND CMAKE_MODULE_LINKER_FLAGS_CALLTRACE ${LTO_LINK_FLAGS})
list(APPEND CMAKE_EXE_LINKER_FLAGS_CALLTRACE ${LTO_LINK_FLAGS})