@@ -115,6 +115,12 @@ function(_add_target_variant_c_compile_link_flags)
115
115
list (APPEND result "--sysroot=${_sysroot} " )
116
116
endif ()
117
117
118
+ if ("${CFLAGS_SDK} " STREQUAL "LINUX_STATIC" )
119
+ list (APPEND result "-isystem" "${SWIFT_MUSL_PATH} /${CFLAGS_ARCH} /usr/include/c++/v1" )
120
+ list (APPEND result "-DSWIFT_LIBC_IS_MUSL" )
121
+ endif ()
122
+
123
+
118
124
if ("${CFLAGS_SDK} " STREQUAL "ANDROID" )
119
125
# Make sure the Android NDK lld is used.
120
126
swift_android_tools_path (${CFLAGS_ARCH} tools_path )
@@ -500,6 +506,8 @@ function(_add_target_variant_link_flags)
500
506
if ("${LFLAGS_ARCH} " MATCHES "armv5|armv6|armv7|i686" )
501
507
list (APPEND link_libraries "atomic" )
502
508
endif ()
509
+ elseif ("${LFLAGS_SDK} " STREQUAL "LINUX_STATIC" )
510
+ list (APPEND link_libraries "pthread" "dl" )
503
511
elseif ("${LFLAGS_SDK} " STREQUAL "FREEBSD" )
504
512
list (APPEND link_libraries "pthread" )
505
513
elseif ("${LFLAGS_SDK} " STREQUAL "OPENBSD" )
@@ -1325,10 +1333,14 @@ function(add_swift_target_library_single target name)
1325
1333
endif ()
1326
1334
1327
1335
if (target_static )
1328
- _list_add_string_suffix (
1329
- "${SWIFTLIB_SINGLE_LINK_LIBRARIES} "
1330
- "-static"
1331
- target_static_depends )
1336
+ set (target_static_depends )
1337
+ foreach (dep ${SWIFTLIB_SINGLE_LINK_LIBRARIES} )
1338
+ if (NOT "${dep} " MATCHES "^(icucore|dispatch|BlocksRuntime)($|-.*)$" )
1339
+ list (APPEND target_static_depends "${dep} -static" )
1340
+ endif ()
1341
+ endforeach ()
1342
+
1343
+
1332
1344
# FIXME: should this be target_link_libraries?
1333
1345
add_dependencies_multiple_targets (
1334
1346
TARGETS "${target_static} "
@@ -1471,6 +1483,7 @@ function(add_swift_target_library_single target name)
1471
1483
"SHELL:-Xclang --dependent-lib=msvcrt$<$<CONFIG:Debug>:d>" )
1472
1484
endif ()
1473
1485
endif ()
1486
+
1474
1487
target_compile_options (${target} PRIVATE
1475
1488
${c_compile_flags} )
1476
1489
target_link_options (${target} PRIVATE
@@ -1829,6 +1842,7 @@ function(add_swift_target_library name)
1829
1842
SWIFT_MODULE_DEPENDS_HAIKU
1830
1843
SWIFT_MODULE_DEPENDS_IOS
1831
1844
SWIFT_MODULE_DEPENDS_LINUX
1845
+ SWIFT_MODULE_DEPENDS_LINUX_STATIC
1832
1846
SWIFT_MODULE_DEPENDS_OSX
1833
1847
SWIFT_MODULE_DEPENDS_TVOS
1834
1848
SWIFT_MODULE_DEPENDS_WASI
@@ -1874,6 +1888,17 @@ function(add_swift_target_library name)
1874
1888
endif ()
1875
1889
list_replace (SWIFTLIB_TARGET_SDKS ALL_APPLE_PLATFORMS "${SWIFT_DARWIN_PLATFORMS} " )
1876
1890
1891
+ # Support adding a "NOT" on the front to mean all SDKs except the following
1892
+ list (GET SWIFTLIB_TARGET_SDKS 0 first_sdk )
1893
+ if ("${first_sdk} " STREQUAL "NOT" )
1894
+ list (REMOVE_AT SWIFTLIB_TARGET_SDKS 0 )
1895
+ list_subtract ("${SWIFT_SDKS} " "${SWIFTLIB_TARGET_SDKS} "
1896
+ "SWIFTLIB_TARGET_SDKS" )
1897
+ endif ()
1898
+
1899
+ list_intersect (
1900
+ "${SWIFTLIB_TARGET_SDKS} " "${SWIFT_SDKS} " SWIFTLIB_TARGET_SDKS )
1901
+
1877
1902
# All Swift code depends on the standard library, except for the standard
1878
1903
# library itself.
1879
1904
if (SWIFTLIB_HAS_SWIFT_CONTENT AND NOT SWIFTLIB_IS_STDLIB_CORE )
@@ -2016,7 +2041,10 @@ function(add_swift_target_library name)
2016
2041
elseif (sdk STREQUAL "LINUX" OR sdk STREQUAL "ANDROID" )
2017
2042
list (APPEND swiftlib_module_depends_flattened
2018
2043
${SWIFTLIB_SWIFT_MODULE_DEPENDS_LINUX} )
2019
- elseif (sdk STREQUAL "CYGWIN" )
2044
+ elseif (${sdk} STREQUAL "LINUX_STATIC" )
2045
+ list (APPEND swiftlib_module_depends_flattened
2046
+ ${SWIFTLIB_SWIFT_MODULE_DEPENDS_LINUX_STATIC} )
2047
+ elseif (${sdk} STREQUAL "CYGWIN" )
2020
2048
list (APPEND swiftlib_module_depends_flattened
2021
2049
${SWIFTLIB_SWIFT_MODULE_DEPENDS_CYGWIN} )
2022
2050
elseif (sdk STREQUAL "HAIKU" )
@@ -2268,12 +2296,21 @@ function(add_swift_target_library name)
2268
2296
set (back_deployment_library_option )
2269
2297
endif ()
2270
2298
2299
+ # If the SDK is static only, always build static instead of dynamic
2300
+ if (SWIFT_SDK_${sdk}_STATIC_ONLY AND SWIFTLIB_SHARED )
2301
+ set (shared )
2302
+ set (static STATIC )
2303
+ else ()
2304
+ set (shared ${SWIFTLIB_SHARED_keyword} )
2305
+ set (static ${SWIFTLIB_STATIC_keyword} )
2306
+ endif ()
2307
+
2271
2308
# Add this library variant.
2272
2309
add_swift_target_library_single (
2273
2310
${variant_name}
2274
2311
${name}
2275
- ${SWIFTLIB_SHARED_keyword }
2276
- ${SWIFTLIB_STATIC_keyword }
2312
+ ${shared }
2313
+ ${static }
2277
2314
${SWIFTLIB_NO_LINK_NAME_keyword}
2278
2315
${SWIFTLIB_OBJECT_LIBRARY_keyword}
2279
2316
${SWIFTLIB_INSTALL_WITH_SHARED_keyword}
@@ -2330,23 +2367,19 @@ function(add_swift_target_library name)
2330
2367
2331
2368
if (NOT SWIFTLIB_OBJECT_LIBRARY )
2332
2369
# Add dependencies on the (not-yet-created) custom lipo target.
2333
- foreach (DEP ${SWIFTLIB_LINK_LIBRARIES} )
2334
- if (NOT "${DEP} " STREQUAL "icucore" AND
2335
- NOT "${DEP} " STREQUAL "dispatch" AND
2336
- NOT "${DEP} " STREQUAL "BlocksRuntime" )
2370
+ foreach (dep ${SWIFTLIB_LINK_LIBRARIES} )
2371
+ if (NOT "${dep} " MATCHES "^(icucore|dispatch|BlocksRuntime)($|-.*)$" )
2337
2372
add_dependencies (${VARIANT_NAME}
2338
- "${DEP } -${SWIFT_SDK_${sdk} _LIB_SUBDIR}" )
2373
+ "${dep } -${SWIFT_SDK_${sdk} _LIB_SUBDIR}" )
2339
2374
endif ()
2340
2375
endforeach ()
2341
2376
2342
2377
if (SWIFTLIB_IS_STDLIB AND SWIFTLIB_STATIC )
2343
2378
# Add dependencies on the (not-yet-created) custom lipo target.
2344
- foreach (DEP ${SWIFTLIB_LINK_LIBRARIES} )
2345
- if (NOT "${DEP} " STREQUAL "icucore" AND
2346
- NOT "${DEP} " STREQUAL "dispatch" AND
2347
- NOT "${DEP} " STREQUAL "BlocksRuntime" )
2379
+ foreach (dep ${SWIFTLIB_LINK_LIBRARIES} )
2380
+ if (NOT "${dep} " MATCHES "^(icucore|dispatch|BlocksRuntime)($|-.*)$" )
2348
2381
add_dependencies ("${VARIANT_NAME} -static"
2349
- "${DEP } -${SWIFT_SDK_${sdk} _LIB_SUBDIR}-static" )
2382
+ "${dep } -${SWIFT_SDK_${sdk} _LIB_SUBDIR}-static" )
2350
2383
endif ()
2351
2384
endforeach ()
2352
2385
endif ()
@@ -2390,7 +2423,7 @@ function(add_swift_target_library name)
2390
2423
2391
2424
if (NOT SWIFTLIB_OBJECT_LIBRARY )
2392
2425
# Determine the name of the universal library.
2393
- if (SWIFTLIB_SHARED )
2426
+ if (SWIFTLIB_SHARED AND NOT SWIFT_SDK_${sdk}_STATIC_ONLY )
2394
2427
if ("${sdk} " STREQUAL "WINDOWS" )
2395
2428
set (UNIVERSAL_LIBRARY_NAME
2396
2429
"${SWIFTLIB_DIR} /${library_subdir} /${name} .dll" )
@@ -2402,12 +2435,18 @@ function(add_swift_target_library name)
2402
2435
"${SWIFTLIB_DIR} /${library_subdir} /${CMAKE_SHARED_LIBRARY_PREFIX}${name}${CMAKE_SHARED_LIBRARY_SUFFIX} " )
2403
2436
endif ()
2404
2437
else ()
2438
+ if (SWIFTLIB_INSTALL_WITH_SHARED )
2439
+ set (lib_dir "${SWIFTLIB_DIR} " )
2440
+ else ()
2441
+ set (lib_dir "${SWIFTSTATICLIB_DIR} " )
2442
+ endif ()
2443
+
2405
2444
if ("${sdk} " STREQUAL "WINDOWS" )
2406
2445
set (UNIVERSAL_LIBRARY_NAME
2407
- "${SWIFTLIB_DIR } /${library_subdir} /${name} .lib" )
2446
+ "${lib_dir } /${library_subdir} /${name} .lib" )
2408
2447
else ()
2409
2448
set (UNIVERSAL_LIBRARY_NAME
2410
- "${SWIFTLIB_DIR } /${library_subdir} /${CMAKE_STATIC_LIBRARY_PREFIX}${name}${CMAKE_STATIC_LIBRARY_SUFFIX} " )
2449
+ "${lib_dir } /${library_subdir} /${CMAKE_STATIC_LIBRARY_PREFIX}${name}${CMAKE_STATIC_LIBRARY_SUFFIX} " )
2411
2450
endif ()
2412
2451
endif ()
2413
2452
@@ -2439,7 +2478,8 @@ function(add_swift_target_library name)
2439
2478
2440
2479
precondition (resource_dir_sdk_subdir )
2441
2480
2442
- if (SWIFTLIB_SHARED OR SWIFTLIB_INSTALL_WITH_SHARED )
2481
+ if ((SWIFTLIB_SHARED AND NOT SWIFT_SDK_${sdk}_STATIC_ONLY )
2482
+ OR SWIFTLIB_INSTALL_WITH_SHARED )
2443
2483
set (resource_dir "swift" )
2444
2484
set (file_permissions
2445
2485
OWNER_READ OWNER_WRITE OWNER_EXECUTE
@@ -2815,6 +2855,7 @@ function(add_swift_target_executable name)
2815
2855
SWIFT_MODULE_DEPENDS_HAIKU
2816
2856
SWIFT_MODULE_DEPENDS_IOS
2817
2857
SWIFT_MODULE_DEPENDS_LINUX
2858
+ SWIFT_MODULE_DEPENDS_LINUX_STATIC
2818
2859
SWIFT_MODULE_DEPENDS_OSX
2819
2860
SWIFT_MODULE_DEPENDS_TVOS
2820
2861
SWIFT_MODULE_DEPENDS_WASI
@@ -2871,6 +2912,14 @@ function(add_swift_target_executable name)
2871
2912
endif ()
2872
2913
list_replace (SWIFTEXE_TARGET_TARGET_SDKS ALL_APPLE_PLATFORMS "${SWIFT_DARWIN_PLATFORMS} " )
2873
2914
2915
+ # Support adding a "NOT" on the front to mean all SDKs except the following
2916
+ list (GET SWIFTEXE_TARGET_TARGET_SDKS 0 first_sdk )
2917
+ if ("${first_sdk} " STREQUAL "NOT" )
2918
+ list (REMOVE_AT SWIFTEXE_TARGET_TARGET_SDKS 0 )
2919
+ list_subtract ("${SWIFT_SDKS} " "${SWIFTEXE_TARGET_TARGET_SDKS} "
2920
+ "SWIFTEXE_TARGET_TARGET_SDKS" )
2921
+ endif ()
2922
+
2874
2923
list_intersect (
2875
2924
"${SWIFTEXE_TARGET_TARGET_SDKS} " "${SWIFT_SDKS} " SWIFTEXE_TARGET_TARGET_SDKS )
2876
2925
@@ -2912,6 +2961,9 @@ function(add_swift_target_executable name)
2912
2961
elseif (sdk STREQUAL "LINUX" OR sdk STREQUAL "ANDROID" )
2913
2962
list (APPEND swiftexe_module_depends_flattened
2914
2963
${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_LINUX} )
2964
+ elseif (sdk STREQUAL "LINUX_STATIC" )
2965
+ list (APPEND swiftexe_module_depends_flattened
2966
+ ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_LINUX_STATIC} )
2915
2967
elseif (sdk STREQUAL "CYGWIN" )
2916
2968
list (APPEND swiftexe_module_depends_flattened
2917
2969
${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_CYGWIN} )
0 commit comments