Skip to content

Commit 9d4e5b6

Browse files
[build] Add initial support for Emscripten SDK
This patch adds initial support for Emscripten SDK alongside the existing support for WASI SDK. This is a first step towards building a part of Swift compiler for Emscripten target (which will be used to build LLDB with Swift to WebAssembly target).
1 parent 772cff1 commit 9d4e5b6

File tree

3 files changed

+20
-0
lines changed

3 files changed

+20
-0
lines changed

CMakeLists.txt

+11
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,8 @@ else()
157157
set(SWIFT_HOST_VARIANT_SDK_default "OSX")
158158
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "WASI")
159159
set(SWIFT_HOST_VARIANT_SDK_default "WASI")
160+
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Emscripten")
161+
set(SWIFT_HOST_VARIANT_SDK_default "EMSCRIPTEN")
160162
else()
161163
message(FATAL_ERROR "Unable to detect SDK for host system: ${CMAKE_SYSTEM_NAME}")
162164
endif()
@@ -1241,6 +1243,15 @@ elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "WASI")
12411243
set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
12421244
set(SWIFT_PRIMARY_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}")
12431245

1246+
elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "EMSCRIPTEN")
1247+
1248+
set(SWIFT_HOST_VARIANT "emscripten" CACHE STRING
1249+
"Deployment OS for Swift host tools (the compiler) [emscripten]")
1250+
1251+
configure_sdk_unix("Emscripten" "wasm32")
1252+
set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
1253+
set(SWIFT_PRIMARY_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}")
1254+
12441255
elseif("${SWIFT_HOST_VARIANT_SDK}" MATCHES "(OSX|IOS*|TVOS*|WATCHOS*|XROS*)")
12451256

12461257
set(SWIFT_HOST_VARIANT "macosx" CACHE STRING

cmake/modules/AddSwift.cmake

+6
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,12 @@ function(_add_host_variant_c_compile_link_flags name)
106106
if("${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC") # clang-cl options
107107
target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:--target=${SWIFT_HOST_TRIPLE}>)
108108
target_link_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:--target=${SWIFT_HOST_TRIPLE}>)
109+
elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "EMSCRIPTEN") # emcc options
110+
# some older emcc don't understand -target=<triple>
111+
# FIXME: remove this when we no longer support Emscripten < 3.1.44
112+
# https://github.com/emscripten-core/emscripten/pull/19840
113+
target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:--target=${SWIFT_HOST_TRIPLE}>)
114+
target_link_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-target=${SWIFT_HOST_TRIPLE}>)
109115
else()
110116
target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-target;${SWIFT_HOST_TRIPLE}>)
111117
target_link_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-target;${SWIFT_HOST_TRIPLE}>)

cmake/modules/SwiftConfigureSDK.cmake

+3
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,7 @@ macro(configure_sdk_unix name architectures)
322322
# Static linking is supported on Linux and WASI
323323
if("${prefix}" STREQUAL "LINUX"
324324
OR "${prefix}" STREQUAL "LINUX_STATIC"
325+
OR "${prefix}" STREQUAL "EMSCRIPTEN"
325326
OR "${prefix}" STREQUAL "WASI")
326327
set(SWIFT_SDK_${prefix}_STATIC_LINKING_SUPPORTED TRUE)
327328
else()
@@ -461,6 +462,8 @@ macro(configure_sdk_unix name architectures)
461462
else()
462463
set(SWIFT_SDK_WASI_ARCH_wasm32_TRIPLE "wasm32-unknown-wasi")
463464
endif()
465+
elseif("${prefix}" STREQUAL "EMSCRIPTEN")
466+
set(SWIFT_SDK_EMSCRIPTEN_ARCH_${arch}_TRIPLE "${arch}-unknown-emscripten")
464467
elseif("${prefix}" STREQUAL "LINUX_STATIC")
465468
set(SWIFT_SDK_LINUX_STATIC_ARCH_${arch}_TRIPLE "${arch}-swift-linux-musl")
466469
set(SWIFT_SDK_LINUX_STATIC_ARCH_${arch}_PATH "${SWIFT_MUSL_PATH}/${arch}")

0 commit comments

Comments
 (0)