[Parsable Output] Break down batch compile jobs into constituent messages #572
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
We have, historically, treated batch mode as an implementation detail of the compiler. As a consequence, we have been lying to clients of parsable-output by emitting multiple
began
,finished
,signalled
messages for each batch job - one message per primary input. The time has come to teach swift-driver to tell the same old lies.Emulating existing C++ driver behavior:
- Cargo-cult the concept of a
quasiPID
(https://github.com/apple/swift/blob/main/include/swift/Basic/ParseableOutput.h#L36)
- Break up one compile job with multiple primaries into multiple
[Began|Finished|Signalled]Message
messages- Collect
((job, primaryInput) -> quasiPID)
information to generate correctFinished
messages- Fixup individual command lines of each
Began
message (w.r.t.-o
and-primary-input
options)- Make
InputOutputMap
a part of a.compile
Job
's state so that we can later query which of its many outputs correspond to a specific primaryResolves rdar://75636235