mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Schedule merge-modules When modulewrap Job is in the Queue
In order to unblock the SwiftWASM project, which relies on an incremental build of the Swift driver that relies on the merge-modules job always being run. The situation appears to be something like this: 1) An incremental build is run 2) Temporary swiftmodule outputs are laid down 3) merge-modules is skipped 4) modulewrap is run anyways and reads the empty temp file We should fix this by skipping modulewrap if we can skip merge-modules. But for now, be conservative and fall back to the status quo behavior of always running merge-modules whenever we encounter a modulewrap job.
This commit is contained in:
@@ -908,10 +908,18 @@ namespace driver {
|
||||
return everyIncrementalJob;
|
||||
};
|
||||
|
||||
bool sawModuleWrapJob = false;
|
||||
const Job *mergeModulesJob = nullptr;
|
||||
CommandSet jobsToSchedule;
|
||||
CommandSet initialCascadingCommands;
|
||||
for (const Job *cmd : Comp.getJobs()) {
|
||||
// A modulewrap job consumes the output of merge-modules. If it is
|
||||
// in the queue, we must run merge-modules or empty temporary files
|
||||
// will be consumed by the job instead.
|
||||
// FIXME: We should be able to ditch this if we compare the timestamps
|
||||
// of the temporary file to the build record, if it exists.
|
||||
sawModuleWrapJob |= isa<ModuleWrapJobAction>(cmd->getSource());
|
||||
|
||||
// Skip jobs that have no associated incremental info.
|
||||
if (!isa<IncrementalJobAction>(cmd->getSource())) {
|
||||
continue;
|
||||
@@ -949,7 +957,7 @@ namespace driver {
|
||||
// structure of the resulting module. Additionally, the initial scheduling
|
||||
// predicate above is only aware of intra-module changes. External
|
||||
// dependencies changing *must* cause merge-modules to be scheduled.
|
||||
if (!jobsToSchedule.empty() && mergeModulesJob) {
|
||||
if ((!jobsToSchedule.empty() || sawModuleWrapJob) && mergeModulesJob) {
|
||||
jobsToSchedule.insert(mergeModulesJob);
|
||||
}
|
||||
return jobsToSchedule;
|
||||
|
||||
Reference in New Issue
Block a user