Soong: use deterministic temp dir names in sbox
The sbox tool is used to wrap genrule actions, and run them in a temporary directory. Afterwards, the outputs are moved into their proper location in the output tree. However, some tools embed the file name of the output file (as passed to the tool) into the output file. For example, the perfetto code generator script uses the output file name to generate a C header guard when it generates perfetto_src_base_version_gen_h/gen/perfetto_version.gen.h. When using remote execution / remote caching, these genrule actions are run locally whenever the output file doesn't exist, effectively making them unique (across time and between users). They then cause cache misses on all actions depending on these output files as well as on transitive actions. In the above example, this causes libperfetto.so to differ, which then causes all actions depending on libperfetto.so to be rerun unnecessarily. As a fix, this commit changes the sbox tool to use the sha1 hash of the manifest path. The tool already seems to assume that there are no concurrent runs of the same tool with the same manifest (otherwise it would fail flakily depending on exact timing). It seems therefore safe to use a temporary path deterministically derived from the manifest path. Test: ran multiple builds w/ remote execution; observe proper caching Change-Id: I5b73ffd3b7f85cbb0336dfa1675de7ac0e2fd1a8
Loading
Please register or sign in to comment