diff --git a/CMakeLists.txt b/CMakeLists.txt index 35e2d48646c29..cbe9842a73583 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -157,6 +157,8 @@ else() set(SWIFT_HOST_VARIANT_SDK_default "OSX") elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "WASI") set(SWIFT_HOST_VARIANT_SDK_default "WASI") + elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Emscripten") + set(SWIFT_HOST_VARIANT_SDK_default "EMSCRIPTEN") else() message(FATAL_ERROR "Unable to detect SDK for host system: ${CMAKE_SYSTEM_NAME}") endif() @@ -1241,6 +1243,15 @@ elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "WASI") set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}") set(SWIFT_PRIMARY_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}") +elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "EMSCRIPTEN") + + set(SWIFT_HOST_VARIANT "emscripten" CACHE STRING + "Deployment OS for Swift host tools (the compiler) [emscripten]") + + configure_sdk_unix("Emscripten" "wasm32") + set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}") + set(SWIFT_PRIMARY_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}") + elseif("${SWIFT_HOST_VARIANT_SDK}" MATCHES "(OSX|IOS*|TVOS*|WATCHOS*|XROS*)") set(SWIFT_HOST_VARIANT "macosx" CACHE STRING diff --git a/cmake/modules/AddSwift.cmake b/cmake/modules/AddSwift.cmake index 40cf16442281f..9dc517f62b6d7 100644 --- a/cmake/modules/AddSwift.cmake +++ b/cmake/modules/AddSwift.cmake @@ -106,6 +106,12 @@ function(_add_host_variant_c_compile_link_flags name) if("${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC") # clang-cl options target_compile_options(${name} PRIVATE $<$:--target=${SWIFT_HOST_TRIPLE}>) target_link_options(${name} PRIVATE $<$:--target=${SWIFT_HOST_TRIPLE}>) + elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "EMSCRIPTEN") # emcc options + # some older emcc don't understand -target= + # FIXME: remove this when we no longer support Emscripten < 3.1.44 + # https://github.com/emscripten-core/emscripten/pull/19840 + target_compile_options(${name} PRIVATE $<$:--target=${SWIFT_HOST_TRIPLE}>) + target_link_options(${name} PRIVATE $<$:-target=${SWIFT_HOST_TRIPLE}>) else() target_compile_options(${name} PRIVATE $<$:-target;${SWIFT_HOST_TRIPLE}>) target_link_options(${name} PRIVATE $<$:-target;${SWIFT_HOST_TRIPLE}>) diff --git a/cmake/modules/SwiftConfigureSDK.cmake b/cmake/modules/SwiftConfigureSDK.cmake index e4fa8fd6e9fc8..49267a6d2939e 100644 --- a/cmake/modules/SwiftConfigureSDK.cmake +++ b/cmake/modules/SwiftConfigureSDK.cmake @@ -322,6 +322,7 @@ macro(configure_sdk_unix name architectures) # Static linking is supported on Linux and WASI if("${prefix}" STREQUAL "LINUX" OR "${prefix}" STREQUAL "LINUX_STATIC" + OR "${prefix}" STREQUAL "EMSCRIPTEN" OR "${prefix}" STREQUAL "WASI") set(SWIFT_SDK_${prefix}_STATIC_LINKING_SUPPORTED TRUE) else() @@ -461,6 +462,8 @@ macro(configure_sdk_unix name architectures) else() set(SWIFT_SDK_WASI_ARCH_wasm32_TRIPLE "wasm32-unknown-wasi") endif() + elseif("${prefix}" STREQUAL "EMSCRIPTEN") + set(SWIFT_SDK_EMSCRIPTEN_ARCH_${arch}_TRIPLE "${arch}-unknown-emscripten") elseif("${prefix}" STREQUAL "LINUX_STATIC") set(SWIFT_SDK_LINUX_STATIC_ARCH_${arch}_TRIPLE "${arch}-swift-linux-musl") set(SWIFT_SDK_LINUX_STATIC_ARCH_${arch}_PATH "${SWIFT_MUSL_PATH}/${arch}")