Skip to content

Commit f3da784

Browse files
authored
Merge pull request swiftlang#31672 from swiftwasm/maxd/wasi-sdk
build: Add support for WASI in CMake files
2 parents 838f1a7 + 7620796 commit f3da784

File tree

4 files changed

+34
-4
lines changed

4 files changed

+34
-4
lines changed

CMakeLists.txt

+11-3
Original file line numberDiff line numberDiff line change
@@ -261,11 +261,11 @@ set(SWIFT_ANDROID_DEPLOY_DEVICE_PATH "" CACHE STRING
261261
"Path on an Android device where build products will be pushed. These are used when running the test suite against the device")
262262

263263
#
264-
# User-configurable ICU specific options for Android, FreeBSD, Linux and Haiku.
264+
# User-configurable ICU specific options for Android, FreeBSD, Linux, Haiku, and WASI.
265265
#
266266

267-
foreach(sdk ANDROID;FREEBSD;LINUX;WINDOWS;HAIKU)
268-
foreach(arch aarch64;armv6;armv7;i686;powerpc64;powerpc64le;s390x;x86_64)
267+
foreach(sdk ANDROID;FREEBSD;LINUX;WINDOWS;HAIKU;WASI)
268+
foreach(arch aarch64;armv6;armv7;i686;powerpc64;powerpc64le;s390x;wasm32;x86_64)
269269
set(SWIFT_${sdk}_${arch}_ICU_UC "" CACHE STRING
270270
"Path to a directory containing the icuuc library for ${sdk}")
271271
set(SWIFT_${sdk}_${arch}_ICU_UC_INCLUDE "" CACHE STRING
@@ -606,6 +606,8 @@ else()
606606
set(SWIFT_HOST_VARIANT_ARCH_default "itanium")
607607
elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "(x86|i686)")
608608
set(SWIFT_HOST_VARIANT_ARCH_default "i686")
609+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "wasm32")
610+
set(SWIFT_HOST_VARIANT_ARCH_default "wasm32")
609611
else()
610612
message(FATAL_ERROR "Unrecognized architecture on host system: ${CMAKE_SYSTEM_PROCESSOR}")
611613
endif()
@@ -790,6 +792,12 @@ if(swift_build_windows AND NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
790792
configure_sdk_windows("Windows" "msvc" "${SWIFT_SDK_WINDOWS_ARCHITECTURES}")
791793
endif()
792794

795+
# Should we cross-compile the standard library for WASI?
796+
is_sdk_requested(WASI swift_build_wasm)
797+
if(swift_build_wasm AND NOT "${SWIFT_HOST_VARIANT_SDK}" STREQUAL "WASI")
798+
configure_sdk_unix(WASI wasm32)
799+
endif()
800+
793801
if("${SWIFT_SDKS}" STREQUAL "")
794802
set(SWIFT_SDKS "${SWIFT_CONFIGURED_SDKS}")
795803
endif()

cmake/modules/SwiftConfigureSDK.cmake

+10
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,8 @@ macro(configure_sdk_unix name architectures)
230230
set(SWIFT_SDK_${prefix}_ARCHITECTURES "${architectures}")
231231
if("${prefix}" STREQUAL "CYGWIN")
232232
set(SWIFT_SDK_${prefix}_OBJECT_FORMAT "COFF")
233+
elseif("${prefix}" STREQUAL "WASI")
234+
set(SWIFT_SDK_${prefix}_OBJECT_FORMAT "WASM")
233235
else()
234236
set(SWIFT_SDK_${prefix}_OBJECT_FORMAT "ELF")
235237
endif()
@@ -357,6 +359,14 @@ macro(configure_sdk_unix name architectures)
357359
message(FATAL_ERROR "unsupported arch for Haiku: ${arch}")
358360
endif()
359361
set(SWIFT_SDK_HAIKU_ARCH_x86_64_TRIPLE "x86_64-unknown-haiku")
362+
elseif("${prefix}" STREQUAL "WASI")
363+
if(NOT arch STREQUAL wasm32)
364+
message(FATAL_ERROR "unsupported arch for WebAssembly: ${arch}")
365+
endif()
366+
set(SWIFT_SDK_WASI_ARCH_wasm32_PATH "${SWIFT_WASI_SDK_PATH}/share/wasi-sysroot")
367+
set(SWIFT_SDK_WASI_ARCH_wasm32_TRIPLE "wasm32-unknown-wasi")
368+
set(SWIFT_SDK_WASI_ARCH_wasm32_LIBC_INCLUDE_DIRECTORY "${SWIFT_WASI_SDK_PATH}/share/wasi-sysroot/include")
369+
set(SWIFT_SDK_WASI_ARCH_wasm32_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY "${SWIFT_WASI_SDK_PATH}/share/wasi-sysroot/include")
360370
else()
361371
message(FATAL_ERROR "unknown Unix OS: ${prefix}")
362372
endif()

cmake/modules/SwiftSetIfArchBitness.cmake

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ function(set_if_arch_bitness var_name)
1212
"${SIA_ARCH}" STREQUAL "armv6" OR
1313
"${SIA_ARCH}" STREQUAL "armv7" OR
1414
"${SIA_ARCH}" STREQUAL "armv7k" OR
15-
"${SIA_ARCH}" STREQUAL "armv7s")
15+
"${SIA_ARCH}" STREQUAL "armv7s" OR
16+
"${SIA_ARCH}" STREQUAL "wasm32")
1617
set("${var_name}" "${SIA_CASE_32_BIT}" PARENT_SCOPE)
1718
elseif("${SIA_ARCH}" STREQUAL "x86_64" OR
1819
"${SIA_ARCH}" STREQUAL "amd64" OR

stdlib/cmake/modules/AddSwiftStdlib.cmake

+11
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,10 @@ function(_add_target_variant_c_compile_flags)
307307
endif()
308308
endif()
309309

310+
if("${CFLAGS_SDK}" STREQUAL "WASI")
311+
list(APPEND result "-D_WASI_EMULATED_MMAN")
312+
endif()
313+
310314
set("${CFLAGS_RESULT_VAR_NAME}" "${result}" PARENT_SCOPE)
311315
endfunction()
312316

@@ -1407,6 +1411,9 @@ endfunction()
14071411
# SWIFT_MODULE_DEPENDS_HAIKU
14081412
# Swift modules this library depends on when built for Haiku.
14091413
#
1414+
# SWIFT_MODULE_DEPENDS_WASI
1415+
# Swift modules this library depends on when built for WASI.
1416+
#
14101417
# FRAMEWORK_DEPENDS
14111418
# System frameworks this library depends on.
14121419
#
@@ -1519,6 +1526,7 @@ function(add_swift_target_library name)
15191526
SWIFT_MODULE_DEPENDS_LINUX
15201527
SWIFT_MODULE_DEPENDS_OSX
15211528
SWIFT_MODULE_DEPENDS_TVOS
1529+
SWIFT_MODULE_DEPENDS_WASI
15221530
SWIFT_MODULE_DEPENDS_WATCHOS
15231531
SWIFT_MODULE_DEPENDS_WINDOWS
15241532
SWIFT_MODULE_DEPENDS_FROM_SDK
@@ -1684,6 +1692,9 @@ function(add_swift_target_library name)
16841692
elseif(${sdk} STREQUAL HAIKU)
16851693
list(APPEND swiftlib_module_depends_flattened
16861694
${SWIFTLIB_SWIFT_MODULE_DEPENDS_HAIKU})
1695+
elseif(${sdk} STREQUAL WASI)
1696+
list(APPEND swiftlib_module_depends_flattened
1697+
${SWIFTLIB_SWIFT_MODULE_DEPENDS_WASI})
16871698
elseif(${sdk} STREQUAL WINDOWS)
16881699
list(APPEND swiftlib_module_depends_flattened
16891700
${SWIFTLIB_SWIFT_MODULE_DEPENDS_WINDOWS})

0 commit comments

Comments
 (0)