Skip to content

Commit abd1224

Browse files
committed
Simplify the check for prepareForIndexing, new swiftc flags.
Moves the prepareForIndexing checks to more common points simplifing the checks. Also adds two more compile flags which makes the preparation much faster.
1 parent 26996d5 commit abd1224

File tree

6 files changed

+22
-20
lines changed

6 files changed

+22
-20
lines changed

Sources/Build/BuildDescription/SwiftTargetBuildDescription.swift

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -246,12 +246,6 @@ public final class SwiftTargetBuildDescription {
246246
/// Whether to disable sandboxing (e.g. for macros).
247247
private let shouldDisableSandbox: Bool
248248

249-
/// Whether to build preparing for indexing
250-
public var prepareForIndexing: Bool {
251-
// Do full build for tools
252-
defaultBuildParameters.prepareForIndexing && target.buildTriple != .tools
253-
}
254-
255249
/// Create a new target description with target and build parameters.
256250
init(
257251
package: ResolvedPackage,
@@ -588,9 +582,12 @@ public final class SwiftTargetBuildDescription {
588582
args += ["-emit-module-interface-path", self.parseableModuleInterfaceOutputPath.pathString]
589583
}
590584

591-
if self.prepareForIndexing {
585+
if self.defaultBuildParameters.prepareForIndexing {
592586
args += [
587+
"-Xfrontend", "-enable-library-evolution",
593588
"-Xfrontend", "-experimental-skip-all-function-bodies",
589+
"-Xfrontend", "-experimental-lazy-typecheck",
590+
"-Xfrontend", "-experimental-skip-non-exportable-decls",
594591
"-Xfrontend", "-experimental-allow-module-with-compiler-errors",
595592
"-Xfrontend", "-empty-abi-descriptor"
596593
]

Sources/Build/BuildManifest/LLBuildManifestBuilder+Swift.swift

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ extension LLBuildManifestBuilder {
4444
let objectNodes = try target.objects.map(Node.file)
4545
let moduleNode = Node.file(target.moduleOutputPath)
4646
let cmdOutputs: [Node]
47-
if target.prepareForIndexing {
47+
if target.defaultBuildParameters.prepareForIndexing {
4848
// Don't include the object nodes on prepare builds
4949
cmdOutputs = [moduleNode]
5050
} else {
@@ -404,7 +404,7 @@ extension LLBuildManifestBuilder {
404404
isLibrary: isLibrary,
405405
wholeModuleOptimization: target.defaultBuildParameters.configuration == .release,
406406
outputFileMapPath: try target.writeOutputFileMap(), // FIXME: Eliminate side effect.
407-
prepareForIndexing: target.prepareForIndexing
407+
prepareForIndexing: target.defaultBuildParameters.prepareForIndexing
408408
)
409409
}
410410

@@ -424,7 +424,7 @@ extension LLBuildManifestBuilder {
424424
inputs.append(resourcesNode)
425425
}
426426

427-
let prepareForIndexing = target.prepareForIndexing
427+
let prepareForIndexing = target.defaultBuildParameters.prepareForIndexing
428428

429429
func addStaticTargetInputs(_ target: ResolvedModule) throws {
430430
// Ignore C Modules.
@@ -456,9 +456,10 @@ extension LLBuildManifestBuilder {
456456
inputs.append(file: target.moduleOutputPath)
457457
case .clang(let target)?:
458458
if prepareForIndexing {
459-
// In preparation, we're only building swiftmodules, need to depend on sources
460-
for source in target.clangTarget.sources.paths {
461-
inputs.append(file: source)
459+
// In preparation, we're only building swiftmodules
460+
// propagate the dependency to the header files in this target
461+
for header in target.clangTarget.headers {
462+
inputs.append(file: header)
462463
}
463464
} else {
464465
for object in try target.objects {
@@ -537,7 +538,7 @@ extension LLBuildManifestBuilder {
537538

538539
private func addModuleWrapCmd(_ target: SwiftTargetBuildDescription) throws {
539540
// Add commands to perform the module wrapping Swift modules when debugging strategy is `modulewrap`.
540-
guard target.defaultBuildParameters.debuggingStrategy == .modulewrap, !target.prepareForIndexing else { return }
541+
guard target.defaultBuildParameters.debuggingStrategy == .modulewrap else { return }
541542
var moduleWrapArgs = [
542543
target.defaultBuildParameters.toolchain.swiftCompilerPath.pathString,
543544
"-modulewrap", target.moduleOutputPath.pathString,

Sources/Build/BuildManifest/LLBuildManifestBuilder.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,11 @@ public class LLBuildManifestBuilder {
150150

151151
for (_, description) in self.plan.productMap {
152152
// Need to generate macro products
153-
if description.product.type == .macro {
153+
switch description.product.type {
154+
case .macro, .plugin:
154155
try self.createProductCommand(description)
156+
default:
157+
break
155158
}
156159
}
157160

Sources/CoreCommands/SwiftCommandState.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -725,7 +725,7 @@ public final class SwiftCommandState {
725725
when building on macOS.
726726
"""
727727

728-
private func _buildParams(toolchain: UserToolchain) throws -> BuildParameters {
728+
private func _buildParams(toolchain: UserToolchain, prepareForIndexing: Bool? = nil) throws -> BuildParameters {
729729
let triple = toolchain.targetTriple
730730

731731
let dataPath = self.scratchDirectory.appending(
@@ -748,7 +748,7 @@ public final class SwiftCommandState {
748748
sanitizers: options.build.enabledSanitizers,
749749
indexStoreMode: options.build.indexStoreMode.buildParameter,
750750
isXcodeBuildSystemEnabled: options.build.buildSystem == .xcode,
751-
prepareForIndexing: options.build.prepareForIndexing,
751+
prepareForIndexing: prepareForIndexing ?? options.build.prepareForIndexing,
752752
debuggingParameters: .init(
753753
debugInfoFormat: options.build.debugInfoFormat.buildParameter,
754754
triple: triple,
@@ -797,7 +797,8 @@ public final class SwiftCommandState {
797797

798798
private lazy var _toolsBuildParameters: Result<BuildParameters, Swift.Error> = {
799799
Result(catching: {
800-
try _buildParams(toolchain: self.getHostToolchain())
800+
// Ensure prepare for indexing is disable for tools
801+
try _buildParams(toolchain: self.getHostToolchain(), prepareForIndexing: false)
801802
})
802803
}()
803804

Sources/SPMBuildCore/BuildParameters/BuildParameters+Debugging.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ extension BuildParameters {
6363

6464
/// The debugging strategy according to the current build parameters.
6565
public var debuggingStrategy: DebuggingStrategy? {
66-
guard configuration == .debug else {
66+
guard configuration == .debug, !prepareForIndexing else {
6767
return nil
6868
}
6969

Tests/BuildTests/PrepareForIndexTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class PrepareForIndexTests: XCTestCase {
2121

2222
let plan = try BuildPlan(
2323
destinationBuildParameters: mockBuildParameters(prepareForIndexing: true),
24-
toolsBuildParameters: mockBuildParameters(prepareForIndexing: true),
24+
toolsBuildParameters: mockBuildParameters(prepareForIndexing: false),
2525
graph: graph,
2626
fileSystem: fs,
2727
observabilityScope: scope

0 commit comments

Comments
 (0)