@@ -42,7 +42,6 @@ public final class SwiftPMWorkspace {
42
42
var packageGraph : PackageGraph
43
43
let workspace : Workspace
44
44
let buildParameters : BuildParameters
45
- let toolchainRegistry : ToolchainRegistry
46
45
let fileSystem : FileSystem
47
46
48
47
var fileToTarget : [ AbsolutePath : TargetBuildDescription ] = [ : ]
@@ -62,64 +61,28 @@ public final class SwiftPMWorkspace {
62
61
buildSetup: BuildSetup ) throws
63
62
{
64
63
self . workspacePath = workspacePath
65
- self . toolchainRegistry = toolchainRegistry
66
64
self . fileSystem = fileSystem
67
65
68
66
guard let packageRoot = findPackageDirectory ( containing: workspacePath, fileSystem) else {
69
67
throw Error . noManifest ( workspacePath: workspacePath)
70
68
}
71
69
72
- guard var swiftPMToolchain = toolchainRegistry. swiftPMHost else {
73
- throw Error . cannotDetermineHostToolchain
74
- }
75
-
76
70
self . packageRoot = packageRoot
77
71
78
- // FIXME: duplicating code from UserToolchain setup in swiftpm.
79
- var sdk : AbsolutePath ? = nil
80
- var platformPath : AbsolutePath ? = nil
81
-
82
- if case . darwin? = Platform . currentPlatform {
83
- if let path = try ? Process . checkNonZeroExit ( args:
84
- " /usr/bin/xcrun " , " --show-sdk-path " , " --sdk " , " macosx " )
85
- {
86
- sdk = try ? AbsolutePath ( validating: path. spm_chomp ( ) )
87
- }
88
- if let path = try ? Process . checkNonZeroExit ( args:
89
- " /usr/bin/xcrun " , " --show-sdk-platform-path " , " --sdk " , " macosx " )
90
- {
91
- platformPath = try ? AbsolutePath ( validating: path. spm_chomp ( ) )
92
- }
93
- }
94
-
95
- var extraSwiftFlags : [ String ] = [ ]
96
- var extraClangFlags : [ String ] = [ ]
97
- if let sdk = sdk {
98
- extraSwiftFlags += [ " -sdk " , sdk. pathString]
99
- extraClangFlags += [ " -isysroot " , sdk. pathString]
100
- }
101
-
102
- if let platformPath = platformPath {
103
- let flags = [
104
- " -F " ,
105
- platformPath. appending ( components: " Developer " , " Library " , " Frameworks " ) . pathString
106
- ]
107
- extraSwiftFlags += flags
108
- extraClangFlags += flags
72
+ guard let destinationToolchainBinDir = toolchainRegistry. default? . path? . appending ( components: " usr " , " bin " ) else {
73
+ throw Error . cannotDetermineHostToolchain
109
74
}
110
75
111
- swiftPMToolchain. sdkRoot = sdk
112
- swiftPMToolchain. extraCCFlags = extraClangFlags
113
- swiftPMToolchain. extraSwiftCFlags = extraSwiftFlags
114
- swiftPMToolchain. extraCPPFlags = extraClangFlags
76
+ let destination = try Destination . hostDestination ( destinationToolchainBinDir)
77
+ let toolchain = try UserToolchain ( destination: destination)
115
78
116
79
let buildPath : AbsolutePath = buildSetup. path ?? packageRoot. appending ( component: " .build " )
117
80
118
81
self . workspace = Workspace (
119
82
dataPath: buildPath,
120
83
editablesPath: packageRoot. appending ( component: " Packages " ) ,
121
84
pinsFile: packageRoot. appending ( component: " Package.resolved " ) ,
122
- manifestLoader: ManifestLoader ( manifestResources: swiftPMToolchain ) ,
85
+ manifestLoader: ManifestLoader ( manifestResources: toolchain . manifestResources , cacheDir : buildPath ) ,
123
86
delegate: BuildSettingProviderWorkspaceDelegate ( ) ,
124
87
fileSystem: fileSystem,
125
88
skipUpdate: true )
@@ -137,7 +100,7 @@ public final class SwiftPMWorkspace {
137
100
self . buildParameters = BuildParameters (
138
101
dataPath: buildPath. appending ( component: triple. tripleString) ,
139
102
configuration: swiftPMConfiguration,
140
- toolchain: swiftPMToolchain ,
103
+ toolchain: toolchain ,
141
104
flags: buildSetup. flags)
142
105
143
106
self . packageGraph = PackageGraph ( rootPackages: [ ] , requiredDependencies: [ ] )
@@ -392,53 +355,6 @@ extension SwiftPMWorkspace {
392
355
}
393
356
}
394
357
395
- /// A SwiftPM-compatible toolchain.
396
- ///
397
- /// Appropriate for both building a pacakge (Build.Toolchain) and for loading the package manifest
398
- /// (ManifestResourceProvider).
399
- private struct SwiftPMToolchain : Build . Toolchain , ManifestResourceProvider {
400
- var swiftCompiler : AbsolutePath
401
- var clangCompiler : AbsolutePath
402
- var libDir : AbsolutePath
403
- var sdkRoot : AbsolutePath ?
404
- var extraCCFlags : [ String ]
405
- var extraSwiftCFlags : [ String ]
406
- var extraCPPFlags : [ String ]
407
- var dynamicLibraryExtension : String
408
-
409
- func getClangCompiler( ) throws -> AbsolutePath { return clangCompiler }
410
- }
411
-
412
- extension ToolchainRegistry {
413
-
414
- /// A toolchain appropriate for using to load swiftpm manifests.
415
- fileprivate var swiftPMHost : SwiftPMToolchain ? {
416
- var swiftc : AbsolutePath ? = self . default? . swiftc
417
- var clang : AbsolutePath ? = self . default? . clang
418
- if swiftc == nil {
419
- swiftc = toolchains. first ( where: { $0. swiftc != nil } ) ? . swiftc
420
- }
421
- if clang == nil {
422
- clang = toolchains. first ( where: { $0. clang != nil } ) ? . clang
423
- }
424
-
425
- if swiftc == nil || clang == nil {
426
- return nil
427
- }
428
-
429
- return SwiftPMToolchain (
430
- swiftCompiler: swiftc!,
431
- clangCompiler: clang!,
432
- libDir: swiftc!. parentDirectory. parentDirectory. appending ( components: " lib " , " swift " , " pm " ) ,
433
- sdkRoot: nil ,
434
- extraCCFlags: [ ] ,
435
- extraSwiftCFlags: [ ] ,
436
- extraCPPFlags: [ ] ,
437
- dynamicLibraryExtension: Platform . currentPlatform? . dynamicLibraryExtension ?? " so "
438
- )
439
- }
440
- }
441
-
442
358
/// Find a Swift Package root directory that contains the given path, if any.
443
359
private func findPackageDirectory(
444
360
containing path: AbsolutePath ,
0 commit comments