Skip to content

Commit ba63b9f

Browse files
Merge pull request #75821 from kateinoigakukun/pr-680047d2b871e809cf13f27c8a4a5abc2f5c31d2
[wasm] Annotate errno as SwiftPrivate by apinotes
2 parents d47c50e + be08ebb commit ba63b9f

File tree

4 files changed

+52
-6
lines changed

4 files changed

+52
-6
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})

stdlib/public/Platform/Platform.swift

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,6 @@ func _convertDarwinBooleanToBool(_ x: DarwinBoolean) -> Bool {
8484

8585
#endif
8686

87-
// wasi-libc defines `errno` in a way ClangImporter can understand, so we don't
88-
// need to define shims for it. On the contrary, if we define the shim, we will
89-
// get an ambiguity error when importing WASILibc module and SwiftWASILibc Clang
90-
// module (or a Clang module that re-exports SwiftWASILibc).
91-
#if !os(WASI)
9287
//===----------------------------------------------------------------------===//
9388
// sys/errno.h
9489
//===----------------------------------------------------------------------===//
@@ -101,7 +96,6 @@ public var errno : Int32 {
10196
return _swift_stdlib_setErrno(val)
10297
}
10398
}
104-
#endif
10599

106100

107101
//===----------------------------------------------------------------------===//
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)