Skip to content

Commit fba68e2

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 0cc9f57 commit fba68e2

File tree

3 files changed

+20
-0
lines changed

3 files changed

+20
-0
lines changed

CMakeLists.txt

Lines changed: 11 additions & 0 deletions
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()
@@ -1248,6 +1250,15 @@ elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "WASI")
12481250
set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
12491251
set(SWIFT_PRIMARY_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}")
12501252

1253+
elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "EMSCRIPTEN")
1254+
1255+
set(SWIFT_HOST_VARIANT "emscripten" CACHE STRING
1256+
"Deployment OS for Swift host tools (the compiler) [emscripten]")
1257+
1258+
configure_sdk_unix("Emscripten" "wasm32")
1259+
set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
1260+
set(SWIFT_PRIMARY_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}")
1261+
12511262
elseif("${SWIFT_HOST_VARIANT_SDK}" MATCHES "(OSX|IOS*|TVOS*|WATCHOS*|XROS*)")
12521263

12531264
set(SWIFT_HOST_VARIANT "macosx" CACHE STRING

cmake/modules/AddSwift.cmake

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,12 @@ function(_add_host_variant_c_compile_link_flags name)
137137
if("${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC") # clang-cl options
138138
target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:--target=${SWIFT_HOST_TRIPLE}>)
139139
target_link_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:--target=${SWIFT_HOST_TRIPLE}>)
140+
elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "EMSCRIPTEN") # emcc options
141+
# some older emcc don't understand -target=<triple>
142+
# FIXME: remove this when we no longer support Emscripten < 3.1.44
143+
# https://github.com/emscripten-core/emscripten/pull/19840
144+
target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:--target=${SWIFT_HOST_TRIPLE}>)
145+
target_link_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-target=${SWIFT_HOST_TRIPLE}>)
140146
else()
141147
target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-target;${SWIFT_HOST_TRIPLE}>)
142148
target_link_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-target;${SWIFT_HOST_TRIPLE}>)

cmake/modules/SwiftConfigureSDK.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,7 @@ macro(configure_sdk_unix name architectures)
326326
# Static linking is supported on Linux and WASI
327327
if("${prefix}" STREQUAL "LINUX"
328328
OR "${prefix}" STREQUAL "LINUX_STATIC"
329+
OR "${prefix}" STREQUAL "EMSCRIPTEN"
329330
OR "${prefix}" STREQUAL "WASI")
330331
set(SWIFT_SDK_${prefix}_STATIC_LINKING_SUPPORTED TRUE)
331332
else()
@@ -465,6 +466,8 @@ macro(configure_sdk_unix name architectures)
465466
else()
466467
set(SWIFT_SDK_WASI_ARCH_wasm32_TRIPLE "wasm32-unknown-wasi")
467468
endif()
469+
elseif("${prefix}" STREQUAL "EMSCRIPTEN")
470+
set(SWIFT_SDK_EMSCRIPTEN_ARCH_${arch}_TRIPLE "${arch}-unknown-emscripten")
468471
elseif("${prefix}" STREQUAL "LINUX_STATIC")
469472
set(SWIFT_SDK_LINUX_STATIC_ARCH_${arch}_TRIPLE "${arch}-swift-linux-musl")
470473
set(SWIFT_SDK_LINUX_STATIC_ARCH_${arch}_PATH "${SWIFT_MUSL_PATH}/${arch}")

0 commit comments

Comments
 (0)