@@ -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 )
@@ -504,6 +510,8 @@ function(_add_target_variant_link_flags)
504
510
if ("${LFLAGS_ARCH} " MATCHES "armv5|armv6|armv7|i686" )
505
511
list (APPEND link_libraries "atomic" )
506
512
endif ()
513
+ elseif ("${LFLAGS_SDK} " STREQUAL "LINUX_STATIC" )
514
+ list (APPEND link_libraries "pthread" "dl" )
507
515
elseif ("${LFLAGS_SDK} " STREQUAL "FREEBSD" )
508
516
list (APPEND link_libraries "pthread" )
509
517
elseif ("${LFLAGS_SDK} " STREQUAL "OPENBSD" )
@@ -1336,10 +1344,14 @@ function(add_swift_target_library_single target name)
1336
1344
endif ()
1337
1345
1338
1346
if (target_static )
1339
- _list_add_string_suffix (
1340
- "${SWIFTLIB_SINGLE_LINK_LIBRARIES} "
1341
- "-static"
1342
- target_static_depends )
1347
+ set (target_static_depends )
1348
+ foreach (dep ${SWIFTLIB_SINGLE_LINK_LIBRARIES} )
1349
+ if (NOT "${dep} " MATCHES "^(icucore|dispatch|BlocksRuntime)($|-.*)$" )
1350
+ list (APPEND target_static_depends "${dep} -static" )
1351
+ endif ()
1352
+ endforeach ()
1353
+
1354
+
1343
1355
# FIXME: should this be target_link_libraries?
1344
1356
add_dependencies_multiple_targets (
1345
1357
TARGETS "${target_static} "
@@ -1482,6 +1494,7 @@ function(add_swift_target_library_single target name)
1482
1494
"SHELL:-Xclang --dependent-lib=msvcrt$<$<CONFIG:Debug>:d>" )
1483
1495
endif ()
1484
1496
endif ()
1497
+
1485
1498
target_compile_options (${target} PRIVATE
1486
1499
${c_compile_flags} )
1487
1500
target_link_options (${target} PRIVATE
@@ -1840,6 +1853,7 @@ function(add_swift_target_library name)
1840
1853
SWIFT_MODULE_DEPENDS_HAIKU
1841
1854
SWIFT_MODULE_DEPENDS_IOS
1842
1855
SWIFT_MODULE_DEPENDS_LINUX
1856
+ SWIFT_MODULE_DEPENDS_LINUX_STATIC
1843
1857
SWIFT_MODULE_DEPENDS_OSX
1844
1858
SWIFT_MODULE_DEPENDS_TVOS
1845
1859
SWIFT_MODULE_DEPENDS_WASI
@@ -1885,6 +1899,17 @@ function(add_swift_target_library name)
1885
1899
endif ()
1886
1900
list_replace (SWIFTLIB_TARGET_SDKS ALL_APPLE_PLATFORMS "${SWIFT_DARWIN_PLATFORMS} " )
1887
1901
1902
+ # Support adding a "NOT" on the front to mean all SDKs except the following
1903
+ list (GET SWIFTLIB_TARGET_SDKS 0 first_sdk )
1904
+ if ("${first_sdk} " STREQUAL "NOT" )
1905
+ list (REMOVE_AT SWIFTLIB_TARGET_SDKS 0 )
1906
+ list_subtract ("${SWIFT_SDKS} " "${SWIFTLIB_TARGET_SDKS} "
1907
+ "SWIFTLIB_TARGET_SDKS" )
1908
+ endif ()
1909
+
1910
+ list_intersect (
1911
+ "${SWIFTLIB_TARGET_SDKS} " "${SWIFT_SDKS} " SWIFTLIB_TARGET_SDKS )
1912
+
1888
1913
# All Swift code depends on the standard library, except for the standard
1889
1914
# library itself.
1890
1915
if (SWIFTLIB_HAS_SWIFT_CONTENT AND NOT SWIFTLIB_IS_STDLIB_CORE )
@@ -2027,7 +2052,10 @@ function(add_swift_target_library name)
2027
2052
elseif (sdk STREQUAL "LINUX" OR sdk STREQUAL "ANDROID" )
2028
2053
list (APPEND swiftlib_module_depends_flattened
2029
2054
${SWIFTLIB_SWIFT_MODULE_DEPENDS_LINUX} )
2030
- elseif (sdk STREQUAL "CYGWIN" )
2055
+ elseif (${sdk} STREQUAL "LINUX_STATIC" )
2056
+ list (APPEND swiftlib_module_depends_flattened
2057
+ ${SWIFTLIB_SWIFT_MODULE_DEPENDS_LINUX_STATIC} )
2058
+ elseif (${sdk} STREQUAL "CYGWIN" )
2031
2059
list (APPEND swiftlib_module_depends_flattened
2032
2060
${SWIFTLIB_SWIFT_MODULE_DEPENDS_CYGWIN} )
2033
2061
elseif (sdk STREQUAL "HAIKU" )
@@ -2279,12 +2307,21 @@ function(add_swift_target_library name)
2279
2307
set (back_deployment_library_option )
2280
2308
endif ()
2281
2309
2310
+ # If the SDK is static only, always build static instead of dynamic
2311
+ if (SWIFT_SDK_${sdk}_STATIC_ONLY AND SWIFTLIB_SHARED )
2312
+ set (shared )
2313
+ set (static STATIC )
2314
+ else ()
2315
+ set (shared ${SWIFTLIB_SHARED_keyword} )
2316
+ set (static ${SWIFTLIB_STATIC_keyword} )
2317
+ endif ()
2318
+
2282
2319
# Add this library variant.
2283
2320
add_swift_target_library_single (
2284
2321
${variant_name}
2285
2322
${name}
2286
- ${SWIFTLIB_SHARED_keyword }
2287
- ${SWIFTLIB_STATIC_keyword }
2323
+ ${shared }
2324
+ ${static }
2288
2325
${SWIFTLIB_NO_LINK_NAME_keyword}
2289
2326
${SWIFTLIB_OBJECT_LIBRARY_keyword}
2290
2327
${SWIFTLIB_INSTALL_WITH_SHARED_keyword}
@@ -2341,23 +2378,19 @@ function(add_swift_target_library name)
2341
2378
2342
2379
if (NOT SWIFTLIB_OBJECT_LIBRARY )
2343
2380
# 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" )
2381
+ foreach (dep ${SWIFTLIB_LINK_LIBRARIES} )
2382
+ if (NOT "${dep} " MATCHES "^(icucore|dispatch|BlocksRuntime)($|-.*)$" )
2348
2383
add_dependencies (${VARIANT_NAME}
2349
- "${DEP } -${SWIFT_SDK_${sdk} _LIB_SUBDIR}" )
2384
+ "${dep } -${SWIFT_SDK_${sdk} _LIB_SUBDIR}" )
2350
2385
endif ()
2351
2386
endforeach ()
2352
2387
2353
2388
if (SWIFTLIB_IS_STDLIB AND SWIFTLIB_STATIC )
2354
2389
# Add dependencies on the (not-yet-created) custom lipo target.
2355
- foreach (DEP ${SWIFTLIB_LINK_LIBRARIES} )
2356
- if (NOT "${DEP} " STREQUAL "icucore" AND
2357
- NOT "${DEP} " STREQUAL "dispatch" AND
2358
- NOT "${DEP} " STREQUAL "BlocksRuntime" )
2390
+ foreach (dep ${SWIFTLIB_LINK_LIBRARIES} )
2391
+ if (NOT "${dep} " MATCHES "^(icucore|dispatch|BlocksRuntime)($|-.*)$" )
2359
2392
add_dependencies ("${VARIANT_NAME} -static"
2360
- "${DEP } -${SWIFT_SDK_${sdk} _LIB_SUBDIR}-static" )
2393
+ "${dep } -${SWIFT_SDK_${sdk} _LIB_SUBDIR}-static" )
2361
2394
endif ()
2362
2395
endforeach ()
2363
2396
endif ()
@@ -2401,7 +2434,7 @@ function(add_swift_target_library name)
2401
2434
2402
2435
if (NOT SWIFTLIB_OBJECT_LIBRARY )
2403
2436
# Determine the name of the universal library.
2404
- if (SWIFTLIB_SHARED )
2437
+ if (SWIFTLIB_SHARED AND NOT SWIFT_SDK_${sdk}_STATIC_ONLY )
2405
2438
if ("${sdk} " STREQUAL "WINDOWS" )
2406
2439
set (UNIVERSAL_LIBRARY_NAME
2407
2440
"${SWIFTLIB_DIR} /${library_subdir} /${name} .dll" )
@@ -2413,12 +2446,18 @@ function(add_swift_target_library name)
2413
2446
"${SWIFTLIB_DIR} /${library_subdir} /${CMAKE_SHARED_LIBRARY_PREFIX}${name}${CMAKE_SHARED_LIBRARY_SUFFIX} " )
2414
2447
endif ()
2415
2448
else ()
2449
+ if (SWIFTLIB_INSTALL_WITH_SHARED )
2450
+ set (lib_dir "${SWIFTLIB_DIR} " )
2451
+ else ()
2452
+ set (lib_dir "${SWIFTSTATICLIB_DIR} " )
2453
+ endif ()
2454
+
2416
2455
if ("${sdk} " STREQUAL "WINDOWS" )
2417
2456
set (UNIVERSAL_LIBRARY_NAME
2418
- "${SWIFTLIB_DIR } /${library_subdir} /${name} .lib" )
2457
+ "${lib_dir } /${library_subdir} /${name} .lib" )
2419
2458
else ()
2420
2459
set (UNIVERSAL_LIBRARY_NAME
2421
- "${SWIFTLIB_DIR } /${library_subdir} /${CMAKE_STATIC_LIBRARY_PREFIX}${name}${CMAKE_STATIC_LIBRARY_SUFFIX} " )
2460
+ "${lib_dir } /${library_subdir} /${CMAKE_STATIC_LIBRARY_PREFIX}${name}${CMAKE_STATIC_LIBRARY_SUFFIX} " )
2422
2461
endif ()
2423
2462
endif ()
2424
2463
@@ -2450,7 +2489,8 @@ function(add_swift_target_library name)
2450
2489
2451
2490
precondition (resource_dir_sdk_subdir )
2452
2491
2453
- if (SWIFTLIB_SHARED OR SWIFTLIB_INSTALL_WITH_SHARED )
2492
+ if ((SWIFTLIB_SHARED AND NOT SWIFT_SDK_${sdk}_STATIC_ONLY )
2493
+ OR SWIFTLIB_INSTALL_WITH_SHARED )
2454
2494
set (resource_dir "swift" )
2455
2495
set (file_permissions
2456
2496
OWNER_READ OWNER_WRITE OWNER_EXECUTE
@@ -2826,6 +2866,7 @@ function(add_swift_target_executable name)
2826
2866
SWIFT_MODULE_DEPENDS_HAIKU
2827
2867
SWIFT_MODULE_DEPENDS_IOS
2828
2868
SWIFT_MODULE_DEPENDS_LINUX
2869
+ SWIFT_MODULE_DEPENDS_LINUX_STATIC
2829
2870
SWIFT_MODULE_DEPENDS_OSX
2830
2871
SWIFT_MODULE_DEPENDS_TVOS
2831
2872
SWIFT_MODULE_DEPENDS_WASI
@@ -2882,6 +2923,14 @@ function(add_swift_target_executable name)
2882
2923
endif ()
2883
2924
list_replace (SWIFTEXE_TARGET_TARGET_SDKS ALL_APPLE_PLATFORMS "${SWIFT_DARWIN_PLATFORMS} " )
2884
2925
2926
+ # Support adding a "NOT" on the front to mean all SDKs except the following
2927
+ list (GET SWIFTEXE_TARGET_TARGET_SDKS 0 first_sdk )
2928
+ if ("${first_sdk} " STREQUAL "NOT" )
2929
+ list (REMOVE_AT SWIFTEXE_TARGET_TARGET_SDKS 0 )
2930
+ list_subtract ("${SWIFT_SDKS} " "${SWIFTEXE_TARGET_TARGET_SDKS} "
2931
+ "SWIFTEXE_TARGET_TARGET_SDKS" )
2932
+ endif ()
2933
+
2885
2934
list_intersect (
2886
2935
"${SWIFTEXE_TARGET_TARGET_SDKS} " "${SWIFT_SDKS} " SWIFTEXE_TARGET_TARGET_SDKS )
2887
2936
@@ -2923,6 +2972,9 @@ function(add_swift_target_executable name)
2923
2972
elseif (sdk STREQUAL "LINUX" OR sdk STREQUAL "ANDROID" )
2924
2973
list (APPEND swiftexe_module_depends_flattened
2925
2974
${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_LINUX} )
2975
+ elseif (sdk STREQUAL "LINUX_STATIC" )
2976
+ list (APPEND swiftexe_module_depends_flattened
2977
+ ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_LINUX_STATIC} )
2926
2978
elseif (sdk STREQUAL "CYGWIN" )
2927
2979
list (APPEND swiftexe_module_depends_flattened
2928
2980
${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_CYGWIN} )
0 commit comments