Skip to content

Commit 95aeaf7

Browse files
authored
Merge pull request #37510 from gottesmm/pr-af6b60d3b83155f33bb1d91e497422748ddcc917
[cmake] Use generator expressions to change conditionalize target_compile_definition that are for c/c++ only be used for c/c++
2 parents b46f7e2 + 558c9d4 commit 95aeaf7

File tree

1 file changed

+43
-43
lines changed

1 file changed

+43
-43
lines changed

cmake/modules/AddSwift.cmake

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -91,24 +91,24 @@ function(_add_host_variant_c_compile_link_flags name)
9191
get_target_triple(target target_variant "${SWIFT_HOST_VARIANT_SDK}" "${SWIFT_HOST_VARIANT_ARCH}"
9292
MACCATALYST_BUILD_FLAVOR ""
9393
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}>)
9595
target_link_options(${name} PRIVATE -target;${target})
9696
endif()
9797

9898
set(_sysroot
9999
"${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${SWIFT_HOST_VARIANT_ARCH}_PATH}")
100100
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}>)
102102
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}>)
104104
endif()
105105

106106
if(SWIFT_HOST_VARIANT_SDK STREQUAL ANDROID)
107107
# lld can handle targeting the android build. However, if lld is not
108108
# enabled, then fallback to the linker included in the android NDK.
109109
if(NOT SWIFT_USE_LINKER STREQUAL "lld")
110110
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}>)
112112
endif()
113113
endif()
114114

@@ -117,13 +117,15 @@ function(_add_host_variant_c_compile_link_flags name)
117117
# of options by target_compile_options -- this way no undesired
118118
# side effects are introduced should a new search path be added.
119119
target_compile_options(${name} PRIVATE
120+
$<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:
120121
-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+
>)
122124
endif()
123125

124126
_compute_lto_flag("${SWIFT_TOOLS_ENABLE_LTO}" _lto_flag_out)
125127
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}>)
127129
target_link_options(${name} PRIVATE ${_lto_flag_out})
128130
endif()
129131
endfunction()
@@ -135,9 +137,9 @@ function(_add_host_variant_c_compile_flags target)
135137
is_build_type_optimized("${CMAKE_BUILD_TYPE}" optimized)
136138
if(optimized)
137139
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>)
139141
else()
140-
target_compile_options(${target} PRIVATE -O2)
142+
target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-O2>)
141143
endif()
142144

143145
# Omit leaf frame pointers on x86 production builds (optimized, no debug
@@ -146,17 +148,17 @@ function(_add_host_variant_c_compile_flags target)
146148
if(NOT debug AND NOT LLVM_ENABLE_ASSERTIONS)
147149
if(SWIFT_HOST_VARIANT_ARCH MATCHES "i?86")
148150
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>)
150152
else()
151-
target_compile_options(${target} PRIVATE /Oy)
153+
target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:/Oy>)
152154
endif()
153155
endif()
154156
endif()
155157
else()
156158
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>)
158160
else()
159-
target_compile_options(${target} PRIVATE /Od)
161+
target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:/Od>)
160162
endif()
161163
endif()
162164

@@ -166,7 +168,7 @@ function(_add_host_variant_c_compile_flags target)
166168
if(debuginfo)
167169
_compute_lto_flag("${SWIFT_TOOLS_ENABLE_LTO}" _lto_flag_out)
168170
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>)
170172
else()
171173
target_compile_options(${target} PRIVATE -g)
172174
endif()
@@ -179,26 +181,24 @@ function(_add_host_variant_c_compile_flags target)
179181
# MSVC/clang-cl don't support -fno-pic or -fms-compatibility-version.
180182
if(NOT SWIFT_COMPILER_IS_MSVC_LIKE)
181183
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>)
184185
endif()
185186

186187
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>)
190189
if(NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
191190
target_compile_definitions(${target} PRIVATE
192-
_CRT_USE_BUILTIN_OFFSETOF)
191+
$<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:_CRT_USE_BUILTIN_OFFSETOF>)
193192
endif()
194193
# TODO(compnerd) permit building for different families
195194
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>)
197196
if(SWIFT_HOST_VARIANT_ARCH MATCHES arm)
198197
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>)
200199
endif()
201200
target_compile_definitions(${target} PRIVATE
201+
$<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:
202202
# TODO(compnerd) handle /MT
203203
_MD
204204
_DLL
@@ -207,32 +207,32 @@ function(_add_host_variant_c_compile_flags target)
207207
# NOTE: We use over-aligned values for the RefCount side-table
208208
# (see revision d913eefcc93f8c80d6d1a6de4ea898a2838d8b6f)
209209
# This is required to build with VS2017 15.8+
210-
_ENABLE_EXTENDED_ALIGNED_STORAGE=1)
210+
_ENABLE_EXTENDED_ALIGNED_STORAGE=1>)
211211

