Skip to content

6.2: Use WasmKit by default for Wasm triples in toolsets #8692

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: release/6.2
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions Sources/CoreCommands/SwiftCommandState.swift
Original file line number Diff line number Diff line change
Expand Up @@ -927,12 +927,6 @@ public final class SwiftCommandState {
private lazy var _targetToolchain: Result<UserToolchain, Swift.Error> = {
let swiftSDK: SwiftSDK
let hostSwiftSDK: SwiftSDK
let store = SwiftSDKBundleStore(
swiftSDKsDirectory: self.sharedSwiftSDKsDirectory,
fileSystem: self.fileSystem,
observabilityScope: self.observabilityScope,
outputHandler: { print($0.description) }
)
do {
let hostToolchain = try _hostToolchain.get()
hostSwiftSDK = hostToolchain.swiftSDK
Expand All @@ -942,6 +936,15 @@ public final class SwiftCommandState {
warning: "`--experimental-swift-sdk` is deprecated and will be removed in a future version of SwiftPM. Use `--swift-sdk` instead."
)
}

let store = SwiftSDKBundleStore(
swiftSDKsDirectory: self.sharedSwiftSDKsDirectory,
hostToolchainBinDir: hostToolchain.swiftCompilerPath.parentDirectory,
fileSystem: self.fileSystem,
observabilityScope: self.observabilityScope,
outputHandler: { print($0.description) }
)

swiftSDK = try SwiftSDK.deriveTargetSwiftSDK(
hostSwiftSDK: hostSwiftSDK,
hostTriple: hostToolchain.targetTriple,
Expand Down
23 changes: 21 additions & 2 deletions Sources/PackageModel/SwiftSDKs/SwiftSDK.swift
Original file line number Diff line number Diff line change
Expand Up @@ -730,6 +730,7 @@ public struct SwiftSDK: Equatable {
if let customDestination = customCompileDestination {
let swiftSDKs = try SwiftSDK.decode(
fromFile: customDestination,
hostToolchainBinDir: store.hostToolchainBinDir,
fileSystem: fileSystem,
observabilityScope: observabilityScope
)
Expand Down Expand Up @@ -853,6 +854,7 @@ extension SwiftSDK {
/// Load a ``SwiftSDK`` description from a JSON representation from disk.
public static func decode(
fromFile path: Basics.AbsolutePath,
hostToolchainBinDir: Basics.AbsolutePath,
fileSystem: FileSystem,
observabilityScope: ObservabilityScope
) throws -> [SwiftSDK] {
Expand All @@ -862,6 +864,7 @@ extension SwiftSDK {
return try Self.decode(
semanticVersion: version,
fromFile: path,
hostToolchainBinDir: hostToolchainBinDir,
fileSystem: fileSystem,
decoder: decoder,
observabilityScope: observabilityScope
Expand All @@ -876,10 +879,16 @@ extension SwiftSDK {
private static func decode(
semanticVersion: SemanticVersionInfo,
fromFile path: Basics.AbsolutePath,
hostToolchainBinDir: Basics.AbsolutePath,
fileSystem: FileSystem,
decoder: JSONDecoder,
observabilityScope: ObservabilityScope
) throws -> [SwiftSDK] {
let wasmKitProperties = Toolset.ToolProperties(
path: hostToolchainBinDir.appending("wasmkit"),
extraCLIOptions: ["run"]
)

switch semanticVersion.schemaVersion {
case Version(3, 0, 0):
let swiftSDKs = try decoder.decode(path: path, fileSystem: fileSystem, as: SerializedDestinationV3.self)
Expand All @@ -889,7 +898,12 @@ extension SwiftSDK {
let triple = try Triple(triple)

let pathStrings = properties.toolsetPaths ?? []
let toolset = try pathStrings.reduce(into: Toolset(knownTools: [:], rootPaths: [])) {
let defaultTools: [Toolset.KnownTool: Toolset.ToolProperties] = if triple.isWasm {
[.debugger: wasmKitProperties, .testRunner: wasmKitProperties]
} else {
[:]
}
let toolset = try pathStrings.reduce(into: Toolset(knownTools: defaultTools, rootPaths: [])) {
try $0.merge(
with: Toolset(
from: .init(validating: $1, relativeTo: swiftSDKDirectory),
Expand All @@ -914,8 +928,13 @@ extension SwiftSDK {
return try swiftSDKs.targetTriples.map { triple, properties in
let triple = try Triple(triple)

let defaultTools: [Toolset.KnownTool: Toolset.ToolProperties] = if triple.isWasm {
[.debugger: wasmKitProperties, .testRunner: wasmKitProperties]
} else {
[:]
}
let pathStrings = properties.toolsetPaths ?? []
let toolset = try pathStrings.reduce(into: Toolset(knownTools: [:], rootPaths: [])) {
let toolset = try pathStrings.reduce(into: Toolset(knownTools: defaultTools, rootPaths: [])) {
try $0.merge(
with: Toolset(
from: .init(validating: $1, relativeTo: swiftSDKDirectory),
Expand Down
9 changes: 8 additions & 1 deletion Sources/PackageModel/SwiftSDKs/SwiftSDKBundleStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ public final class SwiftSDKBundleStore {
/// Directory in which Swift SDKs bundles are stored.
let swiftSDKsDirectory: AbsolutePath

/// `usr/bin` directory of the "root" toolchain that includes this currently running SwiftPM instance.
let hostToolchainBinDir: AbsolutePath

/// File system instance used for reading from and writing to SDK bundles stored on it.
let fileSystem: any FileSystem

Expand All @@ -77,12 +80,14 @@ public final class SwiftSDKBundleStore {

public init(
swiftSDKsDirectory: AbsolutePath,
hostToolchainBinDir: AbsolutePath,
fileSystem: any FileSystem,
observabilityScope: ObservabilityScope,
outputHandler: @escaping (Output) -> Void,
downloadProgressAnimation: ProgressAnimationProtocol? = nil
) {
self.swiftSDKsDirectory = swiftSDKsDirectory
self.hostToolchainBinDir = hostToolchainBinDir
self.fileSystem = fileSystem
self.observabilityScope = observabilityScope
self.outputHandler = outputHandler
Expand Down Expand Up @@ -394,7 +399,9 @@ public final class SwiftSDKBundleStore {

do {
let swiftSDKs = try SwiftSDK.decode(
fromFile: variantConfigurationPath, fileSystem: fileSystem,
fromFile: variantConfigurationPath,
hostToolchainBinDir: self.hostToolchainBinDir,
fileSystem: fileSystem,
observabilityScope: observabilityScope
)

Expand Down
2 changes: 1 addition & 1 deletion Sources/PackageModel/Toolset.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public struct Toolset: Equatable {
/// Properties of a known tool in a ``Toolset``.
public struct ToolProperties: Equatable {
/// Absolute path to the tool on the filesystem. If absent, implies a default tool is used.
public fileprivate(set) var path: AbsolutePath?
public internal(set) var path: AbsolutePath?

/// Command-line options to be passed to the tool when it's invoked.
public internal(set) var extraCLIOptions: [String]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,15 @@ protocol ConfigurationSubcommand: SwiftSDKSubcommand {
extension ConfigurationSubcommand {
func run(
hostTriple: Triple,
hostToolchain: UserToolchain,
_ swiftSDKsDirectory: AbsolutePath,
_ observabilityScope: ObservabilityScope
) throws {
fputs("warning: `swift sdk configuration` command is deprecated and will be removed in a future version of SwiftPM. Use `swift sdk configure` instead.\n", stderr)

let bundleStore = SwiftSDKBundleStore(
swiftSDKsDirectory: swiftSDKsDirectory,
hostToolchainBinDir: hostToolchain.swiftCompilerPath.parentDirectory,
fileSystem: self.fileSystem,
observabilityScope: observabilityScope,
outputHandler: { print($0) }
Expand Down
1 change: 1 addition & 0 deletions Sources/SwiftSDKCommand/ConfigureSwiftSDK.swift
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ struct ConfigureSwiftSDK: AsyncParsableCommand {
do {
let bundleStore = SwiftSDKBundleStore(
swiftSDKsDirectory: swiftSDKsDirectory,
hostToolchainBinDir: hostToolchain.swiftCompilerPath.parentDirectory,
fileSystem: self.fileSystem,
observabilityScope: observabilityScope,
outputHandler: { print($0) }
Expand Down
2 changes: 2 additions & 0 deletions Sources/SwiftSDKCommand/InstallSwiftSDK.swift
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ struct InstallSwiftSDK: SwiftSDKSubcommand {

func run(
hostTriple: Triple,
hostToolchain: UserToolchain,
_ swiftSDKsDirectory: AbsolutePath,
_ observabilityScope: ObservabilityScope
) async throws {
Expand All @@ -58,6 +59,7 @@ struct InstallSwiftSDK: SwiftSDKSubcommand {

let store = SwiftSDKBundleStore(
swiftSDKsDirectory: swiftSDKsDirectory,
hostToolchainBinDir: hostToolchain.swiftCompilerPath.parentDirectory,
fileSystem: self.fileSystem,
observabilityScope: observabilityScope,
outputHandler: { print($0.description) },
Expand Down
2 changes: 2 additions & 0 deletions Sources/SwiftSDKCommand/ListSwiftSDKs.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,13 @@ package struct ListSwiftSDKs: SwiftSDKSubcommand {

func run(
hostTriple: Triple,
hostToolchain: UserToolchain,
_ swiftSDKsDirectory: AbsolutePath,
_ observabilityScope: ObservabilityScope
) throws {
let store = SwiftSDKBundleStore(
swiftSDKsDirectory: swiftSDKsDirectory,
hostToolchainBinDir: hostToolchain.swiftCompilerPath.parentDirectory,
fileSystem: fileSystem,
observabilityScope: observabilityScope,
outputHandler: { print($0.description) }
Expand Down
2 changes: 2 additions & 0 deletions Sources/SwiftSDKCommand/RemoveSwiftSDK.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ package struct RemoveSwiftSDK: SwiftSDKSubcommand {

func run(
hostTriple: Triple,
hostToolchain: UserToolchain,
_ swiftSDKsDirectory: Basics.AbsolutePath,
_ observabilityScope: ObservabilityScope
) async throws {
Expand All @@ -47,6 +48,7 @@ package struct RemoveSwiftSDK: SwiftSDKSubcommand {
} else {
let bundleStore = SwiftSDKBundleStore(
swiftSDKsDirectory: swiftSDKsDirectory,
hostToolchainBinDir: hostToolchain.swiftCompilerPath.parentDirectory,
fileSystem: self.fileSystem,
observabilityScope: observabilityScope,
outputHandler: { print($0) }
Expand Down
3 changes: 2 additions & 1 deletion Sources/SwiftSDKCommand/SwiftSDKSubcommand.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ protocol SwiftSDKSubcommand: AsyncParsableCommand {
/// - observabilityScope: observability scope used for logging.
func run(
hostTriple: Triple,
hostToolchain: UserToolchain,
_ swiftSDKsDirectory: AbsolutePath,
_ observabilityScope: ObservabilityScope
) async throws
Expand Down Expand Up @@ -71,7 +72,7 @@ extension SwiftSDKSubcommand {

var commandError: Error? = nil
do {
try await self.run(hostTriple: triple, swiftSDKsDirectory, observabilityScope)
try await self.run(hostTriple: triple, hostToolchain: hostToolchain, swiftSDKsDirectory, observabilityScope)
if observabilityScope.errorsReported {
throw ExitCode.failure
}
Expand Down
7 changes: 7 additions & 0 deletions Tests/PackageModelTests/SwiftSDKBundleTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ final class SwiftSDKBundleTests: XCTestCase {
var output = [SwiftSDKBundleStore.Output]()
let store = SwiftSDKBundleStore(
swiftSDKsDirectory: tmpDir,
hostToolchainBinDir: tmpDir,
fileSystem: localFileSystem,
observabilityScope: observabilityScope,
outputHandler: {
Expand Down Expand Up @@ -227,6 +228,7 @@ final class SwiftSDKBundleTests: XCTestCase {
var output = [SwiftSDKBundleStore.Output]()
let store = SwiftSDKBundleStore(
swiftSDKsDirectory: swiftSDKsDirectory,
hostToolchainBinDir: "/tmp",
fileSystem: fileSystem,
observabilityScope: system.topScope,
outputHandler: {
Expand Down Expand Up @@ -319,6 +321,7 @@ final class SwiftSDKBundleTests: XCTestCase {
var output = [SwiftSDKBundleStore.Output]()
let store = SwiftSDKBundleStore(
swiftSDKsDirectory: swiftSDKsDirectory,
hostToolchainBinDir: "/tmp",
fileSystem: fileSystem,
observabilityScope: system.topScope,
outputHandler: {
Expand Down Expand Up @@ -359,6 +362,7 @@ final class SwiftSDKBundleTests: XCTestCase {
var output = [SwiftSDKBundleStore.Output]()
let store = SwiftSDKBundleStore(
swiftSDKsDirectory: swiftSDKsDirectory,
hostToolchainBinDir: "/tmp",
fileSystem: fileSystem,
observabilityScope: system.topScope,
outputHandler: {
Expand Down Expand Up @@ -400,9 +404,11 @@ final class SwiftSDKBundleTests: XCTestCase {
let system = ObservabilitySystem.makeForTesting()
let hostSwiftSDK = try SwiftSDK.hostSwiftSDK(environment: [:])
let hostTriple = try! Triple("arm64-apple-macosx14.0")
let hostToolchainBinDir = AbsolutePath("/tmp")
let archiver = MockArchiver()
let store = SwiftSDKBundleStore(
swiftSDKsDirectory: swiftSDKsDirectory,
hostToolchainBinDir: hostToolchainBinDir,
fileSystem: fileSystem,
observabilityScope: system.topScope,
outputHandler: { _ in }
Expand Down Expand Up @@ -518,6 +524,7 @@ final class SwiftSDKBundleTests: XCTestCase {
var output = [SwiftSDKBundleStore.Output]()
let store = SwiftSDKBundleStore(
swiftSDKsDirectory: swiftSDKsDirectory,
hostToolchainBinDir: "/tmp",
fileSystem: fileSystem,
observabilityScope: system.topScope,
outputHandler: { output.append($0) }
Expand Down
Loading