Add subdir to GenPath
We were emulating this for proto files, standardize it and make the
other generators use it as well.
Test: Compare out/soong/build.ninja before/after change
Test: mmma -j system/tools/hidl
Change-Id: I1888c7b981749060a398387bbb9b481270bf6d75
diff --git a/android/paths.go b/android/paths.go
index 56c3715..1202d6d 100644
--- a/android/paths.go
+++ b/android/paths.go
@@ -94,7 +94,7 @@
}
type genPathProvider interface {
- genPathWithExt(ctx ModuleContext, ext string) ModuleGenPath
+ genPathWithExt(ctx ModuleContext, subdir, ext string) ModuleGenPath
}
type objPathProvider interface {
objPathWithExt(ctx ModuleContext, subdir, ext string) ModuleObjPath
@@ -105,9 +105,9 @@
// GenPathWithExt derives a new file path in ctx's generated sources directory
// from the current path, but with the new extension.
-func GenPathWithExt(ctx ModuleContext, p Path, ext string) ModuleGenPath {
+func GenPathWithExt(ctx ModuleContext, subdir string, p Path, ext string) ModuleGenPath {
if path, ok := p.(genPathProvider); ok {
- return path.genPathWithExt(ctx, ext)
+ return path.genPathWithExt(ctx, subdir, ext)
}
reportPathError(ctx, "Tried to create generated file from unsupported path: %s(%s)", reflect.TypeOf(p).Name(), p)
return PathForModuleGen(ctx)
@@ -115,7 +115,7 @@
// ObjPathWithExt derives a new file path in ctx's object directory from the
// current path, but with the new extension.
-func ObjPathWithExt(ctx ModuleContext, p Path, subdir, ext string) ModuleObjPath {
+func ObjPathWithExt(ctx ModuleContext, subdir string, p Path, ext string) ModuleObjPath {
if path, ok := p.(objPathProvider); ok {
return path.objPathWithExt(ctx, subdir, ext)
}
@@ -535,8 +535,8 @@
return p.sourcePath.String()
}
-func (p ModuleSrcPath) genPathWithExt(ctx ModuleContext, ext string) ModuleGenPath {
- return PathForModuleGen(ctx, p.moduleDir, pathtools.ReplaceExtension(p.path, ext))
+func (p ModuleSrcPath) genPathWithExt(ctx ModuleContext, subdir, ext string) ModuleGenPath {
+ return PathForModuleGen(ctx, subdir, p.moduleDir, pathtools.ReplaceExtension(p.path, ext))
}
func (p ModuleSrcPath) objPathWithExt(ctx ModuleContext, subdir, ext string) ModuleObjPath {
@@ -583,9 +583,9 @@
}
}
-func (p ModuleGenPath) genPathWithExt(ctx ModuleContext, ext string) ModuleGenPath {
+func (p ModuleGenPath) genPathWithExt(ctx ModuleContext, subdir, ext string) ModuleGenPath {
// TODO: make a different path for local vs remote generated files?
- return PathForModuleGen(ctx, pathtools.ReplaceExtension(p.path, ext))
+ return PathForModuleGen(ctx, subdir, pathtools.ReplaceExtension(p.path, ext))
}
func (p ModuleGenPath) objPathWithExt(ctx ModuleContext, subdir, ext string) ModuleObjPath {
diff --git a/cc/builder.go b/cc/builder.go
index faa39d1..f795bba 100644
--- a/cc/builder.go
+++ b/cc/builder.go
@@ -234,7 +234,7 @@
}
for i, srcFile := range srcFiles {
- objFile := android.ObjPathWithExt(ctx, srcFile, subdir, "o")
+ objFile := android.ObjPathWithExt(ctx, subdir, srcFile, "o")
objFiles[i] = objFile
@@ -285,7 +285,7 @@
})
if tidy {
- tidyFile := android.ObjPathWithExt(ctx, srcFile, subdir, "tidy")
+ tidyFile := android.ObjPathWithExt(ctx, subdir, srcFile, "tidy")
tidyFiles = append(tidyFiles, tidyFile)
ctx.ModuleBuild(pctx, android.ModuleBuildParams{
diff --git a/cc/gen.go b/cc/gen.go
index 1451895..9d3a67c 100644
--- a/cc/gen.go
+++ b/cc/gen.go
@@ -48,7 +48,7 @@
)
func genYacc(ctx android.ModuleContext, yaccFile android.Path, outFile android.ModuleGenPath, yaccFlags string) (headerFile android.ModuleGenPath) {
- headerFile = android.GenPathWithExt(ctx, yaccFile, "h")
+ headerFile = android.GenPathWithExt(ctx, "yacc", yaccFile, "h")
ctx.ModuleBuild(pctx, android.ModuleBuildParams{
Rule: yacc,
@@ -80,19 +80,19 @@
for i, srcFile := range srcFiles {
switch srcFile.Ext() {
case ".y":
- cFile := android.GenPathWithExt(ctx, srcFile, "c")
+ cFile := android.GenPathWithExt(ctx, "yacc", srcFile, "c")
srcFiles[i] = cFile
deps = append(deps, genYacc(ctx, srcFile, cFile, buildFlags.yaccFlags))
case ".yy":
- cppFile := android.GenPathWithExt(ctx, srcFile, "cpp")
+ cppFile := android.GenPathWithExt(ctx, "yacc", srcFile, "cpp")
srcFiles[i] = cppFile
deps = append(deps, genYacc(ctx, srcFile, cppFile, buildFlags.yaccFlags))
case ".l":
- cFile := android.GenPathWithExt(ctx, srcFile, "c")
+ cFile := android.GenPathWithExt(ctx, "lex", srcFile, "c")
srcFiles[i] = cFile
genLex(ctx, srcFile, cFile)
case ".ll":
- cppFile := android.GenPathWithExt(ctx, srcFile, "cpp")
+ cppFile := android.GenPathWithExt(ctx, "lex", srcFile, "cpp")
srcFiles[i] = cppFile
genLex(ctx, srcFile, cppFile)
case ".proto":
diff --git a/cc/proto.go b/cc/proto.go
index 3d3ca59..51f5448 100644
--- a/cc/proto.go
+++ b/cc/proto.go
@@ -15,8 +15,6 @@
package cc
import (
- "strings"
-
"github.com/google/blueprint"
"android/soong/android"
@@ -46,17 +44,14 @@
func genProto(ctx android.ModuleContext, protoFile android.Path,
protoFlags string) (android.ModuleGenPath, android.ModuleGenPath) {
- outDir := android.PathForModuleGen(ctx, "proto")
- baseName := strings.TrimSuffix(protoFile.Base(), protoFile.Ext())
-
- outFile := android.PathForModuleGen(ctx, "proto", ctx.ModuleDir(), baseName+".pb.cc")
- headerFile := android.PathForModuleGen(ctx, "proto", ctx.ModuleDir(), baseName+".pb.h")
+ outFile := android.GenPathWithExt(ctx, "proto", protoFile, "pb.cc")
+ headerFile := android.GenPathWithExt(ctx, "proto", protoFile, "pb.h")
ctx.ModuleBuild(pctx, android.ModuleBuildParams{
Rule: proto,
Outputs: android.WritablePaths{outFile, headerFile},
Input: protoFile,
Args: map[string]string{
- "outDir": outDir.String(),
+ "outDir": protoDir(ctx).String(),
"protoFlags": protoFlags,
},
})
diff --git a/genrule/genrule.go b/genrule/genrule.go
index f70c5fc..5ee8b0b 100644
--- a/genrule/genrule.go
+++ b/genrule/genrule.go
@@ -196,7 +196,7 @@
for _, in := range srcFiles {
tasks = append(tasks, generateTask{
in: android.Paths{in},
- out: android.WritablePaths{android.GenPathWithExt(ctx, in, properties.Output_extension)},
+ out: android.WritablePaths{android.GenPathWithExt(ctx, "", in, properties.Output_extension)},
})
}
return tasks
diff --git a/java/gen.go b/java/gen.go
index 52a0c79..0624708 100644
--- a/java/gen.go
+++ b/java/gen.go
@@ -57,7 +57,7 @@
)
func genAidl(ctx android.ModuleContext, aidlFile android.Path, aidlFlags string) android.Path {
- javaFile := android.GenPathWithExt(ctx, aidlFile, "java")
+ javaFile := android.GenPathWithExt(ctx, "aidl", aidlFile, "java")
depFile := javaFile.String() + ".d"
ctx.ModuleBuild(pctx, android.ModuleBuildParams{
@@ -74,7 +74,7 @@
}
func genLogtags(ctx android.ModuleContext, logtagsFile android.Path) android.Path {
- javaFile := android.GenPathWithExt(ctx, logtagsFile, "java")
+ javaFile := android.GenPathWithExt(ctx, "logtags", logtagsFile, "java")
ctx.ModuleBuild(pctx, android.ModuleBuildParams{
Rule: logtags,