Skip to content

Commit 45a723e

Browse files
Exclude WASI from Windows build too
1 parent 8488805 commit 45a723e

File tree

5 files changed

+81
-36
lines changed

5 files changed

+81
-36
lines changed

Package.swift

Lines changed: 51 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,6 @@ let package = Package(
1515
name: "WasmParser",
1616
targets: ["WasmParser"]
1717
),
18-
.library(
19-
name: "WasmKitWASI",
20-
targets: ["WasmKitWASI"]
21-
),
22-
.library(
23-
name: "WASI",
24-
targets: ["WASI"]
25-
),
2618
.executable(
2719
name: "wasmkit-cli",
2820
targets: ["CLI"]
@@ -33,7 +25,6 @@ let package = Package(
3325
name: "CLI",
3426
dependencies: [
3527
"WasmKit",
36-
"WasmKitWASI",
3728
.product(name: "ArgumentParser", package: "swift-argument-parser"),
3829
.product(name: "SystemPackage", package: "swift-system"),
3930
],
@@ -43,16 +34,10 @@ let package = Package(
4334
name: "WasmTypes",
4435
exclude: ["CMakeLists.txt"]
4536
),
46-
.target(
47-
name: "WASI",
48-
dependencies: ["WasmTypes", "SystemExtras"],
49-
exclude: ["CMakeLists.txt"]
50-
),
5137
.target(
5238
name: "WasmKit",
5339
dependencies: [
5440
"WasmParser",
55-
"SystemExtras",
5641
"WasmTypes",
5742
.product(name: "SystemPackage", package: "swift-system"),
5843
],
@@ -66,18 +51,6 @@ let package = Package(
6651
],
6752
exclude: ["CMakeLists.txt"]
6853
),
69-
.target(
70-
name: "WasmKitWASI",
71-
dependencies: ["WasmKit", "WASI"],
72-
exclude: ["CMakeLists.txt"]
73-
),
74-
.target(
75-
name: "SystemExtras",
76-
dependencies: [
77-
.product(name: "SystemPackage", package: "swift-system")
78-
],
79-
exclude: ["CMakeLists.txt"]
80-
),
8154
.executableTarget(
8255
name: "Spectest",
8356
dependencies: [
@@ -94,10 +67,6 @@ let package = Package(
9467
name: "WasmParserTests",
9568
dependencies: ["WasmParser"]
9669
),
97-
.testTarget(
98-
name: "WASITests",
99-
dependencies: ["WASI"]
100-
),
10170
],
10271
swiftLanguageVersions: [.v5]
10372
)
@@ -117,6 +86,57 @@ if ProcessInfo.processInfo.environment["SWIFTCI_USE_LOCAL_DEPS"] == nil {
11786
}
11887

11988
#if !os(Windows)
89+
// Add WASI-related products and targets
90+
package.products.append(contentsOf: [
91+
.library(
92+
name: "WasmKitWASI",
93+
targets: ["WasmKitWASI"]
94+
),
95+
.library(
96+
name: "WASI",
97+
targets: ["WASI"]
98+
),
99+
])
100+
package.targets.append(contentsOf: [
101+
.target(
102+
name: "WASI",
103+
dependencies: ["WasmTypes", "SystemExtras"],
104+
exclude: ["CMakeLists.txt"]
105+
),
106+
.target(
107+
name: "WasmKitWASI",
108+
dependencies: ["WasmKit", "WASI"],
109+
exclude: ["CMakeLists.txt"]
110+
),
111+
.target(
112+
name: "SystemExtras",
113+
dependencies: [
114+
.product(name: "SystemPackage", package: "swift-system")
115+
],
116+
exclude: ["CMakeLists.txt"]
117+
),
118+
.testTarget(
119+
name: "WASITests",
120+
dependencies: ["WASI"]
121+
),
122+
.testTarget(
123+
name: "WASITests",
124+
dependencies: ["WASI"]
125+
),
126+
])
127+
let targetDependenciesToAdd = [
128+
"CLI": ["WasmKitWASI"],
129+
"WasmKit": ["SystemExtras"],
130+
]
131+
for (targetName, dependencies) in targetDependenciesToAdd {
132+
if let target = package.targets.first(where: { $0.name == targetName }) {
133+
target.dependencies += dependencies.map { .target(name: $0) }
134+
} else {
135+
fatalError("Target \(targetName) not found!?")
136+
}
137+
}
138+
139+
// Add WIT-related products and targets
120140
package.products.append(contentsOf: [
121141
.library(name: "WIT", targets: ["WIT"]),
122142
.library(name: "_CabiShims", targets: ["_CabiShims"]),

Sources/CLI/Run/Run.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import ArgumentParser
22
import SystemPackage
3+
#if canImport(WasmKitWASI)
34
import WasmKitWASI
5+
#endif
46
import WasmKit
57

68
struct Run: ParsableCommand {
@@ -78,6 +80,7 @@ struct Run: ParsableCommand {
7880
}
7981
}
8082

83+
#if canImport(SystemExtras)
8184
func deriveInterceptor() throws -> (interceptor: GuestTimeProfiler, finalize: () -> Void)? {
8285
guard let outputPath = self.profileOutput else { return nil }
8386
let fileHandle = try FileDescriptor.open(
@@ -97,8 +100,16 @@ struct Run: ParsableCommand {
97100
}
98101
)
99102
}
103+
#else
104+
func deriveInterceptor() throws -> (interceptor: RuntimeInterceptor, finalize: () -> Void)? {
105+
nil
106+
}
107+
#endif
100108

101109
func instantiateWASI(module: Module, interceptor: RuntimeInterceptor?) throws -> () throws -> Void {
110+
#if os(Windows)
111+
fatalError("WASI is not supported on Windows")
112+
#else
102113
// Flatten environment variables into a dictionary (Respect the last value if a key is duplicated)
103114
let environment = environment.reduce(into: [String: String]()) {
104115
$0[$1.key] = $1.value
@@ -113,6 +124,7 @@ struct Run: ParsableCommand {
113124
let exitCode = try wasi.start(moduleInstance, runtime: runtime)
114125
throw ExitCode(Int32(exitCode))
115126
}
127+
#endif
116128
}
117129

118130
func instantiateNonWASI(module: Module, interceptor: RuntimeInterceptor?) throws -> (() throws -> Void)? {

Sources/SystemExtras/Constants.swift

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ internal var _AT_EACCESS: CInt { AT_EACCESS }
1919
internal var _AT_SYMLINK_NOFOLLOW: CInt { AT_SYMLINK_NOFOLLOW }
2020
@_alwaysEmitIntoClient
2121
internal var _AT_SYMLINK_FOLLOW: CInt { AT_SYMLINK_FOLLOW }
22-
#endif
2322
@_alwaysEmitIntoClient
2423
internal var _AT_REMOVEDIR: CInt { AT_REMOVEDIR }
24+
#endif
2525
#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS)
2626
@_alwaysEmitIntoClient
2727
internal var _AT_REALDEV: CInt { AT_REALDEV }
@@ -37,17 +37,20 @@ internal var _AT_NO_AUTOMOUNT: CInt { AT_NO_AUTOMOUNT }
3737
#endif
3838
*/
3939

40+
#if !os(Windows)
4041
@_alwaysEmitIntoClient
4142
internal var _F_GETFL: CInt { F_GETFL }
4243
@_alwaysEmitIntoClient
4344
internal var _O_DSYNC: CInt { O_DSYNC }
4445
@_alwaysEmitIntoClient
4546
internal var _O_SYNC: CInt { O_SYNC }
47+
#endif
4648
#if os(Linux)
4749
@_alwaysEmitIntoClient
4850
internal var _O_RSYNC: CInt { O_RSYNC }
4951
#endif
5052

53+
#if !os(Windows)
5154
@_alwaysEmitIntoClient
5255
internal var _UTIME_NOW: CInt {
5356
#if os(Linux)
@@ -89,23 +92,26 @@ internal var _DT_LNK: CInt { CInt(DT_LNK) }
8992
internal var _DT_SOCK: CInt { CInt(DT_SOCK) }
9093
@_alwaysEmitIntoClient
9194
internal var _DT_WHT: CInt { CInt(DT_WHT) }
95+
#endif
9296

9397
@_alwaysEmitIntoClient
9498
internal var _S_IFMT: CInterop.Mode { S_IFMT }
9599
@_alwaysEmitIntoClient
96-
internal var _S_IFIFO: CInterop.Mode { S_IFIFO }
97-
@_alwaysEmitIntoClient
98100
internal var _S_IFCHR: CInterop.Mode { S_IFCHR }
99101
@_alwaysEmitIntoClient
100102
internal var _S_IFDIR: CInterop.Mode { S_IFDIR }
101103
@_alwaysEmitIntoClient
102-
internal var _S_IFBLK: CInterop.Mode { S_IFBLK }
103-
@_alwaysEmitIntoClient
104104
internal var _S_IFREG: CInterop.Mode { S_IFREG }
105+
#if !os(Windows)
106+
@_alwaysEmitIntoClient
107+
internal var _S_IFIFO: CInterop.Mode { S_IFIFO }
108+
@_alwaysEmitIntoClient
109+
internal var _S_IFBLK: CInterop.Mode { S_IFBLK }
105110
@_alwaysEmitIntoClient
106111
internal var _S_IFLNK: CInterop.Mode { S_IFLNK }
107112
@_alwaysEmitIntoClient
108113
internal var _S_IFSOCK: CInterop.Mode { S_IFSOCK }
114+
#endif
109115

110116
#if os(Linux)
111117
@_alwaysEmitIntoClient

Sources/SystemExtras/Syscalls.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@ internal func system_symlinkat(
9090
return symlinkat(oldPath, newDirFd, newPath)
9191
}
9292

93+
// ucrt does not provide `opendir` API
94+
#if !os(Windows)
95+
9396
extension CInterop {
9497
#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS)
9598
public typealias DirP = UnsafeMutablePointer<DIR>
@@ -109,6 +112,7 @@ internal func system_fdopendir(_ fd: Int32) -> CInterop.DirP? {
109112
internal func system_readdir(_ dirp: CInterop.DirP) -> UnsafeMutablePointer<dirent>? {
110113
return readdir(dirp)
111114
}
115+
#endif
112116

113117
#if !os(Windows)
114118

Sources/WasmKit/Execution/Runtime/Profiler.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#if canImport(SystemExtras)
12
import SystemExtras
23
import SystemPackage
34

@@ -116,3 +117,5 @@ private enum JSON {
116117
return output
117118
}
118119
}
120+
121+
#endif

0 commit comments

Comments
 (0)