Skip to content

Commit c4a5e41

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 85f4f84 commit c4a5e41

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
@@ -508,6 +508,34 @@ if("WASI" IN_LIST SWIFT_SDKS)
508508
DESTINATION "lib/swift_static/${arch_subdir}"
509509
COMPONENT sdk-overlay)
510510
endif()
511+
512+
set(wasilibc_apinotes_source "SwiftWASILibc.apinotes")
513+
add_custom_command_target(
514+
copy_wasilibc_apinotes_resource
515+
COMMAND
516+
"${CMAKE_COMMAND}" "-E" "make_directory" ${SWIFTLIB_DIR}/apinotes ${SWIFTSTATICLIB_DIR}/apinotes
517+
COMMAND
518+
"${CMAKE_COMMAND}" "-E" "copy_if_different"
519+
"${CMAKE_CURRENT_SOURCE_DIR}/${wasilibc_apinotes_source}" ${SWIFTLIB_DIR}/apinotes
520+
COMMAND
521+
"${CMAKE_COMMAND}" "-E" "copy_if_different"
522+
"${CMAKE_CURRENT_SOURCE_DIR}/${wasilibc_apinotes_source}" ${SWIFTSTATICLIB_DIR}/apinotes
523+
OUTPUT
524+
${SWIFTLIB_DIR}/apinotes/${wasilibc_apinotes_source}
525+
${SWIFTSTATICLIB_DIR}/apinotes/${wasilibc_apinotes_source}
526+
COMMENT "Copying WASILibc API notes to resource directories")
527+
528+
list(APPEND wasilibc_modulemap_target_list ${copy_wasilibc_apinotes_resource})
529+
add_dependencies(sdk-overlay ${copy_wasilibc_apinotes_resource})
530+
swift_install_in_component(FILES "${wasilibc_apinotes_source}"
531+
DESTINATION "lib/swift/apinotes"
532+
COMPONENT sdk-overlay)
533+
if(SWIFT_BUILD_STATIC_STDLIB)
534+
swift_install_in_component(FILES "${wasilibc_apinotes_source}"
535+
DESTINATION "lib/swift_static/apinotes"
536+
COMPONENT sdk-overlay)
537+
endif()
538+
511539
endforeach()
512540
endif()
513541
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)