Skip to content

Commit 27f5efd

Browse files
Merge pull request #1550 from cachemeifyoucan/eng/PR-support-direct-cc1-scan
[ExplicitModule] Support direct cc1 flag for all explicit module build job
2 parents 6bf6442 + e31e98f commit 27f5efd

File tree

2 files changed

+48
-20
lines changed

2 files changed

+48
-20
lines changed

Sources/SwiftDriver/Jobs/FrontendJobHelpers.swift

+21-7
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,17 @@ extension Driver {
101101
jobNeedPathRemap = false
102102
}
103103

104+
// Check if dependency scanner has put the job into direct clang cc1 mode.
105+
// If dependency scanner put us into direct cc1 mode, avoid adding `-Xcc` options, since
106+
// dependency scanner already adds needed flags and -Xcc options known by swift-driver are
107+
// clang driver flags but not it requires cc1 flags.
108+
let directModuleCC1Mode = commandLine.contains(Job.ArgTemplate.flag("-direct-clang-cc1-module-build"))
109+
func appendXccFlag(_ flag: String) {
110+
guard !directModuleCC1Mode else { return }
111+
commandLine.appendFlag(.Xcc)
112+
commandLine.appendFlag(flag)
113+
}
114+
104115
if let variant = parsedOptions.getLastArgument(.targetVariant)?.asSingle {
105116
commandLine.appendFlag(.targetVariant)
106117
commandLine.appendFlag(Triple(variant, normalizing: true).triple)
@@ -125,8 +136,7 @@ extension Driver {
125136
try commandLine.appendLast(.enableExperimentalCxxInterop, from: &parsedOptions)
126137
try commandLine.appendLast(.cxxInteroperabilityMode, from: &parsedOptions)
127138
if let stdlibVariant = parsedOptions.getLastArgument(.experimentalCxxStdlib)?.asSingle {
128-
commandLine.appendFlag("-Xcc")
129-
commandLine.appendFlag("-stdlib=\(stdlibVariant)")
139+
appendXccFlag("-stdlib=\(stdlibVariant)")
130140
}
131141

132142
if isEmbeddedEnabled && parsedOptions.hasArgument(.enableLibraryEvolution) {
@@ -173,8 +183,7 @@ extension Driver {
173183
try commandLine.appendAll(.vfsoverlay, from: &parsedOptions)
174184

175185
if let gccToolchain = parsedOptions.getLastArgument(.gccToolchain) {
176-
commandLine.appendFlag(.Xcc)
177-
commandLine.appendFlag("--gcc-toolchain=\(gccToolchain.asSingle)")
186+
appendXccFlag("--gcc-toolchain=\(gccToolchain.asSingle)")
178187
}
179188

180189
try commandLine.appendLast(.AssertConfig, from: &parsedOptions)
@@ -272,6 +281,11 @@ extension Driver {
272281
if isFrontendArgSupported(.strictConcurrency) {
273282
try commandLine.appendLast(.strictConcurrency, from: &parsedOptions)
274283
}
284+
if kind == .scanDependencies,
285+
isFrontendArgSupported(.experimentalClangImporterDirectCc1Scan) {
286+
try commandLine.appendAll(
287+
.experimentalClangImporterDirectCc1Scan, from: &parsedOptions)
288+
}
275289

276290
// Expand the -experimental-hermetic-seal-at-link flag
277291
if parsedOptions.hasArgument(.experimentalHermeticSealAtLink) {
@@ -332,7 +346,7 @@ extension Driver {
332346
try commandLine.appendLast(.disableSandbox, from: &parsedOptions)
333347
}
334348

335-
if !(isCachingEnabled && useClangIncludeTree), let workingDirectory = workingDirectory {
349+
if !directModuleCC1Mode, let workingDirectory = workingDirectory {
336350
// Add -Xcc -working-directory before any other -Xcc options to ensure it is
337351
// overridden by an explicit -Xcc -working-directory, although having a
338352
// different working directory is probably incorrect.
@@ -402,8 +416,8 @@ extension Driver {
402416
// Pass through any subsystem flags.
403417
try commandLine.appendAll(.Xllvm, from: &parsedOptions)
404418

405-
// If using clang-include-tree, `-Xcc` should only be passed to scanDependencies job.
406-
if (kind == .scanDependencies) || !(isCachingEnabled && useClangIncludeTree) {
419+
// Pass through all -Xcc flags if not under directModuleCC1Mode.
420+
if !directModuleCC1Mode {
407421
try commandLine.appendAll(.Xcc, from: &parsedOptions)
408422
}
409423

0 commit comments

Comments
 (0)