diff --git a/Sources/Build/ManifestBuilder.swift b/Sources/Build/ManifestBuilder.swift index 9e163657374..2e9fd35ce82 100644 --- a/Sources/Build/ManifestBuilder.swift +++ b/Sources/Build/ManifestBuilder.swift @@ -339,11 +339,12 @@ extension LLBuildManifestBuilder { private func addModuleWrapCmd(_ target: SwiftTargetBuildDescription) { // Add commands to perform the module wrapping Swift modules when debugging statergy is `modulewrap`. guard buildParameters.debuggingStrategy == .modulewrap else { return } - let moduleWrapArgs = [ + var moduleWrapArgs = [ target.buildParameters.toolchain.swiftCompiler.pathString, "-modulewrap", target.moduleOutputPath.pathString, "-o", target.wrappedModuleOutputPath.pathString ] + moduleWrapArgs += buildParameters.targetTripleArgs(for: target.target) manifest.addShellCmd( name: target.wrappedModuleOutputPath.pathString, description: "Wrapping AST for \(target.target.name) for debugging", diff --git a/Sources/PackageDescription/SupportedPlatforms.swift b/Sources/PackageDescription/SupportedPlatforms.swift index f3cb312ceff..058de7e3ca0 100644 --- a/Sources/PackageDescription/SupportedPlatforms.swift +++ b/Sources/PackageDescription/SupportedPlatforms.swift @@ -41,6 +41,10 @@ public struct Platform: Encodable { /// The Android platform @available(_PackageDescription, introduced: 5.2) public static let android: Platform = Platform(name: "android") + + /// The WASI platform + @available(_PackageDescription, introduced: 999.0) + public static let wasi: Platform = Platform(name: "wasi") } /// A platform that the Swift package supports. diff --git a/Sources/PackageModel/Platform.swift b/Sources/PackageModel/Platform.swift index df328c6a7a5..40fe3d436f8 100644 --- a/Sources/PackageModel/Platform.swift +++ b/Sources/PackageModel/Platform.swift @@ -29,7 +29,7 @@ public final class PlatformRegistry { /// The static list of known platforms. private static var _knownPlatforms: [Platform] { - return [.macOS, .iOS, .tvOS, .watchOS, .linux, .android] + return [.macOS, .iOS, .tvOS, .watchOS, .linux, .android, .wasi] } } @@ -57,6 +57,8 @@ public struct Platform: Equatable, Hashable { public static let linux: Platform = Platform(name: "linux", oldestSupportedVersion: .unknown) public static let android: Platform = Platform(name: "android", oldestSupportedVersion: .unknown) public static let windows: Platform = Platform(name: "windows", oldestSupportedVersion: .unknown) + public static let wasi: Platform = Platform(name: "wasi", oldestSupportedVersion: .unknown) + } /// Represents a platform version. diff --git a/Sources/SPMBuildCore/BuildParameters.swift b/Sources/SPMBuildCore/BuildParameters.swift index e603ac61faa..09dae782c6f 100644 --- a/Sources/SPMBuildCore/BuildParameters.swift +++ b/Sources/SPMBuildCore/BuildParameters.swift @@ -99,6 +99,8 @@ public struct BuildParameters: Encodable { return .macOS } else if self.triple.isAndroid() { return .android + } else if self.triple.isWASI() { + return .wasi } else { return .linux } diff --git a/Sources/SPMBuildCore/Triple.swift b/Sources/SPMBuildCore/Triple.swift index 2c23ad92b12..757185ad777 100644 --- a/Sources/SPMBuildCore/Triple.swift +++ b/Sources/SPMBuildCore/Triple.swift @@ -40,6 +40,7 @@ public struct Triple: Encodable, Equatable { case aarch64 case armv7 case arm + case wasm32 } public enum Vendor: String, Encodable { @@ -52,12 +53,14 @@ public struct Triple: Encodable, Equatable { case macOS = "macosx" case linux case windows + case wasi fileprivate static let allKnown:[OS] = [ .darwin, .macOS, .linux, - .windows + .windows, + .wasi, ] } @@ -125,6 +128,10 @@ public struct Triple: Encodable, Equatable { return os == .windows } + public func isWASI() -> Bool { + return os == .wasi + } + /// Returns the triple string for the given platform version. /// /// This is currently meant for Apple platforms only. @@ -165,6 +172,8 @@ extension Triple { return ".so" case .windows: return ".dll" + case .wasi: + fatalError("WebAssembly/WASI doesn't support dynamic library yet") } } @@ -174,6 +183,8 @@ extension Triple { return "" case .linux: return "" + case .wasi: + return "" case .windows: return ".exe" } diff --git a/Tests/BuildTests/BuildPlanTests.swift b/Tests/BuildTests/BuildPlanTests.swift index 4d667e3efd7..964baff482f 100644 --- a/Tests/BuildTests/BuildPlanTests.swift +++ b/Tests/BuildTests/BuildPlanTests.swift @@ -2130,14 +2130,14 @@ final class BuildPlanTests: XCTestCase { inputs: ["/path/to/build/debug/exe.swiftmodule"] outputs: ["/path/to/build/debug/exe.build/exe.swiftmodule.o"] description: "Wrapping AST for exe for debugging" - args: ["/fake/path/to/swiftc","-modulewrap","/path/to/build/debug/exe.swiftmodule","-o","/path/to/build/debug/exe.build/exe.swiftmodule.o"] + args: ["/fake/path/to/swiftc","-modulewrap","/path/to/build/debug/exe.swiftmodule","-o","/path/to/build/debug/exe.build/exe.swiftmodule.o","-target","x86_64-unknown-linux-gnu"] "/path/to/build/debug/lib.build/lib.swiftmodule.o": tool: shell inputs: ["/path/to/build/debug/lib.swiftmodule"] outputs: ["/path/to/build/debug/lib.build/lib.swiftmodule.o"] description: "Wrapping AST for lib for debugging" - args: ["/fake/path/to/swiftc","-modulewrap","/path/to/build/debug/lib.swiftmodule","-o","/path/to/build/debug/lib.build/lib.swiftmodule.o"] + args: ["/fake/path/to/swiftc","-modulewrap","/path/to/build/debug/lib.swiftmodule","-o","/path/to/build/debug/lib.build/lib.swiftmodule.o","-target","x86_64-unknown-linux-gnu"] """)) } } diff --git a/Tests/PackageLoadingTests/PackageBuilderTests.swift b/Tests/PackageLoadingTests/PackageBuilderTests.swift index ac822ed4acf..c6a7b392b89 100644 --- a/Tests/PackageLoadingTests/PackageBuilderTests.swift +++ b/Tests/PackageLoadingTests/PackageBuilderTests.swift @@ -1524,6 +1524,7 @@ class PackageBuilderTests: XCTestCase { "tvos": "9.0", "watchos": "2.0", "android": "0.0", + "wasi": "0.0", ] PackageBuilderTester(manifest, in: fs) { package, _ in @@ -1560,6 +1561,7 @@ class PackageBuilderTests: XCTestCase { "ios": "8.0", "watchos": "2.0", "android": "0.0", + "wasi": "0.0", ] PackageBuilderTester(manifest, in: fs) { package, _ in