Skip to content

Commit d494ec2

Browse files
authored
Fix prepare for indexing so plugin tools are properly built. (#8230) (#8236)
Back port of #8230 to release/6.1 Eliminate the special generatePrepareManifest and just reuse the real one and add a couple of checks for the target/product prepareForIndexing buildParameter instead. This then enables us to make sure we're doing a full build of the plugin tools so they can generate code to be properly indexed. Addresses #8216 for openapi generator.
1 parent 6c95780 commit d494ec2

File tree

3 files changed

+21
-48
lines changed

3 files changed

+21
-48
lines changed

Sources/Build/BuildManifest/LLBuildManifestBuilder.swift

Lines changed: 15 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -107,54 +107,26 @@ public class LLBuildManifestBuilder {
107107
case .swift(let desc):
108108
try self.createSwiftCompileCommand(desc)
109109
case .clang(let desc):
110-
try self.createClangCompileCommand(desc)
110+
if desc.buildParameters.prepareForIndexing == .off {
111+
try self.createClangCompileCommand(desc)
112+
} else {
113+
// Hook up the clang module target when preparing
114+
try self.createClangPrepareCommand(desc)
115+
}
111116
}
112117
}
113118
}
114119

115-
try self.addTestDiscoveryGenerationCommand()
116-
try self.addTestEntryPointGenerationCommand()
117-
118-
// Create command for all products in the plan.
119-
for description in self.plan.productMap {
120-
try self.createProductCommand(description)
121-
}
122-
123-
try LLBuildManifestWriter.write(self.manifest, at: path, fileSystem: self.fileSystem)
124-
return self.manifest
125-
}
126-
127-
package func generatePrepareManifest(at path: AbsolutePath) throws -> LLBuildManifest {
128-
self.swiftGetVersionFiles.removeAll()
129-
130-
self.manifest.createTarget(TargetKind.main.targetName)
131-
self.manifest.createTarget(TargetKind.test.targetName)
132-
self.manifest.defaultTarget = TargetKind.main.targetName
133-
134-
addPackageStructureCommand()
135-
136-
for description in self.plan.targetMap {
137-
switch description {
138-
case .swift(let desc):
139-
try self.createSwiftCompileCommand(desc)
140-
case .clang(let desc):
141-
if desc.destination == .host {
142-
// Need the clang modules for tools
143-
try self.createClangCompileCommand(desc)
144-
} else {
145-
// Hook up the clang module target
146-
try self.createClangPrepareCommand(desc)
147-
}
148-
}
120+
// Skip test discovery if preparing for indexing
121+
if self.plan.destinationBuildParameters.prepareForIndexing == .off {
122+
try self.addTestDiscoveryGenerationCommand()
123+
try self.addTestEntryPointGenerationCommand()
149124
}
150125

126+
// Create command for all products in the plan.
151127
for description in self.plan.productMap {
152-
// Need to generate macro products
153-
switch description.product.type {
154-
case .macro, .plugin:
128+
if description.buildParameters.prepareForIndexing == .off {
155129
try self.createProductCommand(description)
156-
default:
157-
break
158130
}
159131
}
160132

@@ -199,6 +171,9 @@ extension LLBuildManifestBuilder {
199171
// its source binary.
200172
var destinations = [AbsolutePath: AbsolutePath]()
201173
for target in self.plan.targetMap.values {
174+
// skip if target is preparing for indexing
175+
guard target.buildParameters.prepareForIndexing == .off else { continue }
176+
202177
for binaryPath in target.libraryBinaryPaths {
203178
destinations[target.buildParameters.destinationPath(forBinaryAt: binaryPath)] = binaryPath
204179
}

Sources/Build/BuildOperation.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -981,9 +981,7 @@ extension BuildDescription {
981981
fileSystem: fileSystem,
982982
observabilityScope: config.observabilityScope
983983
)
984-
let buildManifest = plan.destinationBuildParameters.prepareForIndexing == .off
985-
? try llbuild.generateManifest(at: config.manifestPath)
986-
: try llbuild.generatePrepareManifest(at: config.manifestPath)
984+
let buildManifest = try llbuild.generateManifest(at: config.manifestPath)
987985

988986
let swiftCommands = llbuild.manifest.getCmdToolMap(kind: SwiftCompilerTool.self)
989987
let swiftFrontendCommands = llbuild.manifest.getCmdToolMap(kind: SwiftFrontendTool.self)

Tests/BuildTests/PrepareForIndexTests.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class PrepareForIndexTests: XCTestCase {
3737
)
3838

3939
let builder = LLBuildManifestBuilder(plan, fileSystem: fs, observabilityScope: scope)
40-
let manifest = try builder.generatePrepareManifest(at: "/manifest")
40+
let manifest = try builder.generateManifest(at: "/manifest")
4141

4242
// Make sure we're building the swift modules
4343
let outputs = manifest.commands.flatMap(\.value.tool.outputs).map(\.name)
@@ -84,7 +84,7 @@ class PrepareForIndexTests: XCTestCase {
8484
observabilityScope: scope
8585
)
8686
let builder = LLBuildManifestBuilder(plan, fileSystem: fs, observabilityScope: scope)
87-
let manifest = try builder.generatePrepareManifest(at: "/manifest")
87+
let manifest = try builder.generateManifest(at: "/manifest")
8888

8989
// Ensure our C module is here.
9090
let lib = try XCTUnwrap(graph.module(for: "lib"))
@@ -128,7 +128,7 @@ class PrepareForIndexTests: XCTestCase {
128128
observabilityScope: observability.topScope
129129
)
130130
let debugBuilder = LLBuildManifestBuilder(debugPlan, fileSystem: fs, observabilityScope: scope)
131-
let debugManifest = try debugBuilder.generatePrepareManifest(at: "/manifest")
131+
let debugManifest = try debugBuilder.generateManifest(at: "/manifest")
132132

133133
XCTAssertNil(debugManifest.commands.values.first(where: {
134134
guard let swiftCommand = $0.tool as? SwiftCompilerTool,
@@ -149,7 +149,7 @@ class PrepareForIndexTests: XCTestCase {
149149
observabilityScope: observability.topScope
150150
)
151151
let releaseBuilder = LLBuildManifestBuilder(releasePlan, fileSystem: fs, observabilityScope: scope)
152-
let releaseManifest = try releaseBuilder.generatePrepareManifest(at: "/manifest")
152+
let releaseManifest = try releaseBuilder.generateManifest(at: "/manifest")
153153

154154
XCTAssertEqual(releaseManifest.commands.values.filter({
155155
guard let swiftCommand = $0.tool as? SwiftCompilerTool,
@@ -174,7 +174,7 @@ class PrepareForIndexTests: XCTestCase {
174174
)
175175

176176
let builder = LLBuildManifestBuilder(plan, fileSystem: fs, observabilityScope: scope)
177-
let manifest = try builder.generatePrepareManifest(at: "/manifest")
177+
let manifest = try builder.generateManifest(at: "/manifest")
178178

179179
// Ensure swiftmodules built with correct arguments
180180
let coreCommands = manifest.commands.values.filter {

0 commit comments

Comments
 (0)