Use response files when running subcommands if needed #57
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.
Now, when a job is created, it can optionally indicate that it supports using a response file to pass its arguments. Then,
ArgsResolver
is responsible for checking the argument length and writing out a response file if needed. This ensures that ifArgsResolver
lengthens the arguments, this is accounted for properly.I'm fairly happy with this design, but there's one issue in how it interacts with LLBuild, which is why this is a WIP for now. A couple of the integration tests which pass 500k args run very slowly (~3-4 minutes each). It looks like most of the time is spent in JSONDecoder objc bridging (at least on macOS), which is used to serialize Jobs. This might need to be switched to a faster encoder/decoder.
This PR also makes a few changes to response file tokenization to more closely match the integrated driver.
With this change, two response file integration tests still fail: one due to different sets of files being passed with
-primary-file
, and another because the c++ and swift drivers use a different tmp dir layout.