@@ -761,6 +761,7 @@ public struct SwiftSDK: Equatable {
761761 ) throws -> SwiftSDK {
762762 var swiftSDK : SwiftSDK
763763 var isBasedOnHostSDK : Bool = false
764+ var loadedToolsetPaths : Bool = false
764765
765766 // Create custom toolchain if present.
766767 if let customDestination = customCompileDestination {
@@ -795,7 +796,9 @@ public struct SwiftSDK: Equatable {
795796 hostTimeTriple: hostTriple,
796797 swiftSDKBundleStore: store
797798 )
799+ let bundleToolsetPaths = swiftSDK. pathsConfiguration. toolsetPaths ?? [ ]
798800 try configurationStore. readConfiguration ( sdkID: ID, sdk: & swiftSDK)
801+ loadedToolsetPaths = !bundleToolsetPaths. elementsEqual ( swiftSDK. pathsConfiguration. toolsetPaths ?? [ ] )
799802 } catch {
800803 // Do nothing to override if a custom SDK config is not found.
801804 observabilityScope. emit (
@@ -819,6 +822,28 @@ public struct SwiftSDK: Equatable {
819822 isBasedOnHostSDK = true
820823 }
821824
825+ // Override the current toolset in the SDK with a custom config.
826+ if loadedToolsetPaths, let toolpaths = swiftSDK. pathsConfiguration. toolsetPaths {
827+ let wasmKitProperties = Toolset . ToolProperties (
828+ path: store. hostToolchainBinDir. appending ( " wasmkit " ) ,
829+ extraCLIOptions: [ " run " , " --dir " , " . " ]
830+ )
831+ let defaultTools : [ Toolset . KnownTool : Toolset . ToolProperties ] = if swiftSDK. targetTriple!. isWasm {
832+ [ . debugger: wasmKitProperties, . testRunner: wasmKitProperties]
833+ } else {
834+ [ : ]
835+ }
836+ swiftSDK. toolset = try toolpaths. reduce ( into: Toolset ( knownTools: defaultTools, rootPaths: [ ] ) ) {
837+ try $0. merge (
838+ with: Toolset (
839+ from: $1,
840+ at: fileSystem,
841+ observabilityScope
842+ )
843+ )
844+ }
845+ }
846+
822847 if !customToolsets. isEmpty {
823848 for toolsetPath in customToolsets {
824849 let toolset = try Toolset ( from: toolsetPath, at: fileSystem, observabilityScope)
0 commit comments