@@ -8,8 +8,6 @@ set(CMAKE_C_STANDARD_REQUIRED ON)
8
8
set (CMAKE_CXX_STANDARD 11)
9
9
set (CMAKE_CXX_STANDARD_REQUIRED ON )
10
10
11
- cmake_policy (SET CMP0083 NEW)
12
-
13
11
include (CheckCXXCompilerFlag)
14
12
15
13
# "configureoptimization.cmake" must be included after CLR_CMAKE_HOST_UNIX has been set.
@@ -40,11 +38,18 @@ set(CMAKE_CXX_FLAGS_CHECKED "")
40
38
set (CMAKE_EXE_LINKER_FLAGS_CHECKED "" )
41
39
set (CMAKE_SHARED_LINKER_FLAGS_CHECKED "" )
42
40
41
+ set (CMAKE_SHARED_LINKER_FLAGS_DEBUG "" )
42
+ set (CMAKE_SHARED_LINKER_FLAGS_RELEASE "" )
43
+ set (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "" )
44
+ set (CMAKE_EXE_LINKER_FLAGS_DEBUG "" )
45
+ set (CMAKE_EXE_LINKER_FLAGS_DEBUG "" )
46
+ set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "" )
47
+
43
48
add_compile_definitions ("$<$<OR:$<CONFIG:DEBUG>,$<CONFIG:CHECKED>>:DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1>" )
44
49
add_compile_definitions ("$<$<OR:$<CONFIG:RELEASE>,$<CONFIG:RELWITHDEBINFO>>:NDEBUG;URTBLDENV_FRIENDLY=Retail>" )
45
50
46
51
if (MSVC )
47
- add_link_options (/GUARD:CF)
52
+ add_linker_flag (/GUARD:CF)
48
53
49
54
# Linker flags
50
55
#
@@ -57,48 +62,51 @@ if (MSVC)
57
62
endif ()
58
63
59
64
#Do not create Side-by-Side Assembly Manifest
60
- add_link_options ($<$< STREQUAL :$<TARGET_PROPERTY: TYPE >,SHARED_LIBRARY>: /MANIFEST:NO > )
65
+ set (CMAKE_SHARED_LINKER_FLAGS " ${CMAKE_SHARED_LINKER_FLAGS} /MANIFEST:NO" )
61
66
# can handle addresses larger than 2 gigabytes
62
- add_link_options ($<$< STREQUAL :$<TARGET_PROPERTY: TYPE >,SHARED_LIBRARY>: /LARGEADDRESSAWARE> )
67
+ set (CMAKE_SHARED_LINKER_FLAGS " ${CMAKE_SHARED_LINKER_FLAGS} /LARGEADDRESSAWARE" )
63
68
#Compatible with Data Execution Prevention
64
- add_link_options ($<$< STREQUAL :$<TARGET_PROPERTY: TYPE >,SHARED_LIBRARY>: /NXCOMPAT> )
69
+ set (CMAKE_SHARED_LINKER_FLAGS " ${CMAKE_SHARED_LINKER_FLAGS} /NXCOMPAT" )
65
70
#Use address space layout randomization
66
- add_link_options ($<$< STREQUAL :$<TARGET_PROPERTY: TYPE >,SHARED_LIBRARY>: /DYNAMICBASE> )
71
+ set (CMAKE_SHARED_LINKER_FLAGS " ${CMAKE_SHARED_LINKER_FLAGS} /DYNAMICBASE" )
67
72
#shrink pdb size
68
- add_link_options ($<$< STREQUAL :$<TARGET_PROPERTY: TYPE >,SHARED_LIBRARY>: /PDBCOMPRESS> )
73
+ set (CMAKE_SHARED_LINKER_FLAGS " ${CMAKE_SHARED_LINKER_FLAGS} /PDBCOMPRESS" )
69
74
70
- add_link_options ($<$< STREQUAL :$<TARGET_PROPERTY: TYPE >,SHARED_LIBRARY>: /DEBUG> )
71
- add_link_options ($<$< STREQUAL :$<TARGET_PROPERTY: TYPE >,SHARED_LIBRARY>: /IGNORE :4197,4013,4254,4070,4221> )
72
- add_link_options ($<$< STREQUAL :$<TARGET_PROPERTY: TYPE >,SHARED_LIBRARY>: /SUBSYSTEM:WINDOWS,${WINDOWS_SUBSYSTEM_VERSION} > )
75
+ set (CMAKE_SHARED_LINKER_FLAGS " ${CMAKE_SHARED_LINKER_FLAGS} /DEBUG" )
76
+ set (CMAKE_SHARED_LINKER_FLAGS " ${CMAKE_SHARED_LINKER_FLAGS} /IGNORE:4197,4013,4254,4070,4221" )
77
+ set (CMAKE_SHARED_LINKER_FLAGS " ${CMAKE_SHARED_LINKER_FLAGS} /SUBSYSTEM:WINDOWS,${WINDOWS_SUBSYSTEM_VERSION} " )
73
78
74
79
set (CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /IGNORE:4221" )
75
80
76
- add_link_options ($<$< STREQUAL :$<TARGET_PROPERTY: TYPE >,EXECUTABLE>: /DEBUG> )
77
- add_link_options ($<$< STREQUAL :$<TARGET_PROPERTY: TYPE >,EXECUTABLE>: /PDBCOMPRESS> )
78
- add_link_options ($<$< STREQUAL :$<TARGET_PROPERTY: TYPE >,EXECUTABLE>: /STACK:1572864> )
81
+ set ( CMAKE_EXE_LINKER_FLAGS " ${CMAKE_EXE_LINKER_FLAGS} /DEBUG" )
82
+ set ( CMAKE_EXE_LINKER_FLAGS " ${CMAKE_EXE_LINKER_FLAGS} /PDBCOMPRESS" )
83
+ set ( CMAKE_EXE_LINKER_FLAGS " ${CMAKE_EXE_LINKER_FLAGS} /STACK:1572864" )
79
84
80
85
# Debug build specific flags
81
- add_link_options ($<$<AND :$<OR :$<CONFIG:DEBUG>,$<CONFIG:CHECKED>>,$<STREQUAL :$<TARGET_PROPERTY:TYPE >,SHARED_LIBRARY>>:/NOVCFEATURE>)
86
+ set (CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /NOVCFEATURE" )
87
+ set (CMAKE_SHARED_LINKER_FLAGS_CHECKED "${CMAKE_SHARED_LINKER_FLAGS_CHECKED} /NOVCFEATURE" )
82
88
83
89
# Checked build specific flags
84
- add_link_options ($<$<CONFIG:CHECKED>: /INCREMENTAL:NO > ) # prevent "warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:REF' specification"
85
- add_link_options ($<$<CONFIG:CHECKED>: /OPT:REF> )
86
- add_link_options ($<$<CONFIG:CHECKED>: /OPT:NOICF> )
90
+ add_linker_flag( /INCREMENTAL:NO CHECKED ) # prevent "warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:REF' specification"
91
+ add_linker_flag( /OPT:REF CHECKED )
92
+ add_linker_flag( /OPT:NOICF CHECKED )
87
93
88
94
# Release build specific flags
89
- add_link_options ($<$<CONFIG:RELEASE>:/LTCG>)
90
- add_link_options ($<$<CONFIG:RELEASE>:/OPT:REF>)
91
- add_link_options ($<$<CONFIG:RELEASE>:/OPT:ICF>)
95
+ add_linker_flag(/LTCG RELEASE)
96
+ add_linker_flag(/OPT:REF RELEASE)
97
+ add_linker_flag(/OPT:ICF RELEASE)
98
+ add_linker_flag(/INCREMENTAL:NO RELEASE)
92
99
set (CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG" )
93
100
94
101
# ReleaseWithDebugInfo build specific flags
95
- add_link_options ($<$<CONFIG:RELWITHDEBINFO>: /LTCG> )
96
- add_link_options ($<$<CONFIG:RELWITHDEBINFO>: /OPT:REF> )
97
- add_link_options ($<$<CONFIG:RELWITHDEBINFO>: /OPT:ICF> )
102
+ add_linker_flag( /LTCG RELWITHDEBINFO )
103
+ add_linker_flag( /OPT:REF RELWITHDEBINFO )
104
+ add_linker_flag( /OPT:ICF RELWITHDEBINFO )
98
105
set (CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO} /LTCG" )
99
106
100
107
# Force uCRT to be dynamically linked for Release build
101
- add_link_options ("$<$<CONFIG:RELEASE>:/NODEFAULTLIB:libucrt.lib;/DEFAULTLIB:ucrt.lib>" )
108
+ add_linker_flag(/NODEFAULTLIB:libucrt.lib RELEASE)
109
+ add_linker_flag(/DEFAULTLIB:ucrt.lib RELEASE)
102
110
103
111
elseif (CLR_CMAKE_HOST_UNIX)
104
112
# Set the values to display when interactively configuring CMAKE_BUILD_TYPE
@@ -157,11 +165,10 @@ elseif (CLR_CMAKE_HOST_UNIX)
157
165
158
166
# -fdata-sections -ffunction-sections: each function has own section instead of one per .o file (needed for --gc-sections)
159
167
# -O1: optimization level used instead of -O0 to avoid compile error "invalid operand for inline asm constraint"
160
- add_compile_definitions ("$<$<OR:$<CONFIG:DEBUG>,$<CONFIG:CHECKED>>:${CLR_SANITIZE_CXX_OPTIONS} ;-fdata-sections;--ffunction-sections;-O1>" )
161
- add_link_options ($<$<AND :$<OR :$<CONFIG:DEBUG>,$<CONFIG:CHECKED>>,$<STREQUAL :$<TARGET_PROPERTY:TYPE >,EXECUTABLE>>:${CLR_SANITIZE_LINK_OPTIONS} >)
162
-
168
+ add_compile_options ("$<$<OR:$<CONFIG:DEBUG>,$<CONFIG:CHECKED>>:${CLR_SANITIZE_CXX_OPTIONS} ;-fdata-sections;--ffunction-sections;-O1>" )
169
+ add_linker_flag("${CLR_SANITIZE_LINK_OPTIONS} " DEBUG CHECKED)
163
170
# -Wl and --gc-sections: drop unused sections\functions (similar to Windows /Gy function-level-linking)
164
- add_link_options ( "$<$<AND:$<OR:$<CONFIG:DEBUG>,$<CONFIG:CHECKED>>,$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>>: ${CLR_SANITIZE_LINK_OPTIONS} ; -Wl,--gc-sections>" )
171
+ add_linker_flag( " -Wl,--gc-sections" DEBUG CHECKED )
165
172
endif ()
166
173
endif (UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL CHECKED)
167
174
endif (MSVC )
@@ -173,15 +180,18 @@ endif(MSVC)
173
180
# ./build-native.sh cmakeargs "-DCLR_ADDITIONAL_COMPILER_OPTIONS=<...>" cmakeargs "-DCLR_ADDITIONAL_LINKER_FLAGS=<...>"
174
181
#
175
182
if (CLR_CMAKE_HOST_UNIX)
176
- add_link_options (${CLR_ADDITIONAL_LINKER_FLAGS} )
183
+ foreach (ADDTL_LINKER_FLAG ${CLR_ADDITIONAL_LINKER_FLAGS} )
184
+ add_linker_flag(${ADDTL_LINKER_FLAG} )
185
+ endforeach ()
177
186
endif (CLR_CMAKE_HOST_UNIX)
178
187
179
188
if (CLR_CMAKE_HOST_LINUX)
180
189
add_compile_options ($<$<COMPILE_LANGUAGE:ASM>:-Wa,--noexecstack>)
181
- add_link_options (-Wl,--build -id=sha1 -Wl,-z,relro,-z,now)
190
+ add_linker_flag(-Wl,--build -id=sha1)
191
+ add_linker_flag(-Wl,-z,relro,-z,now)
182
192
elseif (CLR_CMAKE_HOST_FREEBSD)
183
193
add_compile_options ($<$<COMPILE_LANGUAGE:ASM>:-Wa,--noexecstack>)
184
- add_link_options (LINKER:-- build -id=sha1)
194
+ add_linker_flag( "-Wl,-- build-id=sha1" )
185
195
elseif (CLR_CMAKE_HOST_SUNOS)
186
196
add_compile_options ($<$<COMPILE_LANGUAGE:ASM>:-Wa,--noexecstack>)
187
197
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector" )
@@ -361,7 +371,7 @@ if (CLR_CMAKE_HOST_UNIX)
361
371
if (CLR_CMAKE_HOST_OSX)
362
372
set (MACOS_VERSION_MIN_FLAGS -mmacosx-version -min=10.12)
363
373
add_compile_options (${MACOS_VERSION_MIN_FLAGS} )
364
- add_link_options (${MACOS_VERSION_MIN_FLAGS} )
374
+ add_linker_flag (${MACOS_VERSION_MIN_FLAGS} )
365
375
endif (CLR_CMAKE_HOST_OSX)
366
376
endif (CLR_CMAKE_HOST_UNIX)
367
377
@@ -517,7 +527,7 @@ if(CLR_CMAKE_ENABLE_CODE_COVERAGE)
517
527
518
528
add_compile_options (-fprofile-arcs)
519
529
add_compile_options (-ftest-coverage)
520
- add_link_options (--coverage)
530
+ add_linker_flag (--coverage)
521
531
else ()
522
532
message (FATAL_ERROR "Code coverage builds not supported on current platform" )
523
533
endif (CLR_CMAKE_HOST_UNIX)
0 commit comments