Skip to content

Commit 37138e4

Browse files
[cmake] Support WASILibc modulemap and header generation
1 parent 88cc780 commit 37138e4

File tree

1 file changed

+38
-13
lines changed

1 file changed

+38
-13
lines changed

stdlib/public/Platform/CMakeLists.txt

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,23 @@ add_swift_target_library(swiftGlibc ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} IS_SDK_O
9898
INSTALL_IN_COMPONENT sdk-overlay
9999
DEPENDS glibc_modulemap)
100100

101+
add_swift_target_library(swiftWASILibc ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} IS_SDK_OVERLAY
102+
${swift_platform_sources}
103+
POSIXError.swift
104+
105+
GYB_SOURCES
106+
${swift_platform_gyb_sources}
107+
WASI.swift.gyb
108+
109+
SWIFT_COMPILE_FLAGS
110+
${SWIFT_RUNTIME_SWIFT_COMPILE_FLAGS}
111+
${SWIFT_STANDARD_LIBRARY_SWIFT_FLAGS}
112+
LINK_FLAGS "${SWIFT_RUNTIME_SWIFT_LINK_FLAGS}"
113+
TARGET_SDKS WASI
114+
INSTALL_IN_COMPONENT sdk-overlay
115+
DEPENDS glibc_modulemap)
116+
117+
101118
if(WASI IN_LIST SWIFT_SDKS)
102119
set(arch_subdir "${SWIFT_SDK_WASI_LIB_SUBDIR}/wasm32")
103120
set(module_dir "${SWIFTLIB_DIR}/${arch_subdir}")
@@ -202,23 +219,31 @@ add_swift_target_library(swiftCRT ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} IS_SDK_OVE
202219

203220
set(glibc_modulemap_target_list)
204221
foreach(sdk ${SWIFT_SDKS})
205-
if(NOT "${sdk}" STREQUAL "LINUX" AND
206-
NOT "${sdk}" STREQUAL "FREEBSD" AND
207-
NOT "${sdk}" STREQUAL "OPENBSD" AND
208-
NOT "${sdk}" STREQUAL "ANDROID" AND
209-
NOT "${sdk}" STREQUAL "CYGWIN" AND
210-
NOT "${sdk}" STREQUAL "HAIKU")
222+
if("${sdk}" STREQUAL "LINUX" OR
223+
"${sdk}" STREQUAL "FREEBSD" OR
224+
"${sdk}" STREQUAL "OPENBSD" OR
225+
"${sdk}" STREQUAL "ANDROID" OR
226+
"${sdk}" STREQUAL "CYGWIN" OR
227+
"${sdk}" STREQUAL "HAIKU")
228+
set(glibc_modulemap_source "glibc.modulemap.gyb")
229+
set(glibc_header_source "SwiftGlibc.h.gyb")
230+
elseif("${sdk}" STREQUAL "WASI")
231+
set(glibc_modulemap_source "wasi.modulemap.gyb")
232+
set(glibc_header_source "SwiftWASILibc.h.gyb")
233+
else()
211234
continue()
212235
endif()
213236

237+
string(REGEX REPLACE "\\.gyb$" "" glibc_modulemap_outname "${glibc_modulemap_source}")
238+
string(REGEX REPLACE "\\.gyb$" "" glibc_header_outname "${glibc_header_source}")
239+
214240
foreach(arch ${SWIFT_SDK_${sdk}_ARCHITECTURES})
215241
set(arch_subdir "${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${arch}")
216242
set(module_dir "${SWIFTLIB_DIR}/${arch_subdir}")
217243
set(module_dir_static "${SWIFTSTATICLIB_DIR}/${arch_subdir}")
218244

219-
set(glibc_modulemap_source "glibc.modulemap.gyb")
220-
set(glibc_modulemap_out "${module_dir}/glibc.modulemap")
221-
set(glibc_modulemap_out_static "${module_dir_static}/glibc.modulemap")
245+
set(glibc_modulemap_out "${module_dir}/${glibc_modulemap_outname}")
246+
set(glibc_modulemap_out_static "${module_dir_static}/${glibc_modulemap_outname}")
222247

223248
# Configure the module map based on the target. Each platform needs to
224249
# reference different headers, based on what's available in their glibc.
@@ -232,10 +257,10 @@ foreach(sdk ${SWIFT_SDKS})
232257

233258
list(APPEND glibc_modulemap_target_list ${glibc_modulemap_target})
234259

235-
set(glibc_header_out "${module_dir}/SwiftGlibc.h")
236-
set(glibc_header_out_static "${module_dir_static}/SwiftGlibc.h")
260+
set(glibc_header_out "${module_dir}/${glibc_header_outname}")
261+
set(glibc_header_out_static "${module_dir_static}/${glibc_header_outname}")
237262
handle_gyb_source_single(glibc_header_target
238-
SOURCE "SwiftGlibc.h.gyb"
263+
SOURCE "${glibc_header_source}"
239264
OUTPUT "${glibc_header_out}"
240265
FLAGS "-DCMAKE_SDK=${sdk}")
241266
list(APPEND glibc_modulemap_target_list ${glibc_header_target})
@@ -266,7 +291,7 @@ foreach(sdk ${SWIFT_SDKS})
266291
# prefix. This is the one we'll install instead.
267292
if(NOT "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${arch}_PATH}" STREQUAL "/" AND
268293
NOT (${sdk} STREQUAL ANDROID AND NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL ""))
269-
set(glibc_sysroot_relative_modulemap_out "${module_dir}/sysroot-relative-modulemaps/glibc.modulemap")
294+
set(glibc_sysroot_relative_modulemap_out "${module_dir}/sysroot-relative-modulemaps/${glibc_modulemap_outname}")
270295

271296
handle_gyb_source_single(glibc_modulemap_native_target
272297
SOURCE "${glibc_modulemap_source}"

0 commit comments

Comments
 (0)