Loading cmd/sbox/sbox.go +3 −6 Original line number Diff line number Diff line Loading @@ -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...) Loading genrule/genrule.go +31 −17 Original line number Diff line number Diff line Loading @@ -114,6 +114,7 @@ type taskFunc func(ctx android.ModuleContext, rawCommand string, srcFiles androi type generateTask struct { in android.Paths out android.WritablePaths sandboxOuts []string cmd string } Loading Loading @@ -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) { Loading @@ -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": Loading @@ -386,6 +395,7 @@ func NewGenSrcs() *Module { return generateTask{ in: srcFiles, out: outFiles, sandboxOuts: sandboxOuts, cmd: fullCommand, } } Loading @@ -409,12 +419,16 @@ 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, sandboxOuts: sandboxOuts, cmd: rawCommand, } } Loading Loading
cmd/sbox/sbox.go +3 −6 Original line number Diff line number Diff line Loading @@ -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...) Loading
genrule/genrule.go +31 −17 Original line number Diff line number Diff line Loading @@ -114,6 +114,7 @@ type taskFunc func(ctx android.ModuleContext, rawCommand string, srcFiles androi type generateTask struct { in android.Paths out android.WritablePaths sandboxOuts []string cmd string } Loading Loading @@ -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) { Loading @@ -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": Loading @@ -386,6 +395,7 @@ func NewGenSrcs() *Module { return generateTask{ in: srcFiles, out: outFiles, sandboxOuts: sandboxOuts, cmd: fullCommand, } } Loading @@ -409,12 +419,16 @@ 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, sandboxOuts: sandboxOuts, cmd: rawCommand, } } Loading