@@ -91,24 +91,24 @@ function(_add_host_variant_c_compile_link_flags name)
91
91
get_target_triple (target target_variant "${SWIFT_HOST_VARIANT_SDK} " "${SWIFT_HOST_VARIANT_ARCH} "
92
92
MACCATALYST_BUILD_FLAVOR ""
93
93
DEPLOYMENT_VERSION "${DEPLOYMENT_VERSION} " )
94
- target_compile_options (${name} PRIVATE -target;${target} )
94
+ target_compile_options (${name} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX > : -target;${target} > )
95
95
target_link_options (${name} PRIVATE -target;${target} )
96
96
endif ()
97
97
98
98
set (_sysroot
99
99
"${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK} _ARCH_${SWIFT_HOST_VARIANT_ARCH} _PATH}" )
100
100
if (SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_USE_ISYSROOT )
101
- target_compile_options (${name} PRIVATE -isysroot;${_sysroot} )
101
+ target_compile_options (${name} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX > : -isysroot;${_sysroot} > )
102
102
elseif (NOT SWIFT_COMPILER_IS_MSVC_LIKE AND NOT "${_sysroot} " STREQUAL "/" )
103
- target_compile_options (${name} PRIVATE --sysroot=${_sysroot} )
103
+ target_compile_options (${name} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX > : --sysroot=${_sysroot} > )
104
104
endif ()
105
105
106
106
if (SWIFT_HOST_VARIANT_SDK STREQUAL ANDROID )
107
107
# lld can handle targeting the android build. However, if lld is not
108
108
# enabled, then fallback to the linker included in the android NDK.
109
109
if (NOT SWIFT_USE_LINKER STREQUAL "lld" )
110
110
swift_android_tools_path (${SWIFT_HOST_VARIANT_ARCH} tools_path )
111
- target_compile_options (${name} PRIVATE -B${tools_path} )
111
+ target_compile_options (${name} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX > : -B${tools_path} > )
112
112
endif ()
113
113
endif ()
114
114
@@ -117,13 +117,15 @@ function(_add_host_variant_c_compile_link_flags name)
117
117
# of options by target_compile_options -- this way no undesired
118
118
# side effects are introduced should a new search path be added.
119
119
target_compile_options (${name} PRIVATE
120
+ $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX> :
120
121
-arch ${SWIFT_HOST_VARIANT_ARCH}
121
- "-F${SWIFT_SDK_${SWIFT_HOST_VARIANT_ARCH} _PATH}/../../../Developer/Library/Frameworks" )
122
+ "-F${SWIFT_SDK_${SWIFT_HOST_VARIANT_ARCH} _PATH}/../../../Developer/Library/Frameworks"
123
+ > )
122
124
endif ()
123
125
124
126
_compute_lto_flag ("${SWIFT_TOOLS_ENABLE_LTO} " _lto_flag_out )
125
127
if (_lto_flag_out )
126
- target_compile_options (${name} PRIVATE ${_lto_flag_out} )
128
+ target_compile_options (${name} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX > : $ {_lto_flag_out}> )
127
129
target_link_options (${name} PRIVATE ${_lto_flag_out} )
128
130
endif ()
129
131
endfunction ()
@@ -135,9 +137,9 @@ function(_add_host_variant_c_compile_flags target)
135
137
is_build_type_optimized ("${CMAKE_BUILD_TYPE} " optimized )
136
138
if (optimized )
137
139
if ("${CMAKE_BUILD_TYPE} " STREQUAL "MinSizeRel" )
138
- target_compile_options (${target} PRIVATE -Os )
140
+ target_compile_options (${target} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX > : -Os> )
139
141
else ()
140
- target_compile_options (${target} PRIVATE -O2 )
142
+ target_compile_options (${target} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX > : -O2> )
141
143
endif ()
142
144
143
145
# Omit leaf frame pointers on x86 production builds (optimized, no debug
@@ -146,17 +148,17 @@ function(_add_host_variant_c_compile_flags target)
146
148
if (NOT debug AND NOT LLVM_ENABLE_ASSERTIONS )
147
149
if (SWIFT_HOST_VARIANT_ARCH MATCHES "i?86" )
148
150
if (NOT SWIFT_COMPILER_IS_MSVC_LIKE )
149
- target_compile_options (${target} PRIVATE -momit-leaf-frame-pointer )
151
+ target_compile_options (${target} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX > : -momit-leaf-frame-pointer> )
150
152
else ()
151
- target_compile_options (${target} PRIVATE /Oy )
153
+ target_compile_options (${target} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX > : /Oy> )
152
154
endif ()
153
155
endif ()
154
156
endif ()
155
157
else ()
156
158
if (NOT SWIFT_COMPILER_IS_MSVC_LIKE )
157
- target_compile_options (${target} PRIVATE -O0 )
159
+ target_compile_options (${target} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX > : -O0> )
158
160
else ()
159
- target_compile_options (${target} PRIVATE /Od )
161
+ target_compile_options (${target} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX > : /Od> )
160
162
endif ()
161
163
endif ()
162
164
@@ -166,7 +168,7 @@ function(_add_host_variant_c_compile_flags target)
166
168
if (debuginfo )
167
169
_compute_lto_flag ("${SWIFT_TOOLS_ENABLE_LTO} " _lto_flag_out )
168
170
if (_lto_flag_out )
169
- target_compile_options (${target} PRIVATE -gline-tables-only )
171
+ target_compile_options (${target} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX > : -gline-tables-only> )
170
172
else ()
171
173
target_compile_options (${target} PRIVATE -g )
172
174
endif ()
@@ -179,26 +181,24 @@ function(_add_host_variant_c_compile_flags target)
179
181
# MSVC/clang-cl don't support -fno-pic or -fms-compatibility-version.
180
182
if (NOT SWIFT_COMPILER_IS_MSVC_LIKE )
181
183
target_compile_options (${target} PRIVATE
182
- -fms-compatibility-version=1900
183
- -fno-pic )
184
+ $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX> :-fms-compatibility-version=1900 -fno-pic> )
184
185
endif ()
185
186
186
187
target_compile_definitions (${target} PRIVATE
187
- LLVM_ON_WIN32
188
- _CRT_SECURE_NO_WARNINGS
189
- _CRT_NONSTDC_NO_WARNINGS )
188
+ $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX> :LLVM_ON_WIN32 _CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_WARNINGS> )
190
189
if (NOT "${CMAKE_C_COMPILER_ID} " STREQUAL "MSVC" )
191
190
target_compile_definitions (${target} PRIVATE
192
- _CRT_USE_BUILTIN_OFFSETOF )
191
+ $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX > : _CRT_USE_BUILTIN_OFFSETOF> )
193
192
endif ()
194
193
# TODO(compnerd) permit building for different families
195
194
target_compile_definitions (${target} PRIVATE
196
- _CRT_USE_WINAPI_FAMILY_DESKTOP_APP )
195
+ $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX > : _CRT_USE_WINAPI_FAMILY_DESKTOP_APP> )
197
196
if (SWIFT_HOST_VARIANT_ARCH MATCHES arm )
198
197
target_compile_definitions (${target} PRIVATE
199
- _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE )
198
+ $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX > : _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE> )
200
199
endif ()
201
200
target_compile_definitions (${target} PRIVATE
201
+ $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX> :
202
202
# TODO(compnerd) handle /MT
203
203
_MD
204
204
_DLL
@@ -207,32 +207,32 @@ function(_add_host_variant_c_compile_flags target)
207
207
# NOTE: We use over-aligned values for the RefCount side-table
208
208
# (see revision d913eefcc93f8c80d6d1a6de4ea898a2838d8b6f)
209
209
# This is required to build with VS2017 15.8+
210
- _ENABLE_EXTENDED_ALIGNED_STORAGE=1 )
210
+ _ENABLE_EXTENDED_ALIGNED_STORAGE=1> )
211
211
212
212
# msvcprt's std::function requires RTTI, but we do not want RTTI data.
213
213
# Emulate /GR-.
214
214
# TODO(compnerd) when moving up to VS 2017 15.3 and newer, we can disable
215
215
# RTTI again
216
216
if (SWIFT_COMPILER_IS_MSVC_LIKE )
217
- target_compile_options (${target} PRIVATE /GR- )
217
+ target_compile_options (${target} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX > : /GR-> )
218
218
else ()
219
219
target_compile_options (${target} PRIVATE
220
- -frtti
221
- "SHELL:-Xclang -fno-rtti-data" )
220
+ $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX > : -frtti>
221
+ $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX > "SHELL:-Xclang -fno-rtti-data "> )
222
222
endif()
223
223
224
224
# NOTE: VS 2017 15.3 introduced this to disable the static components of
225
225
# RTTI as well. This requires a newer SDK though and we do not have
226
226
# guarantees on the SDK version currently.
227
227
target_compile_definitions(${target} PRIVATE
228
- _HAS_STATIC_RTTI=0 )
228
+ $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>: _HAS_STATIC_RTTI=0> )
229
229
230
230
# NOTE(compnerd) workaround LLVM invoking `add_definitions(-D_DEBUG)` which
231
231
# causes failures for the runtime library when cross-compiling due to
232
232
# undefined symbols from the standard library.
233
233
if(NOT CMAKE_BUILD_TYPE STREQUAL Debug)
234
234
target_compile_options(${target} PRIVATE
235
- -U_DEBUG )
235
+ $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>: -U_DEBUG> )
236
236
endif()
237
237
endif()
238
238
@@ -246,40 +246,39 @@ function(_add_host_variant_c_compile_flags target)
246
246
# the build.
247
247
if(CMAKE_C_COMPILER_ID MATCHES Clang AND CMAKE_C_COMPILER_VERSION
248
248
VERSION_LESS 9.0.0)
249
- target_compile_options (${target} PRIVATE -mcx16 )
249
+ target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>: -mcx16> )
250
250
endif()
251
251
endif()
252
252
endif()
253
253
254
254
if(LLVM_ENABLE_ASSERTIONS)
255
- target_compile_options (${target} PRIVATE -UNDEBUG )
255
+ target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>: -UNDEBUG> )
256
256
else()
257
- target_compile_definitions (${target} PRIVATE -DNDEBUG )
257
+ target_compile_definitions(${target} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>: -DNDEBUG> )
258
258
endif()
259
259
260
260
if(SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS)
261
261
target_compile_definitions(${target} PRIVATE
262
- SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS )
262
+ $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>: SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS> )
263
263
endif()
264
264
265
265
if(SWIFT_ANALYZE_CODE_COVERAGE)
266
266
target_compile_options(${target} PRIVATE
267
- -fprofile-instr-generate
268
- -fcoverage-mapping )
267
+ $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-fprofile-instr-generate -fcoverage-mapping>)
269
268
endif()
270
269
271
270
if((SWIFT_HOST_VARIANT_ARCH STREQUAL armv7 OR
272
271
SWIFT_HOST_VARIANT_ARCH STREQUAL aarch64) AND
273
272
(SWIFT_HOST_VARIANT_SDK STREQUAL LINUX OR
274
273
SWIFT_HOST_VARIANT_SDK STREQUAL ANDROID))
275
- target_compile_options (${target} PRIVATE -funwind-tables )
274
+ target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>: -funwind-tables> )
276
275
endif()
277
276
278
277
if(SWIFT_HOST_VARIANT_SDK STREQUAL " LINUX ")
279
278
if(SWIFT_HOST_VARIANT_ARCH STREQUAL x86_64)
280
279
# this is the minimum architecture that supports 16 byte CAS, which is
281
280
# necessary to avoid a dependency to libatomic
282
- target_compile_options (${target} PRIVATE -march=core2 )
281
+ target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>: -march=core2> )
283
282
endif()
284
283
endif()
285
284
@@ -289,8 +288,7 @@ function(_add_host_variant_c_compile_flags target)
289
288
if(" ${SWIFT_HOST_VARIANT_ARCH} " MATCHES " armv6|armv7|i686 " AND
290
289
NOT (SWIFT_HOST_VARIANT_SDK STREQUAL ANDROID AND SWIFT_ANDROID_API_LEVEL LESS 24))
291
290
target_compile_definitions(${target} PRIVATE
292
- _LARGEFILE_SOURCE
293
- _FILE_OFFSET_BITS=64 )
291
+ $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:_LARGEFILE_SOURCE _FILE_OFFSET_BITS=64>)
294
292
endif()
295
293
endfunction()
296
294
@@ -499,14 +497,15 @@ function(add_swift_host_library name)
499
497
if(NOT ${CMAKE_C_COMPILER_ID} STREQUAL MSVC)
500
498
swift_windows_get_sdk_vfs_overlay(ASHL_VFS_OVERLAY)
501
499
target_compile_options(${name} PRIVATE
502
- "SHELL:-Xclang -ivfsoverlay -Xclang ${ASHL_VFS_OVERLAY} " )
500
+ $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>: " SHELL:-Xclang -ivfsoverlay -Xclang ${ASHL_VFS_OVERLAY} "> )
503
501
504
502
# MSVC doesn't support -Xclang. We don't need to manually specify
505
503
# the dependent libraries as `cl` does so.
506
504
target_compile_options(${name} PRIVATE
507
- "SHELL:-Xclang --dependent-lib=oldnames"
505
+ $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>: " SHELL:-Xclang --dependent-lib=oldnames ">
508
506
# TODO(compnerd) handle /MT, /MTd
509
- "SHELL:-Xclang --dependent-lib=msvcrt$<$<CONFIG:Debug>:d>" )
507
+ $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:" SHELL:-Xclang --dependent-lib=msvcrt$<$<CONFIG:Debug>:d> ">
508
+ )
510
509
endif()
511
510
512
511
set_target_properties(${name} PROPERTIES
@@ -597,9 +596,10 @@ function(add_swift_host_tool executable)
597
596
# MSVC doesn't support -Xclang. We don't need to manually specify
598
597
# the dependent libraries as `cl` does so.
599
598
target_compile_options(${executable} PRIVATE
600
- "SHELL:-Xclang --dependent-lib=oldnames"
599
+ $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>: " SHELL:-Xclang --dependent-lib=oldnames ">
601
600
# TODO(compnerd) handle /MT, /MTd
602
- "SHELL:-Xclang --dependent-lib=msvcrt$<$<CONFIG:Debug>:d>" )
601
+ $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:" SHELL:-Xclang --dependent-lib=msvcrt$<$<CONFIG:Debug>:d> ">
602
+ )
603
603
endif()
604
604
endif()
605
605
@@ -627,7 +627,7 @@ function(add_swift_fuzzer_host_tool executable)
627
627
628
628
# Then make sure that we pass the -fsanitize=fuzzer flag both on the cflags
629
629
# and cxx flags line.
630
- target_compile_options (${executable} PRIVATE "-fsanitize=fuzzer" )
630
+ target_compile_options(${executable} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>: " -fsanitize=fuzzer "> )
631
631
target_link_libraries(${executable} PRIVATE " -fsanitize=fuzzer ")
632
632
endfunction()
633
633
0 commit comments