@@ -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