@@ -101,6 +101,17 @@ extension Driver {
101
101
jobNeedPathRemap = false
102
102
}
103
103
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
+
104
115
if let variant = parsedOptions. getLastArgument ( . targetVariant) ? . asSingle {
105
116
commandLine. appendFlag ( . targetVariant)
106
117
commandLine. appendFlag ( Triple ( variant, normalizing: true ) . triple)
@@ -125,8 +136,7 @@ extension Driver {
125
136
try commandLine. appendLast ( . enableExperimentalCxxInterop, from: & parsedOptions)
126
137
try commandLine. appendLast ( . cxxInteroperabilityMode, from: & parsedOptions)
127
138
if let stdlibVariant = parsedOptions. getLastArgument ( . experimentalCxxStdlib) ? . asSingle {
128
- commandLine. appendFlag ( " -Xcc " )
129
- commandLine. appendFlag ( " -stdlib= \( stdlibVariant) " )
139
+ appendXccFlag ( " -stdlib= \( stdlibVariant) " )
130
140
}
131
141
132
142
if isEmbeddedEnabled && parsedOptions. hasArgument ( . enableLibraryEvolution) {
@@ -173,8 +183,7 @@ extension Driver {
173
183
try commandLine. appendAll ( . vfsoverlay, from: & parsedOptions)
174
184
175
185
if let gccToolchain = parsedOptions. getLastArgument ( . gccToolchain) {
176
- commandLine. appendFlag ( . Xcc)
177
- commandLine. appendFlag ( " --gcc-toolchain= \( gccToolchain. asSingle) " )
186
+ appendXccFlag ( " --gcc-toolchain= \( gccToolchain. asSingle) " )
178
187
}
179
188
180
189
try commandLine. appendLast ( . AssertConfig, from: & parsedOptions)
@@ -272,6 +281,11 @@ extension Driver {
272
281
if isFrontendArgSupported ( . strictConcurrency) {
273
282
try commandLine. appendLast ( . strictConcurrency, from: & parsedOptions)
274
283
}
284
+ if kind == . scanDependencies,
285
+ isFrontendArgSupported ( . experimentalClangImporterDirectCc1Scan) {
286
+ try commandLine. appendAll (
287
+ . experimentalClangImporterDirectCc1Scan, from: & parsedOptions)
288
+ }
275
289
276
290
// Expand the -experimental-hermetic-seal-at-link flag
277
291
if parsedOptions. hasArgument ( . experimentalHermeticSealAtLink) {
@@ -332,7 +346,7 @@ extension Driver {
332
346
try commandLine. appendLast ( . disableSandbox, from: & parsedOptions)
333
347
}
334
348
335
- if !( isCachingEnabled && useClangIncludeTree ) , let workingDirectory = workingDirectory {
349
+ if !directModuleCC1Mode , let workingDirectory = workingDirectory {
336
350
// Add -Xcc -working-directory before any other -Xcc options to ensure it is
337
351
// overridden by an explicit -Xcc -working-directory, although having a
338
352
// different working directory is probably incorrect.
@@ -394,8 +408,8 @@ extension Driver {
394
408
// Pass through any subsystem flags.
395
409
try commandLine. appendAll ( . Xllvm, from: & parsedOptions)
396
410
397
- // If using clang-include-tree, ` -Xcc` should only be passed to scanDependencies job .
398
- if ( kind == . scanDependencies ) || ! ( isCachingEnabled && useClangIncludeTree ) {
411
+ // Pass through all -Xcc flags if not under directModuleCC1Mode .
412
+ if !directModuleCC1Mode {
399
413
try commandLine. appendAll ( . Xcc, from: & parsedOptions)
400
414
}
401
415
0 commit comments