Skip to content

Commit 346beea

Browse files
committed
[BuildManifest] NFC: Route uses of getCommandName and getLLBuild* through product/target descriptions
Instead of looking through the build description and passing data from it down to underlying module/product, let's provided convenient APIs directly on build descriptions.
1 parent 356052a commit 346beea

File tree

5 files changed

+71
-48
lines changed

5 files changed

+71
-48
lines changed

Sources/Build/BuildManifest/LLBuildManifestBuilder+Clang.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ extension LLBuildManifestBuilder {
9393
let additionalInputs = try addBuildToolPlugins(.clang(target))
9494

9595
// Create a phony node to represent the entire target.
96-
let targetName = target.target.getLLBuildTargetName(buildParameters: target.buildParameters)
96+
let targetName = target.getLLBuildTargetName()
9797
let output: Node = .virtual(targetName)
9898

9999
self.manifest.addNode(output, toTarget: targetName)

Sources/Build/BuildManifest/LLBuildManifestBuilder+Product.swift

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@
1111
//===----------------------------------------------------------------------===//
1212

1313
import struct Basics.AbsolutePath
14+
import struct Basics.InternalError
1415
import struct LLBuildManifest.Node
16+
import struct SPMBuildCore.BuildParameters
17+
import struct PackageGraph.ResolvedProduct
1518

1619
extension LLBuildManifestBuilder {
1720
func createProductCommand(_ buildProduct: ProductBuildDescription) throws {
18-
let cmdName = try buildProduct.product.getCommandName(buildParameters: buildProduct.buildParameters)
21+
let cmdName = try buildProduct.getCommandName()
1922

2023
// Add dependency on Info.plist generation on Darwin platforms.
2124
let testInputs: [AbsolutePath]
@@ -34,7 +37,7 @@ extension LLBuildManifestBuilder {
3437
}
3538

3639
// Create a phony node to represent the entire target.
37-
let targetName = try buildProduct.product.getLLBuildTargetName(buildParameters: buildProduct.buildParameters)
40+
let targetName = try buildProduct.getLLBuildTargetName()
3841
let output: Node = .virtual(targetName)
3942

4043
let finalProductNode: Node
@@ -85,7 +88,7 @@ extension LLBuildManifestBuilder {
8588
outputPath: plistPath
8689
)
8790

88-
let cmdName = try buildProduct.product.getCommandName(buildParameters: buildProduct.buildParameters)
91+
let cmdName = try buildProduct.getCommandName()
8992
let codeSigningOutput = Node.virtual(targetName + "-CodeSigning")
9093
try self.manifest.addShellCmd(
9194
name: "\(cmdName)-entitlements",
@@ -120,3 +123,44 @@ extension LLBuildManifestBuilder {
120123
)
121124
}
122125
}
126+
127+
extension ProductBuildDescription {
128+
public func getLLBuildTargetName() throws -> String {
129+
try self.product.getLLBuildTargetName(buildParameters: self.buildParameters)
130+
}
131+
132+
public func getCommandName() throws -> String {
133+
try "C.\(self.getLLBuildTargetName())\(self.buildParameters.suffix)"
134+
}
135+
}
136+
137+
extension ResolvedProduct {
138+
public func getLLBuildTargetName(buildParameters: BuildParameters) throws -> String {
139+
let triple = buildParameters.triple.tripleString
140+
let config = buildParameters.buildConfig
141+
let suffix = buildParameters.suffix
142+
let potentialExecutableTargetName = "\(name)-\(triple)-\(config)\(suffix).exe"
143+
let potentialLibraryTargetName = "\(name)-\(triple)-\(config)\(suffix).dylib"
144+
145+
switch type {
146+
case .library(.dynamic):
147+
return potentialLibraryTargetName
148+
case .test:
149+
return "\(name)-\(triple)-\(config)\(suffix).test"
150+
case .library(.static):
151+
return "\(name)-\(triple)-\(config)\(suffix).a"
152+
case .library(.automatic):
153+
throw InternalError("automatic library not supported")
154+
case .executable, .snippet:
155+
return potentialExecutableTargetName
156+
case .macro:
157+
#if BUILD_MACROS_AS_DYLIBS
158+
return potentialLibraryTargetName
159+
#else
160+
return potentialExecutableTargetName
161+
#endif
162+
case .plugin:
163+
throw InternalError("unexpectedly asked for the llbuild target name of a plugin product")
164+
}
165+
}
166+
}

Sources/Build/BuildManifest/LLBuildManifestBuilder+Resources.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ extension LLBuildManifestBuilder {
4545
outputs.append(output)
4646
}
4747

48-
let cmdName = target.target.getLLBuildResourcesCmdName(buildParameters: target.buildParameters)
48+
let cmdName = target.getLLBuildResourcesCmdName()
4949
self.manifest.addPhonyCmd(name: cmdName, inputs: outputs, outputs: [.virtual(cmdName)])
5050

5151
return .virtual(cmdName)

Sources/Build/BuildManifest/LLBuildManifestBuilder+Swift.swift

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ extension LLBuildManifestBuilder {
375375
cmdOutputs: [Node]
376376
) throws {
377377
let isLibrary = target.target.type == .library || target.target.type == .test
378-
let cmdName = target.target.getCommandName(buildParameters: target.defaultBuildParameters)
378+
let cmdName = target.getCommandName()
379379

380380
self.manifest.addWriteSourcesFileListCommand(sources: target.sources, sourcesFileListPath: target.sourcesFileListPath)
381381
self.manifest.addSwiftCmd(
@@ -495,7 +495,7 @@ extension LLBuildManifestBuilder {
495495
/// Adds a top-level phony command that builds the entire target.
496496
private func addTargetCmd(_ target: SwiftTargetBuildDescription, cmdOutputs: [Node]) {
497497
// Create a phony node to represent the entire target.
498-
let targetName = target.target.getLLBuildTargetName(buildParameters: target.defaultBuildParameters)
498+
let targetName = target.getLLBuildTargetName()
499499
let targetOutput: Node = .virtual(targetName)
500500

501501
self.manifest.addNode(targetOutput, toTarget: targetName)
@@ -601,3 +601,13 @@ extension Driver {
601601
}
602602
}
603603
}
604+
605+
extension SwiftTargetBuildDescription {
606+
public func getCommandName() -> String {
607+
"C." + self.getLLBuildTargetName()
608+
}
609+
610+
public func getLLBuildTargetName() -> String {
611+
self.target.getLLBuildTargetName(buildParameters: self.defaultBuildParameters)
612+
}
613+
}

Sources/Build/BuildManifest/LLBuildManifestBuilder.swift

Lines changed: 10 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -316,52 +316,21 @@ extension TargetBuildDescription {
316316
}
317317
}
318318

319-
extension ResolvedModule {
320-
public func getCommandName(buildParameters: BuildParameters) -> String {
321-
"C." + self.getLLBuildTargetName(buildParameters: buildParameters)
322-
}
323-
324-
public func getLLBuildTargetName(buildParameters: BuildParameters) -> String {
325-
"\(self.name)-\(buildParameters.triple.tripleString)-\(buildParameters.buildConfig)\(buildParameters.suffix(triple: self.buildTriple)).module"
326-
}
327-
328-
public func getLLBuildResourcesCmdName(buildParameters: BuildParameters) -> String {
329-
"\(self.name)-\(buildParameters.triple.tripleString)-\(buildParameters.buildConfig)\(buildParameters.suffix(triple: self.buildTriple)).module-resources"
319+
extension TargetBuildDescription {
320+
public func getLLBuildResourcesCmdName() -> String {
321+
"\(self.target.name)-\(self.buildParameters.triple.tripleString)-\(self.buildParameters.buildConfig)\(self.buildParameters.suffix).module-resources"
330322
}
331323
}
332324

333-
extension ResolvedProduct {
334-
public func getLLBuildTargetName(buildParameters: BuildParameters) throws -> String {
335-
let triple = buildParameters.triple.tripleString
336-
let config = buildParameters.buildConfig
337-
let suffix = buildParameters.suffix(triple: self.buildTriple)
338-
let potentialExecutableTargetName = "\(name)-\(triple)-\(config)\(suffix).exe"
339-
let potentialLibraryTargetName = "\(name)-\(triple)-\(config)\(suffix).dylib"
340-
341-
switch type {
342-
case .library(.dynamic):
343-
return potentialLibraryTargetName
344-
case .test:
345-
return "\(name)-\(triple)-\(config)\(suffix).test"
346-
case .library(.static):
347-
return "\(name)-\(triple)-\(config)\(suffix).a"
348-
case .library(.automatic):
349-
throw InternalError("automatic library not supported")
350-
case .executable, .snippet:
351-
return potentialExecutableTargetName
352-
case .macro:
353-
#if BUILD_MACROS_AS_DYLIBS
354-
return potentialLibraryTargetName
355-
#else
356-
return potentialExecutableTargetName
357-
#endif
358-
case .plugin:
359-
throw InternalError("unexpectedly asked for the llbuild target name of a plugin product")
360-
}
325+
extension ClangTargetBuildDescription {
326+
public func getLLBuildTargetName() -> String {
327+
self.target.getLLBuildTargetName(buildParameters: self.buildParameters)
361328
}
329+
}
362330

363-
public func getCommandName(buildParameters: BuildParameters) throws -> String {
364-
try "C.\(self.getLLBuildTargetName(buildParameters: buildParameters))\(buildParameters.suffix(triple: self.buildTriple))"
331+
extension ResolvedModule {
332+
public func getLLBuildTargetName(buildParameters: BuildParameters) -> String {
333+
"\(self.name)-\(buildParameters.triple.tripleString)-\(buildParameters.buildConfig)\(buildParameters.suffix).module"
365334
}
366335
}
367336

0 commit comments

Comments
 (0)