212212
# msvcprt's std::function requires RTTI, but we do not want RTTI data.
213213
# Emulate /GR-.
214214
# TODO(compnerd) when moving up to VS 2017 15.3 and newer, we can disable
215215
# RTTI again
216216
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->)
218218
else()
219219
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">)
222222
endif()
223223
224224
# NOTE: VS 2017 15.3 introduced this to disable the static components of
225225
# RTTI as well. This requires a newer SDK though and we do not have
226226
# guarantees on the SDK version currently.
227227
target_compile_definitions(${target} PRIVATE
228-
_HAS_STATIC_RTTI=0)
228+
$<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:_HAS_STATIC_RTTI=0>)
229229
230230
# NOTE(compnerd) workaround LLVM invoking `add_definitions(-D_DEBUG)` which
231231
# causes failures for the runtime library when cross-compiling due to
232232
# undefined symbols from the standard library.
233233
if(NOT CMAKE_BUILD_TYPE STREQUAL Debug)
234234
target_compile_options(${target} PRIVATE
235-
-U_DEBUG)
235+
$<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-U_DEBUG>)
236236
endif()
237237
endif()
238238
@@ -246,40 +246,39 @@ function(_add_host_variant_c_compile_flags target)
246246
# the build.
247247
if(CMAKE_C_COMPILER_ID MATCHES Clang AND CMAKE_C_COMPILER_VERSION
248248
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>)
250250
endif()
251251
endif()
252252
endif()
253253
254254
if(LLVM_ENABLE_ASSERTIONS)
255-
target_compile_options(${target} PRIVATE -UNDEBUG)
255+
target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-UNDEBUG>)
256256
else()
257-
target_compile_definitions(${target} PRIVATE -DNDEBUG)
257+
target_compile_definitions(${target} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-DNDEBUG>)
258258
endif()
259259
260260
if(SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS)
261261
target_compile_definitions(${target} PRIVATE
262-
SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS)
262+
$<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS>)
263263
endif()
264264
265265
if(SWIFT_ANALYZE_CODE_COVERAGE)
266266
target_compile_options(${target} PRIVATE
267-
-fprofile-instr-generate
268-
-fcoverage-mapping)
267+
$<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-fprofile-instr-generate -fcoverage-mapping>)
269268
endif()
270269
271270
if((SWIFT_HOST_VARIANT_ARCH STREQUAL armv7 OR
272271
SWIFT_HOST_VARIANT_ARCH STREQUAL aarch64) AND
273272
(SWIFT_HOST_VARIANT_SDK STREQUAL LINUX OR
274273
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>)
276275
endif()
277276
278277
if(SWIFT_HOST_VARIANT_SDK STREQUAL "LINUX")
279278
if(SWIFT_HOST_VARIANT_ARCH STREQUAL x86_64)
280279
# this is the minimum architecture that supports 16 byte CAS, which is
281280
# 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>)
283282
endif()
284283
endif()
285284
@@ -289,8 +288,7 @@ function(_add_host_variant_c_compile_flags target)
289288
if("${SWIFT_HOST_VARIANT_ARCH}" MATCHES "armv6|armv7|i686" AND
290289
NOT (SWIFT_HOST_VARIANT_SDK STREQUAL ANDROID AND SWIFT_ANDROID_API_LEVEL LESS 24))
291290
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>)
294292
endif()
295293
endfunction()
296294
@@ -499,14 +497,15 @@ function(add_swift_host_library name)
499497
if(NOT ${CMAKE_C_COMPILER_ID} STREQUAL MSVC)
500498
swift_windows_get_sdk_vfs_overlay(ASHL_VFS_OVERLAY)
501499
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}">)
503501
504502
# MSVC doesn't support -Xclang. We don't need to manually specify
505503
# the dependent libraries as `cl` does so.
506504
target_compile_options(${name} PRIVATE
507-
"SHELL:-Xclang --dependent-lib=oldnames"
505+
$<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:"SHELL:-Xclang --dependent-lib=oldnames">
508506
# 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+
)
510509
endif()
511510
512511
set_target_properties(${name} PROPERTIES
@@ -597,9 +596,10 @@ function(add_swift_host_tool executable)
597596
# MSVC doesn't support -Xclang. We don't need to manually specify
598597
# the dependent libraries as `cl` does so.
599598
target_compile_options(${executable} PRIVATE
600-
"SHELL:-Xclang --dependent-lib=oldnames"
599+
$<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:"SHELL:-Xclang --dependent-lib=oldnames">
601600
# 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+
)
603603
endif()
604604
endif()
605605
@@ -627,7 +627,7 @@ function(add_swift_fuzzer_host_tool executable)
627627
628628
# Then make sure that we pass the -fsanitize=fuzzer flag both on the cflags
629629
# 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">)
631631
target_link_libraries(${executable} PRIVATE "-fsanitize=fuzzer")
632632
endfunction()
633633

0 commit comments

Comments
 (0)