@@ -119,6 +119,12 @@ function(_add_target_variant_c_compile_link_flags)
119
119
list (APPEND result "--sysroot=${_sysroot} " )
120
120
endif ()
121
121
122
+ if ("${CFLAGS_SDK} " STREQUAL "LINUX_STATIC" )
123
+ list (APPEND result "-isystem" "${SWIFT_MUSL_PATH} /${CFLAGS_ARCH} /usr/include/c++/v1" )
124
+ list (APPEND result "-DSWIFT_LIBC_IS_MUSL" )
125
+ endif ()
126
+
127
+
122
128
if ("${CFLAGS_SDK} " STREQUAL "ANDROID" )
123
129
# Make sure the Android NDK lld is used.
124
130
swift_android_tools_path (${CFLAGS_ARCH} tools_path )
@@ -512,6 +518,8 @@ function(_add_target_variant_link_flags)
512
518
if ("${LFLAGS_ARCH} " MATCHES "armv5|armv6|armv7|i686" )
513
519
list (APPEND link_libraries "atomic" )
514
520
endif ()
521
+ elseif ("${LFLAGS_SDK} " STREQUAL "LINUX_STATIC" )
522
+ list (APPEND link_libraries "pthread" "dl" )
515
523
elseif ("${LFLAGS_SDK} " STREQUAL "FREEBSD" )
516
524
list (APPEND link_libraries "pthread" )
517
525
elseif ("${LFLAGS_SDK} " STREQUAL "OPENBSD" )
@@ -1352,10 +1360,14 @@ function(add_swift_target_library_single target name)
1352
1360
endif ()
1353
1361
1354
1362
if (target_static )
1355
- _list_add_string_suffix (
1356
- "${SWIFTLIB_SINGLE_LINK_LIBRARIES} "
1357
- "-static"
1358
- target_static_depends )
1363
+ set (target_static_depends )
1364
+ foreach (dep ${SWIFTLIB_SINGLE_LINK_LIBRARIES} )
1365
+ if (NOT "${dep} " MATCHES "^(icucore|dispatch|BlocksRuntime)($|-.*)$" )
1366
+ list (APPEND target_static_depends "${dep} -static" )
1367
+ endif ()
1368
+ endforeach ()
1369
+
1370
+
1359
1371
# FIXME: should this be target_link_libraries?
1360
1372
add_dependencies_multiple_targets (
1361
1373
TARGETS "${target_static} "
@@ -1500,6 +1512,7 @@ function(add_swift_target_library_single target name)
1500
1512
"SHELL:-Xclang --dependent-lib=msvcrt$<$<CONFIG:Debug>:d>" )
1501
1513
endif ()
1502
1514
endif ()
1515
+
1503
1516
target_compile_options (${target} PRIVATE
1504
1517
${c_compile_flags} )
1505
1518
target_link_options (${target} PRIVATE
@@ -1869,6 +1882,7 @@ function(add_swift_target_library name)
1869
1882
SWIFT_MODULE_DEPENDS_HAIKU
1870
1883
SWIFT_MODULE_DEPENDS_IOS
1871
1884
SWIFT_MODULE_DEPENDS_LINUX
1885
+ SWIFT_MODULE_DEPENDS_LINUX_STATIC
1872
1886
SWIFT_MODULE_DEPENDS_OSX
1873
1887
SWIFT_MODULE_DEPENDS_TVOS
1874
1888
SWIFT_MODULE_DEPENDS_WASI
@@ -1915,6 +1929,17 @@ function(add_swift_target_library name)
1915
1929
endif ()
1916
1930
list_replace (SWIFTLIB_TARGET_SDKS ALL_APPLE_PLATFORMS "${SWIFT_DARWIN_PLATFORMS} " )
1917
1931
1932
+ # Support adding a "NOT" on the front to mean all SDKs except the following
1933
+ list (GET SWIFTLIB_TARGET_SDKS 0 first_sdk )
1934
+ if ("${first_sdk} " STREQUAL "NOT" )
1935
+ list (REMOVE_AT SWIFTLIB_TARGET_SDKS 0 )
1936
+ list_subtract ("${SWIFT_SDKS} " "${SWIFTLIB_TARGET_SDKS} "
1937
+ "SWIFTLIB_TARGET_SDKS" )
1938
+ endif ()
1939
+
1940
+ list_intersect (
1941
+ "${SWIFTLIB_TARGET_SDKS} " "${SWIFT_SDKS} " SWIFTLIB_TARGET_SDKS )
1942
+
1918
1943
# All Swift code depends on the standard library, except for the standard
1919
1944
# library itself.
1920
1945
if (SWIFTLIB_HAS_SWIFT_CONTENT AND NOT SWIFTLIB_IS_STDLIB_CORE )
@@ -2064,6 +2089,9 @@ function(add_swift_target_library name)
2064
2089
elseif (sdk STREQUAL "LINUX" OR sdk STREQUAL "ANDROID" )
2065
2090
list (APPEND swiftlib_module_depends_flattened
2066
2091
${SWIFTLIB_SWIFT_MODULE_DEPENDS_LINUX} )
2092
+ elseif (sdk STREQUAL "LINUX_STATIC" )
2093
+ list (APPEND swiftlib_module_depends_flattened
2094
+ ${SWIFTLIB_SWIFT_MODULE_DEPENDS_LINUX_STATIC} )
2067
2095
elseif (sdk STREQUAL "CYGWIN" )
2068
2096
list (APPEND swiftlib_module_depends_flattened
2069
2097
${SWIFTLIB_SWIFT_MODULE_DEPENDS_CYGWIN} )
@@ -2319,12 +2347,21 @@ function(add_swift_target_library name)
2319
2347
set (back_deployment_library_option )
2320
2348
endif ()
2321
2349
2350
+ # If the SDK is static only, always build static instead of dynamic
2351
+ if (SWIFT_SDK_${sdk}_STATIC_ONLY AND SWIFTLIB_SHARED )
2352
+ set (shared_keyword )
2353
+ set (static_keyword STATIC )
2354
+ else ()
2355
+ set (shared_keyword ${SWIFTLIB_SHARED_keyword} )
2356
+ set (static_keyword ${SWIFTLIB_STATIC_keyword} )
2357
+ endif ()
2358
+
2322
2359
# Add this library variant.
2323
2360
add_swift_target_library_single (
2324
2361
${variant_name}
2325
2362
${name}
2326
- ${SWIFTLIB_SHARED_keyword }
2327
- ${SWIFTLIB_STATIC_keyword }
2363
+ ${shared_keyword }
2364
+ ${static_keyword }
2328
2365
${SWIFTLIB_NO_LINK_NAME_keyword}
2329
2366
${SWIFTLIB_OBJECT_LIBRARY_keyword}
2330
2367
${SWIFTLIB_INSTALL_WITH_SHARED_keyword}
@@ -2384,9 +2421,9 @@ function(add_swift_target_library name)
2384
2421
if (NOT SWIFTLIB_OBJECT_LIBRARY )
2385
2422
# Add dependencies on the (not-yet-created) custom lipo target.
2386
2423
foreach (DEP ${SWIFTLIB_LINK_LIBRARIES} )
2387
- if (NOT "${DEP} " STREQUAL " icucore" AND
2388
- NOT "${DEP} " STREQUAL " dispatch" AND
2389
- NOT "${DEP} " STREQUAL " BlocksRuntime" )
2424
+ if (NOT "${DEP} " MATCHES "^ icucore($|-.*)$ " AND
2425
+ NOT "${DEP} " MATCHES "^ dispatch($|-.*)$ " AND
2426
+ NOT "${DEP} " MATCHES "^ BlocksRuntime($|-.*)$ " )
2390
2427
add_dependencies (${VARIANT_NAME}
2391
2428
"${DEP} -${SWIFT_SDK_${sdk} _LIB_SUBDIR}" )
2392
2429
endif ()
@@ -2395,9 +2432,9 @@ function(add_swift_target_library name)
2395
2432
if (SWIFTLIB_IS_STDLIB AND SWIFTLIB_STATIC )
2396
2433
# Add dependencies on the (not-yet-created) custom lipo target.
2397
2434
foreach (DEP ${SWIFTLIB_LINK_LIBRARIES} )
2398
- if (NOT "${DEP} " STREQUAL " icucore" AND
2399
- NOT "${DEP} " STREQUAL " dispatch" AND
2400
- NOT "${DEP} " STREQUAL " BlocksRuntime" )
2435
+ if (NOT "${DEP} " MATCHES "^ icucore($|-.*)$ " AND
2436
+ NOT "${DEP} " MATCHES "^ dispatch($|-.*)$ " AND
2437
+ NOT "${DEP} " MATCHES "^ BlocksRuntime($|-.*)$ " )
2401
2438
add_dependencies ("${VARIANT_NAME} -static"
2402
2439
"${DEP} -${SWIFT_SDK_${sdk} _LIB_SUBDIR}-static" )
2403
2440
endif ()
@@ -2443,7 +2480,7 @@ function(add_swift_target_library name)
2443
2480
2444
2481
if (NOT SWIFTLIB_OBJECT_LIBRARY )
2445
2482
# Determine the name of the universal library.
2446
- if (SWIFTLIB_SHARED )
2483
+ if (SWIFTLIB_SHARED AND NOT SWIFT_SDK_${sdk}_STATIC_ONLY )
2447
2484
if ("${sdk} " STREQUAL "WINDOWS" )
2448
2485
set (UNIVERSAL_LIBRARY_NAME
2449
2486
"${SWIFTLIB_DIR} /${library_subdir} /${name} .dll" )
@@ -2455,12 +2492,18 @@ function(add_swift_target_library name)
2455
2492
"${SWIFTLIB_DIR} /${library_subdir} /${CMAKE_SHARED_LIBRARY_PREFIX}${name}${CMAKE_SHARED_LIBRARY_SUFFIX} " )
2456
2493
endif ()
2457
2494
else ()
2495
+ if (SWIFT_SDK_${sdk}_STATIC_ONLY )
2496
+ set (lib_dir "${SWIFTSTATICLIB_DIR} " )
2497
+ else ()
2498
+ set (lib_dir "${SWIFTLIB_DIR} " )
2499
+ endif ()
2500
+
2458
2501
if ("${sdk} " STREQUAL "WINDOWS" )
2459
2502
set (UNIVERSAL_LIBRARY_NAME
2460
- "${SWIFTLIB_DIR } /${library_subdir} /${name} .lib" )
2503
+ "${lib_dir } /${library_subdir} /${name} .lib" )
2461
2504
else ()
2462
2505
set (UNIVERSAL_LIBRARY_NAME
2463
- "${SWIFTLIB_DIR } /${library_subdir} /${CMAKE_STATIC_LIBRARY_PREFIX}${name}${CMAKE_STATIC_LIBRARY_SUFFIX} " )
2506
+ "${lib_dir } /${library_subdir} /${CMAKE_STATIC_LIBRARY_PREFIX}${name}${CMAKE_STATIC_LIBRARY_SUFFIX} " )
2464
2507
endif ()
2465
2508
endif ()
2466
2509
@@ -2492,7 +2535,8 @@ function(add_swift_target_library name)
2492
2535
2493
2536
precondition (resource_dir_sdk_subdir )
2494
2537
2495
- if (SWIFTLIB_SHARED OR SWIFTLIB_INSTALL_WITH_SHARED )
2538
+ if ((SWIFTLIB_SHARED AND NOT SWIFT_SDK_${sdk}_STATIC_ONLY )
2539
+ OR SWIFTLIB_INSTALL_WITH_SHARED )
2496
2540
set (resource_dir "swift" )
2497
2541
set (file_permissions
2498
2542
OWNER_READ OWNER_WRITE OWNER_EXECUTE
@@ -2868,6 +2912,7 @@ function(add_swift_target_executable name)
2868
2912
SWIFT_MODULE_DEPENDS_HAIKU
2869
2913
SWIFT_MODULE_DEPENDS_IOS
2870
2914
SWIFT_MODULE_DEPENDS_LINUX
2915
+ SWIFT_MODULE_DEPENDS_LINUX_STATIC
2871
2916
SWIFT_MODULE_DEPENDS_OSX
2872
2917
SWIFT_MODULE_DEPENDS_TVOS
2873
2918
SWIFT_MODULE_DEPENDS_WASI
@@ -2924,6 +2969,14 @@ function(add_swift_target_executable name)
2924
2969
endif ()
2925
2970
list_replace (SWIFTEXE_TARGET_TARGET_SDKS ALL_APPLE_PLATFORMS "${SWIFT_DARWIN_PLATFORMS} " )
2926
2971
2972
+ # Support adding a "NOT" on the front to mean all SDKs except the following
2973
+ list (GET SWIFTEXE_TARGET_TARGET_SDKS 0 first_sdk )
2974
+ if ("${first_sdk} " STREQUAL "NOT" )
2975
+ list (REMOVE_AT SWIFTEXE_TARGET_TARGET_SDKS 0 )
2976
+ list_subtract ("${SWIFT_SDKS} " "${SWIFTEXE_TARGET_TARGET_SDKS} "
2977
+ "SWIFTEXE_TARGET_TARGET_SDKS" )
2978
+ endif ()
2979
+
2927
2980
list_intersect (
2928
2981
"${SWIFTEXE_TARGET_TARGET_SDKS} " "${SWIFT_SDKS} " SWIFTEXE_TARGET_TARGET_SDKS )
2929
2982
@@ -2965,6 +3018,9 @@ function(add_swift_target_executable name)
2965
3018
elseif (sdk STREQUAL "LINUX" OR sdk STREQUAL "ANDROID" )
2966
3019
list (APPEND swiftexe_module_depends_flattened
2967
3020
${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_LINUX} )
3021
+ elseif (sdk STREQUAL "LINUX_STATIC" )
3022
+ list (APPEND swiftexe_module_depends_flattened
3023
+ ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_LINUX_STATIC} )
2968
3024
elseif (sdk STREQUAL "CYGWIN" )
2969
3025
list (APPEND swiftexe_module_depends_flattened
2970
3026
${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_CYGWIN} )
0 commit comments