Skip to content

Commit dfdae8e

Browse files
committed
Add enable_wasm_sdk_build: true to pull_request.yml
`swift-async-algorithms` should be built for Wasm as one of the officially supported platforms on CI to prevent possible future regressions.
1 parent 6dcb3ac commit dfdae8e

File tree

4 files changed

+28
-9
lines changed

4 files changed

+28
-9
lines changed

.github/workflows/pull_request.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ jobs:
88
tests:
99
name: Test
1010
uses: swiftlang/github-workflows/.github/workflows/swift_package_test.yml@main
11+
with:
12+
enable_wasm_sdk_build: true
13+
wasm_sdk_build_command: swift build -Xcc -D_WASI_EMULATED_PTHREAD
14+
1115
soundness:
1216
name: Soundness
1317
uses: swiftlang/github-workflows/.github/workflows/soundness.yml@main

Sources/AsyncAlgorithms/Locking.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,16 @@ import Musl
1919
import WinSDK
2020
#elseif canImport(Bionic)
2121
import Bionic
22+
#elseif canImport(wasi_pthread)
23+
import wasi_pthread
2224
#else
2325
#error("Unsupported platform")
2426
#endif
2527

2628
internal struct Lock {
2729
#if canImport(Darwin)
2830
typealias Primitive = os_unfair_lock
29-
#elseif canImport(Glibc) || canImport(Musl) || canImport(Bionic)
31+
#elseif canImport(Glibc) || canImport(Musl) || canImport(Bionic) || canImport(wasi_pthread)
3032
typealias Primitive = pthread_mutex_t
3133
#elseif canImport(WinSDK)
3234
typealias Primitive = SRWLOCK
@@ -44,7 +46,7 @@ internal struct Lock {
4446
fileprivate static func initialize(_ platformLock: PlatformLock) {
4547
#if canImport(Darwin)
4648
platformLock.initialize(to: os_unfair_lock())
47-
#elseif canImport(Glibc) || canImport(Musl) || canImport(Bionic)
49+
#elseif canImport(Glibc) || canImport(Musl) || canImport(Bionic) || canImport(wasi_pthread)
4850
let result = pthread_mutex_init(platformLock, nil)
4951
precondition(result == 0, "pthread_mutex_init failed")
5052
#elseif canImport(WinSDK)
@@ -55,7 +57,7 @@ internal struct Lock {
5557
}
5658

5759
fileprivate static func deinitialize(_ platformLock: PlatformLock) {
58-
#if canImport(Glibc) || canImport(Musl) || canImport(Bionic)
60+
#if canImport(Glibc) || canImport(Musl) || canImport(Bionic) || canImport(wasi_pthread)
5961
let result = pthread_mutex_destroy(platformLock)
6062
precondition(result == 0, "pthread_mutex_destroy failed")
6163
#endif
@@ -65,7 +67,7 @@ internal struct Lock {
6567
fileprivate static func lock(_ platformLock: PlatformLock) {
6668
#if canImport(Darwin)
6769
os_unfair_lock_lock(platformLock)
68-
#elseif canImport(Glibc) || canImport(Musl) || canImport(Bionic)
70+
#elseif canImport(Glibc) || canImport(Musl) || canImport(Bionic) || canImport(wasi_pthread)
6971
pthread_mutex_lock(platformLock)
7072
#elseif canImport(WinSDK)
7173
AcquireSRWLockExclusive(platformLock)
@@ -77,7 +79,7 @@ internal struct Lock {
7779
fileprivate static func unlock(_ platformLock: PlatformLock) {
7880
#if canImport(Darwin)
7981
os_unfair_lock_unlock(platformLock)
80-
#elseif canImport(Glibc) || canImport(Musl) || canImport(Bionic)
82+
#elseif canImport(Glibc) || canImport(Musl) || canImport(Bionic) || canImport(wasi_pthread)
8183
let result = pthread_mutex_unlock(platformLock)
8284
precondition(result == 0, "pthread_mutex_unlock failed")
8385
#elseif canImport(WinSDK)

Sources/AsyncSequenceValidation/TaskDriver.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import Glibc
1919
import Musl
2020
#elseif canImport(Bionic)
2121
import Bionic
22+
#elseif canImport(wasi_pthread)
23+
import wasi_pthread
2224
#elseif canImport(WinSDK)
2325
#error("TODO: Port TaskDriver threading to windows")
2426
#else
@@ -31,7 +33,7 @@ func start_thread(_ raw: UnsafeMutableRawPointer) -> UnsafeMutableRawPointer? {
3133
Unmanaged<TaskDriver>.fromOpaque(raw).takeRetainedValue().run()
3234
return nil
3335
}
34-
#elseif (canImport(Glibc) && !os(Android)) || canImport(Musl)
36+
#elseif (canImport(Glibc) && !os(Android)) || canImport(Musl) || canImport(wasi_pthread)
3537
@available(AsyncAlgorithms 1.0, *)
3638
func start_thread(_ raw: UnsafeMutableRawPointer?) -> UnsafeMutableRawPointer? {
3739
Unmanaged<TaskDriver>.fromOpaque(raw!).takeRetainedValue().run()
@@ -51,7 +53,7 @@ func start_thread(_ raw: UnsafeMutableRawPointer) -> UnsafeMutableRawPointer {
5153
final class TaskDriver {
5254
let work: (TaskDriver) -> Void
5355
let queue: WorkQueue
54-
#if canImport(Darwin)
56+
#if canImport(Darwin) || canImport(wasi_pthread)
5557
var thread: pthread_t?
5658
#elseif canImport(Glibc) || canImport(Musl) || canImport(Bionic)
5759
var thread = pthread_t()
@@ -65,7 +67,7 @@ final class TaskDriver {
6567
}
6668

6769
func start() {
68-
#if canImport(Darwin) || canImport(Glibc) || canImport(Musl) || canImport(Bionic)
70+
#if canImport(Darwin) || canImport(Glibc) || canImport(Musl) || canImport(Bionic) || canImport(wasi_pthread)
6971
pthread_create(
7072
&thread,
7173
nil,
@@ -85,7 +87,7 @@ final class TaskDriver {
8587
}
8688

8789
func join() {
88-
#if canImport(Darwin)
90+
#if canImport(Darwin) || canImport(wasi_pthread)
8991
pthread_join(thread!, nil)
9092
#elseif canImport(Glibc) || canImport(Musl) || canImport(Bionic)
9193
pthread_join(thread, nil)

Sources/_CAsyncSequenceValidationSupport/_CAsyncSequenceValidationSupport.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,3 +246,14 @@ SWIFT_EXPORT_FROM(swift_Concurrency)
246246
SWIFT_CC(swift) void (* _Nullable swift_task_enqueueGlobal_hook)(
247247
JobRef _Nonnull job, swift_task_enqueueGlobal_original _Nonnull original);
248248

249+
// Workaround for `macro 'pthread_join' unavailable: function like macros not supported`
250+
#if defined(__wasi__)
251+
252+
#include <pthread.h>
253+
254+
int swift_async_sequencey_pthread_join(pthread_t thread, void **value_ptr) {
255+
return pthread_join(thread, value_ptr);
256+
}
257+
258+
#endif
259+

0 commit comments

Comments
 (0)