Skip to content

Commit 0c1a342

Browse files
authored
Merge pull request #104 from krzyzanowskim/marcin/usertoolchain
Use SPM UserToolchain. …
2 parents 4d30353 + bf1b2f3 commit 0c1a342

File tree

1 file changed

+6
-90
lines changed

1 file changed

+6
-90
lines changed

Sources/SKSwiftPMWorkspace/SwiftPMWorkspace.swift

Lines changed: 6 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ public final class SwiftPMWorkspace {
4242
var packageGraph: PackageGraph
4343
let workspace: Workspace
4444
let buildParameters: BuildParameters
45-
let toolchainRegistry: ToolchainRegistry
4645
let fileSystem: FileSystem
4746

4847
var fileToTarget: [AbsolutePath: TargetBuildDescription] = [:]
@@ -62,64 +61,28 @@ public final class SwiftPMWorkspace {
6261
buildSetup: BuildSetup) throws
6362
{
6463
self.workspacePath = workspacePath
65-
self.toolchainRegistry = toolchainRegistry
6664
self.fileSystem = fileSystem
6765

6866
guard let packageRoot = findPackageDirectory(containing: workspacePath, fileSystem) else {
6967
throw Error.noManifest(workspacePath: workspacePath)
7068
}
7169

72-
guard var swiftPMToolchain = toolchainRegistry.swiftPMHost else {
73-
throw Error.cannotDetermineHostToolchain
74-
}
75-
7670
self.packageRoot = packageRoot
7771

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
10974
}
11075

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)
11578

11679
let buildPath: AbsolutePath = buildSetup.path ?? packageRoot.appending(component: ".build")
11780

11881
self.workspace = Workspace(
11982
dataPath: buildPath,
12083
editablesPath: packageRoot.appending(component: "Packages"),
12184
pinsFile: packageRoot.appending(component: "Package.resolved"),
122-
manifestLoader: ManifestLoader(manifestResources: swiftPMToolchain),
85+
manifestLoader: ManifestLoader(manifestResources: toolchain.manifestResources, cacheDir: buildPath),
12386
delegate: BuildSettingProviderWorkspaceDelegate(),
12487
fileSystem: fileSystem,
12588
skipUpdate: true)
@@ -137,7 +100,7 @@ public final class SwiftPMWorkspace {
137100
self.buildParameters = BuildParameters(
138101
dataPath: buildPath.appending(component: triple.tripleString),
139102
configuration: swiftPMConfiguration,
140-
toolchain: swiftPMToolchain,
103+
toolchain: toolchain,
141104
flags: buildSetup.flags)
142105

143106
self.packageGraph = PackageGraph(rootPackages: [], requiredDependencies: [])
@@ -392,53 +355,6 @@ extension SwiftPMWorkspace {
392355
}
393356
}
394357

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-
442358
/// Find a Swift Package root directory that contains the given path, if any.
443359
private func findPackageDirectory(
444360
containing path: AbsolutePath,

0 commit comments

Comments
 (0)