aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmd/sbox/sbox.go9
-rw-r--r--genrule/genrule.go48
2 files changed, 34 insertions, 23 deletions
diff --git a/cmd/sbox/sbox.go b/cmd/sbox/sbox.go
index 3b41c908..0af18863 100644
--- a/cmd/sbox/sbox.go
+++ b/cmd/sbox/sbox.go
@@ -136,14 +136,11 @@ func run() error {
tempDir, err := ioutil.TempDir(sandboxesRoot, "sbox")
- // Rewrite output file paths to be relative to output root
- // This facilitates matching them up against the corresponding paths in the temporary directory in case they're absolute
for i, filePath := range outputsVarEntries {
- relativePath, err := filepath.Rel(outputRoot, filePath)
- if err != nil {
- return err
+ if !strings.HasPrefix(filePath, "__SBOX_OUT_DIR__/") {
+ return fmt.Errorf("output files must start with `__SBOX_OUT_DIR__/`")
}
- outputsVarEntries[i] = relativePath
+ outputsVarEntries[i] = strings.TrimPrefix(filePath, "__SBOX_OUT_DIR__/")
}
allOutputs = append([]string(nil), outputsVarEntries...)
diff --git a/genrule/genrule.go b/genrule/genrule.go
index 4f3ba93b..e423ebcc 100644
--- a/genrule/genrule.go
+++ b/genrule/genrule.go
@@ -112,9 +112,10 @@ type Module struct {
type taskFunc func(ctx android.ModuleContext, rawCommand string, srcFiles android.Paths) generateTask
type generateTask struct {
- in android.Paths
- out android.WritablePaths
- cmd string
+ in android.Paths
+ out android.WritablePaths
+ sandboxOuts []string
+ cmd string
}
func (g *Module) GeneratedSourceFiles() android.Paths {
@@ -320,7 +321,7 @@ func (g *Module) generateSourceFile(ctx android.ModuleContext, task generateTask
Inputs: task.in,
Implicits: g.deps,
Args: map[string]string{
- "allouts": strings.Join(task.out.Strings(), " "),
+ "allouts": strings.Join(task.sandboxOuts, " "),
},
}
if Bool(g.properties.Depfile) {
@@ -346,23 +347,31 @@ func generatorFactory(taskGenerator taskFunc, props ...interface{}) *Module {
return module
}
+// replace "out" with "__SBOX_OUT_DIR__/<the value of ${out}>"
+func pathToSandboxOut(path android.Path, genDir android.Path) string {
+ relOut, err := filepath.Rel(genDir.String(), path.String())
+ if err != nil {
+ panic(fmt.Sprintf("Could not make ${out} relative: %v", err))
+ }
+ return filepath.Join("__SBOX_OUT_DIR__", relOut)
+
+}
+
func NewGenSrcs() *Module {
properties := &genSrcsProperties{}
taskGenerator := func(ctx android.ModuleContext, rawCommand string, srcFiles android.Paths) generateTask {
commands := []string{}
outFiles := android.WritablePaths{}
- genPath := android.PathForModuleGen(ctx).String()
+ genDir := android.PathForModuleGen(ctx)
+ sandboxOuts := []string{}
for _, in := range srcFiles {
outFile := android.GenPathWithExt(ctx, "", in, String(properties.Output_extension))
outFiles = append(outFiles, outFile)
- // replace "out" with "__SBOX_OUT_DIR__/<the value of ${out}>"
- relOut, err := filepath.Rel(genPath, outFile.String())
- if err != nil {
- panic(fmt.Sprintf("Could not make ${out} relative: %v", err))
- }
- sandboxOutfile := filepath.Join("__SBOX_OUT_DIR__", relOut)
+ sandboxOutfile := pathToSandboxOut(outFile, genDir)
+ sandboxOuts = append(sandboxOuts, sandboxOutfile)
+
command, err := android.Expand(rawCommand, func(name string) (string, error) {
switch name {
case "in":
@@ -384,9 +393,10 @@ func NewGenSrcs() *Module {
fullCommand := strings.Join(commands, " && ")
return generateTask{
- in: srcFiles,
- out: outFiles,
- cmd: fullCommand,
+ in: srcFiles,
+ out: outFiles,
+ sandboxOuts: sandboxOuts,
+ cmd: fullCommand,
}
}
@@ -409,13 +419,17 @@ func NewGenRule() *Module {
taskGenerator := func(ctx android.ModuleContext, rawCommand string, srcFiles android.Paths) generateTask {
outs := make(android.WritablePaths, len(properties.Out))
+ sandboxOuts := make([]string, len(properties.Out))
+ genDir := android.PathForModuleGen(ctx)
for i, out := range properties.Out {
outs[i] = android.PathForModuleGen(ctx, out)
+ sandboxOuts[i] = pathToSandboxOut(outs[i], genDir)
}
return generateTask{
- in: srcFiles,
- out: outs,
- cmd: rawCommand,
+ in: srcFiles,
+ out: outs,
+ sandboxOuts: sandboxOuts,
+ cmd: rawCommand,
}
}