Rewrite depfile from sbox to stay reproducible
sbox will generate a random directory for the output root, and most tools will encode that directory name in the output target of the depfile. So embed the library from dep_fixer into sbox so that it can rewrite the output filename to a static (reproducible) value. Ninja doesn't care what that value is, so it's just "outputfile". Also fix up rule_builder to actually tell sbox about the depfile. Test: mmma system/iorap; check the contents of: out/soong/.intermediates/system/iorap/libiorap-binder/android_arm_armv7-a-neon_core_static/gen/aidl/system/iorap/binder/com/google/android/startop/iorap/IIorap.cpp.d Change-Id: I3640a2e8b0c034f143a35e398a8418a6d621b265
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
@@ -25,6 +26,8 @@ import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"android/soong/makedeps"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -152,9 +155,6 @@ func run() error {
|
||||
return err
|
||||
}
|
||||
allOutputs = append(allOutputs, sandboxedDepfile)
|
||||
if !strings.Contains(rawCommand, "__SBOX_DEPFILE__") {
|
||||
return fmt.Errorf("the --depfile-out argument only makes sense if the command contains the text __SBOX_DEPFILE__")
|
||||
}
|
||||
rawCommand = strings.Replace(rawCommand, "__SBOX_DEPFILE__", filepath.Join(tempDir, sandboxedDepfile), -1)
|
||||
|
||||
}
|
||||
@@ -281,6 +281,26 @@ func run() error {
|
||||
}
|
||||
}
|
||||
|
||||
// Rewrite the depfile so that it doesn't include the (randomized) sandbox directory
|
||||
if depfileOut != "" {
|
||||
in, err := ioutil.ReadFile(depfileOut)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
deps, err := makedeps.Parse(depfileOut, bytes.NewBuffer(in))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
deps.Output = "outputfile"
|
||||
|
||||
err = ioutil.WriteFile(depfileOut, deps.Print(), 0666)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// TODO(jeffrygaston) if a process creates more output files than it declares, should there be a warning?
|
||||
return nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user