Skip to content

Commit a00e224

Browse files
kateinoigakukunAnka
authored and
Anka
committed
[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 4299ec6 commit a00e224

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

stdlib/public/Platform/CMakeLists.txt

+28
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,34 @@ if("WASI" IN_LIST SWIFT_SDKS)
526526
DESTINATION "lib/swift_static/${arch_subdir}"
527527
COMPONENT sdk-overlay)
528528
endif()
529+
530+
set(wasilibc_apinotes_source "SwiftWASILibc.apinotes")
531+
add_custom_command_target(
532+
copy_wasilibc_apinotes_resource
533+
COMMAND
534+
"${CMAKE_COMMAND}" "-E" "make_directory" ${SWIFTLIB_DIR}/apinotes ${SWIFTSTATICLIB_DIR}/apinotes
535+
COMMAND
536+
"${CMAKE_COMMAND}" "-E" "copy_if_different"
537+
"${CMAKE_CURRENT_SOURCE_DIR}/${wasilibc_apinotes_source}" ${SWIFTLIB_DIR}/apinotes
538+
COMMAND
539+
"${CMAKE_COMMAND}" "-E" "copy_if_different"
540+
"${CMAKE_CURRENT_SOURCE_DIR}/${wasilibc_apinotes_source}" ${SWIFTSTATICLIB_DIR}/apinotes
541+
OUTPUT
542+
${SWIFTLIB_DIR}/apinotes/${wasilibc_apinotes_source}
543+
${SWIFTSTATICLIB_DIR}/apinotes/${wasilibc_apinotes_source}
544+
COMMENT "Copying WASILibc API notes to resource directories")
545+
546+
list(APPEND wasilibc_modulemap_target_list ${copy_wasilibc_apinotes_resource})
547+
add_dependencies(sdk-overlay ${copy_wasilibc_apinotes_resource})
548+
swift_install_in_component(FILES "${wasilibc_apinotes_source}"
549+
DESTINATION "lib/swift/apinotes"
550+
COMPONENT sdk-overlay)
551+
if(SWIFT_BUILD_STATIC_STDLIB)
552+
swift_install_in_component(FILES "${wasilibc_apinotes_source}"
553+
DESTINATION "lib/swift_static/apinotes"
554+
COMPONENT sdk-overlay)
555+
endif()
556+
529557
endforeach()
530558
endif()
531559
add_custom_target(wasilibc_modulemap DEPENDS ${wasilibc_modulemap_target_list})
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

+19
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)