@@ -180,6 +180,7 @@ extension Driver {
180
180
try addPrecompileBridgingHeaderJob ( addJob: addJobBeforeCompiles)
181
181
let linkerInputs = try addJobsFeedingLinker (
182
182
addJobBeforeCompiles: addJobBeforeCompiles,
183
+ jobsBeforeCompiles: jobsBeforeCompiles,
183
184
addCompileJobGroup: addCompileJobGroup,
184
185
addJobAfterCompiles: addJobAfterCompiles)
185
186
try addAPIDigesterJobs ( addJob: addJobAfterCompiles)
@@ -223,9 +224,9 @@ extension Driver {
223
224
)
224
225
}
225
226
226
- private mutating func addEmitModuleJob( addJobBeforeCompiles: ( Job ) -> Void ) throws -> Job ? {
227
+ private mutating func addEmitModuleJob( addJobBeforeCompiles: ( Job ) -> Void , pchCompileJob : Job ? ) throws -> Job ? {
227
228
if emitModuleSeparately {
228
- let emitJob = try emitModuleJob ( )
229
+ let emitJob = try emitModuleJob ( pchCompileJob : pchCompileJob )
229
230
addJobBeforeCompiles ( emitJob)
230
231
return emitJob
231
232
}
@@ -234,6 +235,7 @@ extension Driver {
234
235
235
236
private mutating func addJobsFeedingLinker(
236
237
addJobBeforeCompiles: ( Job ) -> Void ,
238
+ jobsBeforeCompiles: [ Job ] ,
237
239
addCompileJobGroup: ( CompileJobGroup ) -> Void ,
238
240
addJobAfterCompiles: ( Job ) -> Void
239
241
) throws -> [ TypedVirtualPath ] {
@@ -280,15 +282,20 @@ extension Driver {
280
282
try addVerifyJobs ( emitModuleJob: emitModuleJob, addJob: addJobAfterCompiles)
281
283
}
282
284
285
+ // Try to see if we scheduled a pch compile job. If so, pass it to the comile jobs.
286
+ let jobCreatingPch : Job ? = jobsBeforeCompiles. first ( where: { $0. kind == . generatePCH} )
287
+
283
288
// Whole-module
284
289
if let compileJob = try addSingleCompileJobs ( addJob: addJobBeforeCompiles,
285
290
addJobOutputs: addJobOutputs,
291
+ pchCompileJob: jobCreatingPch,
286
292
emitModuleTrace: loadedModuleTracePath != nil ) {
287
293
try addPostModuleFilesJobs ( compileJob)
288
294
}
289
295
290
296
// Emit-module-separately
291
- if let emitModuleJob = try addEmitModuleJob ( addJobBeforeCompiles: addJobBeforeCompiles) {
297
+ if let emitModuleJob = try addEmitModuleJob ( addJobBeforeCompiles: addJobBeforeCompiles,
298
+ pchCompileJob: jobCreatingPch) {
292
299
try addPostModuleFilesJobs ( emitModuleJob)
293
300
294
301
try addWrapJobOrMergeOutputs (
@@ -302,7 +309,8 @@ extension Driver {
302
309
addCompileJobGroup: addCompileJobGroup,
303
310
addModuleInput: addModuleInput,
304
311
addLinkerInput: addLinkerInput,
305
- addJobOutputs: addJobOutputs)
312
+ addJobOutputs: addJobOutputs,
313
+ pchCompileJob: jobCreatingPch)
306
314
307
315
try addAutolinkExtractJob ( linkerInputs: linkerInputs,
308
316
addLinkerInput: addLinkerInput,
@@ -329,6 +337,7 @@ extension Driver {
329
337
private mutating func addSingleCompileJobs(
330
338
addJob: ( Job ) -> Void ,
331
339
addJobOutputs: ( [ TypedVirtualPath ] ) -> Void ,
340
+ pchCompileJob: Job ? ,
332
341
emitModuleTrace: Bool
333
342
) throws -> Job ? {
334
343
guard case . singleCompile = compilerMode,
@@ -340,6 +349,7 @@ extension Driver {
340
349
let compile = try compileJob ( primaryInputs: [ ] ,
341
350
outputType: . llvmBitcode,
342
351
addJobOutputs: addJobOutputs,
352
+ pchCompileJob: pchCompileJob,
343
353
emitModuleTrace: emitModuleTrace)
344
354
addJob ( compile)
345
355
let backendJobs = try compile. outputs. compactMap { output in
@@ -355,6 +365,7 @@ extension Driver {
355
365
let compile = try compileJob ( primaryInputs: [ ] ,
356
366
outputType: compilerOutputType,
357
367
addJobOutputs: addJobOutputs,
368
+ pchCompileJob: pchCompileJob,
358
369
emitModuleTrace: emitModuleTrace)
359
370
addJob ( compile)
360
371
return compile
@@ -365,7 +376,8 @@ extension Driver {
365
376
addCompileJobGroup: ( CompileJobGroup ) -> Void ,
366
377
addModuleInput: ( TypedVirtualPath ) -> Void ,
367
378
addLinkerInput: ( TypedVirtualPath ) -> Void ,
368
- addJobOutputs: ( [ TypedVirtualPath ] ) -> Void )
379
+ addJobOutputs: ( [ TypedVirtualPath ] ) -> Void ,
380
+ pchCompileJob: Job ? )
369
381
throws {
370
382
let loadedModuleTraceInputIndex = inputFiles. firstIndex ( where: {
371
383
$0. type. isPartOfSwiftCompilation && loadedModuleTracePath != nil
@@ -378,6 +390,7 @@ extension Driver {
378
390
addModuleInput: addModuleInput,
379
391
addLinkerInput: addLinkerInput,
380
392
addJobOutputs: addJobOutputs,
393
+ pchCompileJob: pchCompileJob,
381
394
emitModuleTrace: index == loadedModuleTraceInputIndex)
382
395
}
383
396
}
@@ -388,6 +401,7 @@ extension Driver {
388
401
addModuleInput: ( TypedVirtualPath ) -> Void ,
389
402
addLinkerInput: ( TypedVirtualPath ) -> Void ,
390
403
addJobOutputs: ( [ TypedVirtualPath ] ) -> Void ,
404
+ pchCompileJob: Job ? ,
391
405
emitModuleTrace: Bool
392
406
) throws
393
407
{
@@ -403,6 +417,7 @@ extension Driver {
403
417
try createAndAddCompileJobGroup ( primaryInput: input,
404
418
emitModuleTrace: emitModuleTrace,
405
419
canSkipIfOnlyModule: canSkipIfOnlyModule,
420
+ pchCompileJob: pchCompileJob,
406
421
addCompileJobGroup: addCompileJobGroup,
407
422
addJobOutputs: addJobOutputs)
408
423
@@ -436,6 +451,7 @@ extension Driver {
436
451
primaryInput: TypedVirtualPath ,
437
452
emitModuleTrace: Bool ,
438
453
canSkipIfOnlyModule: Bool ,
454
+ pchCompileJob: Job ? ,
439
455
addCompileJobGroup: ( CompileJobGroup ) -> Void ,
440
456
addJobOutputs: ( [ TypedVirtualPath ] ) -> Void
441
457
) throws {
@@ -444,6 +460,7 @@ extension Driver {
444
460
let compile = try compileJob ( primaryInputs: [ primaryInput] ,
445
461
outputType: . llvmBitcode,
446
462
addJobOutputs: addJobOutputs,
463
+ pchCompileJob: pchCompileJob,
447
464
emitModuleTrace: emitModuleTrace)
448
465
let backendJobs = try compile. outputs. compactMap { output in
449
466
output. type == . llvmBitcode
@@ -462,6 +479,7 @@ extension Driver {
462
479
let compile = try compileJob ( primaryInputs: [ primaryInput] ,
463
480
outputType: compilerOutputType,
464
481
addJobOutputs: addJobOutputs,
482
+ pchCompileJob: pchCompileJob,
465
483
emitModuleTrace: emitModuleTrace)
466
484
addCompileJobGroup ( CompileJobGroup ( compileJob: compile, backendJob: nil ) )
467
485
}
@@ -821,6 +839,7 @@ extension Driver {
821
839
compileJobs. filter { $0. outputs. contains { $0. type == . moduleTrace} }
822
840
. flatMap { $0. primaryInputs}
823
841
)
842
+ let jobCreatingPch : Job ? = jobs. first ( where: { $0. kind == . generatePCH} )
824
843
825
844
let batchedCompileJobs = try inputsInOrder. compactMap { anInput -> Job ? in
826
845
let idx = partitions. assignment [ anInput] !
@@ -851,6 +870,7 @@ extension Driver {
851
870
return try compileJob ( primaryInputs: primaryInputs,
852
871
outputType: outputType,
853
872
addJobOutputs: { _ in } ,
873
+ pchCompileJob: jobCreatingPch,
854
874
emitModuleTrace: constituentsEmittedModuleTrace)
855
875
}
856
876
return batchedCompileJobs + noncompileJobs
0 commit comments