From 2548c5e56058b25e66130acaec8b8ea8a7390a7a Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Mon, 2 Mar 2020 20:46:47 +0900 Subject: [PATCH 1/4] Add wasm32 and wasi variant --- Sources/PackageDescription/SupportedPlatforms.swift | 4 ++++ Sources/PackageModel/Platform.swift | 4 +++- Sources/SPMBuildCore/BuildParameters.swift | 2 ++ Sources/SPMBuildCore/Triple.swift | 13 ++++++++++++- 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/Sources/PackageDescription/SupportedPlatforms.swift b/Sources/PackageDescription/SupportedPlatforms.swift index f3cb312ceff..afb2e74ce9e 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: 5.2) + 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" } From 6d1607552ffc459114ea81840278ad2a20b29e83 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Mon, 2 Mar 2020 20:47:26 +0900 Subject: [PATCH 2/4] Pass target option for modulewrap command invocation --- Sources/Build/ManifestBuilder.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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", From eead962703bdcdb0ae07caf6c2ab302ce73229d3 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Fri, 6 Mar 2020 08:11:21 +0900 Subject: [PATCH 3/4] Replace introduced version of wasi variant for the moment --- Sources/PackageDescription/SupportedPlatforms.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/PackageDescription/SupportedPlatforms.swift b/Sources/PackageDescription/SupportedPlatforms.swift index afb2e74ce9e..058de7e3ca0 100644 --- a/Sources/PackageDescription/SupportedPlatforms.swift +++ b/Sources/PackageDescription/SupportedPlatforms.swift @@ -43,7 +43,7 @@ public struct Platform: Encodable { public static let android: Platform = Platform(name: "android") /// The WASI platform - @available(_PackageDescription, introduced: 5.2) + @available(_PackageDescription, introduced: 999.0) public static let wasi: Platform = Platform(name: "wasi") } From 9ed7deed37bfd6bfe0490efeb443a287a02226de Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Fri, 6 Mar 2020 10:08:36 +0900 Subject: [PATCH 4/4] Fix test cases for WebAssembly Support --- Tests/BuildTests/BuildPlanTests.swift | 4 ++-- Tests/PackageLoadingTests/PackageBuilderTests.swift | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) 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