Skip to content

Commit be08ebb

Browse files
[wasm] Annotate errno as SwiftPrivate by apinotes
This patch adds an apinotes file for SwiftWASILibc clang module to mark `errno` macro hidden from Swift code. This resolves ambiguity between the C macro definition and the Swift wrapper in WASILibc overlay module. This change installs the apinotes file to the resource directories for both lib/swift/apinotes and lib/swift_static/apinotes.
1 parent 90799cf commit be08ebb

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

stdlib/public/Platform/CMakeLists.txt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,34 @@ if("WASI" IN_LIST SWIFT_SDKS)
527527
DESTINATION "lib/swift_static/${arch_subdir}"
528528
COMPONENT sdk-overlay)
529529
endif()
530+
531+
set(wasilibc_apinotes_source "SwiftWASILibc.apinotes")
532+
add_custom_command_target(
533+
copy_wasilibc_apinotes_resource
534+
COMMAND
535+
"${CMAKE_COMMAND}" "-E" "make_directory" ${SWIFTLIB_DIR}/apinotes ${SWIFTSTATICLIB_DIR}/apinotes
536+
COMMAND
537+
"${CMAKE_COMMAND}" "-E" "copy_if_different"
538+
"${CMAKE_CURRENT_SOURCE_DIR}/${wasilibc_apinotes_source}" ${SWIFTLIB_DIR}/apinotes
539+
COMMAND
540+
"${CMAKE_COMMAND}" "-E" "copy_if_different"
541+
"${CMAKE_CURRENT_SOURCE_DIR}/${wasilibc_apinotes_source}" ${SWIFTSTATICLIB_DIR}/apinotes
542+
OUTPUT
543+
${SWIFTLIB_DIR}/apinotes/${wasilibc_apinotes_source}
544+
${SWIFTSTATICLIB_DIR}/apinotes/${wasilibc_apinotes_source}
545+
COMMENT "Copying WASILibc API notes to resource directories")
546+
547+
list(APPEND wasilibc_modulemap_target_list ${copy_wasilibc_apinotes_resource})
548+
add_dependencies(sdk-overlay ${copy_wasilibc_apinotes_resource})
549+
swift_install_in_component(FILES "${wasilibc_apinotes_source}"
550+
DESTINATION "lib/swift/apinotes"
551+
COMPONENT sdk-overlay)
552+
if(SWIFT_BUILD_STATIC_STDLIB)
553+
swift_install_in_component(FILES "${wasilibc_apinotes_source}"
554+
DESTINATION "lib/swift_static/apinotes"
555+
COMPONENT sdk-overlay)
556+
endif()
557+
530558
endforeach()
531559
endif()
532560
add_custom_target(wasilibc_modulemap DEPENDS ${wasilibc_modulemap_target_list})
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Name: SwiftWASILibc
2+
Globals:
3+
# errno macro is importable but we provide explicit Swift wrapper
4+
- Name: errno
5+
SwiftPrivate: true

test/stdlib/WASILibcAPI.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// RUN: %target-swift-frontend -typecheck -swift-version 6 %s -verify
2+
// REQUIRES: executable_test
3+
// REQUIRES: OS=wasi
4+
5+
import WASILibc
6+
7+
// errno is a global thread-local variable, so it should be accessible
8+
// from any context.
9+
10+
enum TestErrno {
11+
static func testSyncContext() {
12+
_ = errno
13+
errno = 0
14+
}
15+
static func testAsyncContext() async {
16+
_ = errno
17+
errno = 0
18+
}
19+
}

0 commit comments

Comments
 (0)