Skip to content

Commit 26b2b31

Browse files
committed
[Build] Add support for static-linking to the SDK system.
Add some additional SDK variables that let us mark an SDK as supporting static linking, and/or supporting *only* static linking. rdar://123503009
1 parent 589cc9b commit 26b2b31

File tree

1 file changed

+35
-14
lines changed

1 file changed

+35
-14
lines changed

cmake/modules/SwiftConfigureSDK.cmake

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ function(_report_sdk prefix)
1515
message(STATUS " Swift Standard Library Path: ${SWIFT_SDK_${prefix}_LIB_SUBDIR}")
1616
message(STATUS " Threading Package: ${SWIFT_SDK_${prefix}_THREADING_PACKAGE}")
1717

18+
message(STATUS " Static linking supported: ${SWIFT_SDK_${prefix}_STATIC_LINKING_SUPPORTED}")
19+
message(STATUS " Static link only: ${SWIFT_SDK_${prefix}_STATIC_ONLY}")
20+
1821
if("${prefix}" STREQUAL "WINDOWS")
1922
message(STATUS " UCRT Version: ${UCRTVersion}")
2023
message(STATUS " UCRT SDK Path: ${UniversalCRTSdkDir}")
@@ -148,20 +151,23 @@ endfunction()
148151
# This macro attempts to configure a given SDK. When successful, it
149152
# defines a number of variables:
150153
#
151-
# SWIFT_SDK_${prefix}_NAME Display name for the SDK
152-
# SWIFT_SDK_${prefix}_VERSION SDK version number (e.g., 10.9, 7.0)
153-
# SWIFT_SDK_${prefix}_BUILD_NUMBER SDK build number (e.g., 14A389a)
154-
# SWIFT_SDK_${prefix}_DEPLOYMENT_VERSION Deployment version (e.g., 10.9, 7.0)
155-
# SWIFT_SDK_${prefix}_LIB_SUBDIR Library subdir for this SDK
156-
# SWIFT_SDK_${prefix}_TRIPLE_NAME Triple name for this SDK
157-
# SWIFT_SDK_${prefix}_OBJECT_FORMAT The object file format (e.g. MACHO)
158-
# SWIFT_SDK_${prefix}_USE_ISYSROOT Whether to use -isysroot
159-
# SWIFT_SDK_${prefix}_SHARED_LIBRARY_PREFIX Shared library prefix for this SDK (e.g. 'lib')
160-
# SWIFT_SDK_${prefix}_SHARED_LIBRARY_SUFFIX Shared library suffix for this SDK (e.g. 'dylib')
161-
# SWIFT_SDK_${prefix}_ARCHITECTURES Architectures (as a list)
162-
# SWIFT_SDK_${prefix}_IS_SIMULATOR Whether this is a simulator target.
163-
# SWIFT_SDK_${prefix}_ARCH_${ARCH}_TRIPLE Triple name
164-
# SWIFT_SDK_${prefix}_ARCH_${ARCH}_MODULE Module triple name for this SDK
154+
# SWIFT_SDK_${prefix}_NAME Display name for the SDK
155+
# SWIFT_SDK_${prefix}_VERSION SDK version number (e.g., 10.9, 7.0)
156+
# SWIFT_SDK_${prefix}_BUILD_NUMBER SDK build number (e.g., 14A389a)
157+
# SWIFT_SDK_${prefix}_DEPLOYMENT_VERSION Deployment version (e.g., 10.9, 7.0)
158+
# SWIFT_SDK_${prefix}_LIB_SUBDIR Library subdir for this SDK
159+
# SWIFT_SDK_${prefix}_TRIPLE_NAME Triple name for this SDK
160+
# SWIFT_SDK_${prefix}_OBJECT_FORMAT The object file format (e.g. MACHO)
161+
# SWIFT_SDK_${prefix}_USE_ISYSROOT Whether to use -isysroot
162+
# SWIFT_SDK_${prefix}_SHARED_LIBRARY_PREFIX Shared library prefix for this SDK (e.g. 'lib')
163+
# SWIFT_SDK_${prefix}_SHARED_LIBRARY_SUFFIX Shared library suffix for this SDK (e.g. 'dylib')
164+
# SWIFT_SDK_${prefix}_STATIC_LINKING_SUPPORTED Whether static linking is supported for this SDK
165+
# SWIFT_SDK_${prefix}_STATIC_ONLY Whether to build *only* static libraries
166+
167+
# SWIFT_SDK_${prefix}_ARCHITECTURES Architectures (as a list)
168+
# SWIFT_SDK_${prefix}_IS_SIMULATOR Whether this is a simulator target.
169+
# SWIFT_SDK_${prefix}_ARCH_${ARCH}_TRIPLE Triple name
170+
# SWIFT_SDK_${prefix}_ARCH_${ARCH}_MODULE Module triple name for this SDK
165171
macro(configure_sdk_darwin
166172
prefix name deployment_version xcrun_name
167173
triple_name module_name architectures)
@@ -206,6 +212,8 @@ macro(configure_sdk_darwin
206212
set(SWIFT_SDK_${prefix}_STATIC_LIBRARY_SUFFIX ".a")
207213
set(SWIFT_SDK_${prefix}_IMPORT_LIBRARY_PREFIX "")
208214
set(SWIFT_SDK_${prefix}_IMPORT_LIBRARY_SUFFIX "")
215+
set(SWIFT_SDK_${prefix}_STATIC_LINKING_SUPPORTED FALSE)
216+
set(SWIFT_SDK_${prefix}_STATIC_ONLY FALSE)
209217
get_threading_package(${prefix} "darwin" SWIFT_SDK_${prefix}_THREADING_PACKAGE)
210218

211219
set(SWIFT_SDK_${prefix}_ARCHITECTURES ${architectures})
@@ -279,6 +287,7 @@ macro(configure_sdk_unix name architectures)
279287

280288
string(TOUPPER ${name} prefix)
281289
string(TOLOWER ${name} platform)
290+
string(REPLACE "_" "-" platform "${platform}")
282291

283292
set(SWIFT_SDK_${prefix}_NAME "${name}")
284293
set(SWIFT_SDK_${prefix}_LIB_SUBDIR "${platform}")
@@ -310,6 +319,14 @@ macro(configure_sdk_unix name architectures)
310319
endif()
311320
set(SWIFT_SDK_${prefix}_USE_ISYSROOT FALSE)
312321

322+
# Static linking is suported on Linux and WASI
323+
if("${prefix}" STREQUAL "LINUX"
324+
OR "${prefix}" STREQUAL "WASI")
325+
set(SWIFT_SDK_${prefix}_STATIC_LINKING_SUPPORTED TRUE)
326+
else()
327+
set(SWIFT_SDK_${prefix}_STATIC_LINKING_SUPPORTED FALSE)
328+
endif()
329+
313330
# GCC on Linux is usually located under `/usr`.
314331
# However, Ubuntu 20.04 ships with another GCC installation under `/`, which
315332
# does not include libstdc++. Swift build scripts pass `--sysroot=/` to
@@ -464,6 +481,8 @@ macro(configure_sdk_windows name environment architectures)
464481
set(SWIFT_SDK_${prefix}_STATIC_LIBRARY_SUFFIX ".lib")
465482
set(SWIFT_SDK_${prefix}_IMPORT_LIBRARY_PREFIX "")
466483
set(SWIFT_SDK_${prefix}_IMPORT_LIBRARY_SUFFIX ".lib")
484+
set(SWIFT_SDK_${prefix}_STATIC_LINKING_SUPPORTED FALSE)
485+
set(SWIFT_SDK_${prefix}_STATIC_ONLY FALSE)
467486
get_threading_package(${prefix} "win32" SWIFT_SDK_${prefix}_THREADING_PACKAGE)
468487

469488
foreach(arch ${architectures})
@@ -531,6 +550,8 @@ function(configure_target_variant prefix name sdk build_config lib_subdir)
531550
set(SWIFT_VARIANT_${prefix}_STATIC_LIBRARY_SUFFIX ${SWIFT_SDK_${sdk}_STATIC_LIBRARY_SUFFIX})
532551
set(SWIFT_VARIANT_${prefix}_IMPORT_LIBRARY_PREFIX ${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_PREFIX})
533552
set(SWIFT_VARIANT_${prefix}_IMPORT_LIBRARY_SUFFIX ${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_SUFFIX})
553+
set(SWIFT_VARIANT_${prefix}_STATIC_LINKING_SUPPORTED ${SWIFT_SDK_${sdk}_STATIC_LINKING_SUPPORTED})
554+
set(SWIFT_VARIANT_${prefix}_STATIC_ONLY ${SWIFT_SDK_${sdk}_STATIC_ONLY})
534555
get_threading_package(${prefix} ${SWIFT_SDK_${sdk}_THREADING_PACKAGE} SWIFT_VARIANT_${prefix}_THREADING_PACKAGE)
535556
endfunction()
536557

0 commit comments

Comments
 (0)