@@ -119,6 +119,12 @@ function(_add_target_variant_c_compile_link_flags)
119119 list (APPEND result "--sysroot=${_sysroot} " )
120120 endif ()
121121
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+
122128 if ("${CFLAGS_SDK} " STREQUAL "ANDROID" )
123129 # Make sure the Android NDK lld is used.
124130 swift_android_tools_path(${CFLAGS_ARCH} tools_path)
@@ -512,6 +518,8 @@ function(_add_target_variant_link_flags)
512518 if ("${LFLAGS_ARCH} " MATCHES "armv5|armv6|armv7|i686" )
513519 list (APPEND link_libraries "atomic" )
514520 endif ()
521+ elseif ("${LFLAGS_SDK} " STREQUAL "LINUX_STATIC" )
522+ list (APPEND link_libraries "pthread" "dl" )
515523 elseif ("${LFLAGS_SDK} " STREQUAL "FREEBSD" )
516524 list (APPEND link_libraries "pthread" )
517525 elseif ("${LFLAGS_SDK} " STREQUAL "OPENBSD" )
@@ -1352,10 +1360,14 @@ function(add_swift_target_library_single target name)
13521360 endif ()
13531361
13541362 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+
13591371 # FIXME: should this be target_link_libraries?
13601372 add_dependencies_multiple_targets(
13611373 TARGETS "${target_static} "
@@ -1500,6 +1512,7 @@ function(add_swift_target_library_single target name)
15001512 "SHELL:-Xclang --dependent-lib=msvcrt$<$<CONFIG:Debug>:d>" )
15011513 endif ()
15021514 endif ()
1515+
15031516 target_compile_options (${target} PRIVATE
15041517 ${c_compile_flags} )
15051518 target_link_options (${target} PRIVATE
@@ -1869,6 +1882,7 @@ function(add_swift_target_library name)
18691882 SWIFT_MODULE_DEPENDS_HAIKU
18701883 SWIFT_MODULE_DEPENDS_IOS
18711884 SWIFT_MODULE_DEPENDS_LINUX
1885+ SWIFT_MODULE_DEPENDS_LINUX_STATIC
18721886 SWIFT_MODULE_DEPENDS_OSX
18731887 SWIFT_MODULE_DEPENDS_TVOS
18741888 SWIFT_MODULE_DEPENDS_WASI
@@ -1915,6 +1929,17 @@ function(add_swift_target_library name)
19151929 endif ()
19161930 list_replace(SWIFTLIB_TARGET_SDKS ALL_APPLE_PLATFORMS "${SWIFT_DARWIN_PLATFORMS} " )
19171931
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+
19181943 # All Swift code depends on the standard library, except for the standard
19191944 # library itself.
19201945 if (SWIFTLIB_HAS_SWIFT_CONTENT AND NOT SWIFTLIB_IS_STDLIB_CORE)
@@ -2064,6 +2089,9 @@ function(add_swift_target_library name)
20642089 elseif (sdk STREQUAL "LINUX" OR sdk STREQUAL "ANDROID" )
20652090 list (APPEND swiftlib_module_depends_flattened
20662091 ${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} )
20672095 elseif (sdk STREQUAL "CYGWIN" )
20682096 list (APPEND swiftlib_module_depends_flattened
20692097 ${SWIFTLIB_SWIFT_MODULE_DEPENDS_CYGWIN} )
@@ -2319,12 +2347,21 @@ function(add_swift_target_library name)
23192347 set (back_deployment_library_option)
23202348 endif ()
23212349
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+
23222359 # Add this library variant.
23232360 add_swift_target_library_single(
23242361 ${variant_name}
23252362 ${name}
2326- ${SWIFTLIB_SHARED_keyword }
2327- ${SWIFTLIB_STATIC_keyword }
2363+ ${shared_keyword }
2364+ ${static_keyword }
23282365 ${SWIFTLIB_NO_LINK_NAME_keyword}
23292366 ${SWIFTLIB_OBJECT_LIBRARY_keyword}
23302367 ${SWIFTLIB_INSTALL_WITH_SHARED_keyword}
@@ -2384,9 +2421,9 @@ function(add_swift_target_library name)
23842421 if (NOT SWIFTLIB_OBJECT_LIBRARY)
23852422 # Add dependencies on the (not-yet-created) custom lipo target.
23862423 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($|-.*)$ " )
23902427 add_dependencies (${VARIANT_NAME}
23912428 "${DEP} -${SWIFT_SDK_${sdk} _LIB_SUBDIR}" )
23922429 endif ()
@@ -2395,9 +2432,9 @@ function(add_swift_target_library name)
23952432 if (SWIFTLIB_IS_STDLIB AND SWIFTLIB_STATIC)
23962433 # Add dependencies on the (not-yet-created) custom lipo target.
23972434 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($|-.*)$ " )
24012438 add_dependencies ("${VARIANT_NAME} -static"
24022439 "${DEP} -${SWIFT_SDK_${sdk} _LIB_SUBDIR}-static" )
24032440 endif ()
@@ -2443,7 +2480,7 @@ function(add_swift_target_library name)
24432480
24442481 if (NOT SWIFTLIB_OBJECT_LIBRARY)
24452482 # Determine the name of the universal library.
2446- if (SWIFTLIB_SHARED)
2483+ if (SWIFTLIB_SHARED AND NOT SWIFT_SDK_ ${sdk} _STATIC_ONLY )
24472484 if ("${sdk} " STREQUAL "WINDOWS" )
24482485 set (UNIVERSAL_LIBRARY_NAME
24492486 "${SWIFTLIB_DIR} /${library_subdir} /${name} .dll" )
@@ -2455,12 +2492,18 @@ function(add_swift_target_library name)
24552492 "${SWIFTLIB_DIR} /${library_subdir} /${CMAKE_SHARED_LIBRARY_PREFIX}${name}${CMAKE_SHARED_LIBRARY_SUFFIX} " )
24562493 endif ()
24572494 else ()
2495+ if (SWIFTLIB_INSTALL_WITH_SHARED)
2496+ set (lib_dir "${SWIFTLIB_DIR} " )
2497+ else ()
2498+ set (lib_dir "${SWIFTSTATICLIB_DIR} " )
2499+ endif ()
2500+
24582501 if ("${sdk} " STREQUAL "WINDOWS" )
24592502 set (UNIVERSAL_LIBRARY_NAME
2460- "${SWIFTLIB_DIR } /${library_subdir} /${name} .lib" )
2503+ "${lib_dir } /${library_subdir} /${name} .lib" )
24612504 else ()
24622505 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} " )
24642507 endif ()
24652508 endif ()
24662509
@@ -2492,7 +2535,8 @@ function(add_swift_target_library name)
24922535
24932536 precondition(resource_dir_sdk_subdir)
24942537
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)
24962540 set (resource_dir "swift" )
24972541 set (file_permissions
24982542 OWNER_READ OWNER_WRITE OWNER_EXECUTE
@@ -2868,6 +2912,7 @@ function(add_swift_target_executable name)
28682912 SWIFT_MODULE_DEPENDS_HAIKU
28692913 SWIFT_MODULE_DEPENDS_IOS
28702914 SWIFT_MODULE_DEPENDS_LINUX
2915+ SWIFT_MODULE_DEPENDS_LINUX_STATIC
28712916 SWIFT_MODULE_DEPENDS_OSX
28722917 SWIFT_MODULE_DEPENDS_TVOS
28732918 SWIFT_MODULE_DEPENDS_WASI
@@ -2924,6 +2969,14 @@ function(add_swift_target_executable name)
29242969 endif ()
29252970 list_replace(SWIFTEXE_TARGET_TARGET_SDKS ALL_APPLE_PLATFORMS "${SWIFT_DARWIN_PLATFORMS} " )
29262971
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+
29272980 list_intersect(
29282981 "${SWIFTEXE_TARGET_TARGET_SDKS} " "${SWIFT_SDKS} " SWIFTEXE_TARGET_TARGET_SDKS)
29292982
@@ -2965,6 +3018,9 @@ function(add_swift_target_executable name)
29653018 elseif (sdk STREQUAL "LINUX" OR sdk STREQUAL "ANDROID" )
29663019 list (APPEND swiftexe_module_depends_flattened
29673020 ${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} )
29683024 elseif (sdk STREQUAL "CYGWIN" )
29693025 list (APPEND swiftexe_module_depends_flattened
29703026 ${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_CYGWIN} )
0 commit comments