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
This commit is contained in:
Dan Willemsen 2016-11-02 20:43:13 -07:00
parent eb716e2559
commit 21ec49068f
6 changed files with 21 additions and 26 deletions

View file

@ -94,7 +94,7 @@ type WritablePath interface {
} }
type genPathProvider interface { type genPathProvider interface {
genPathWithExt(ctx ModuleContext, ext string) ModuleGenPath genPathWithExt(ctx ModuleContext, subdir, ext string) ModuleGenPath
} }
type objPathProvider interface { type objPathProvider interface {
objPathWithExt(ctx ModuleContext, subdir, ext string) ModuleObjPath objPathWithExt(ctx ModuleContext, subdir, ext string) ModuleObjPath
@ -105,9 +105,9 @@ type resPathProvider interface {
// GenPathWithExt derives a new file path in ctx's generated sources directory // GenPathWithExt derives a new file path in ctx's generated sources directory
// from the current path, but with the new extension. // 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 { 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) reportPathError(ctx, "Tried to create generated file from unsupported path: %s(%s)", reflect.TypeOf(p).Name(), p)
return PathForModuleGen(ctx) return PathForModuleGen(ctx)
@ -115,7 +115,7 @@ func GenPathWithExt(ctx ModuleContext, p Path, ext string) ModuleGenPath {
// ObjPathWithExt derives a new file path in ctx's object directory from the // ObjPathWithExt derives a new file path in ctx's object directory from the
// current path, but with the new extension. // 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 { if path, ok := p.(objPathProvider); ok {
return path.objPathWithExt(ctx, subdir, ext) return path.objPathWithExt(ctx, subdir, ext)
} }
@ -535,8 +535,8 @@ func (p ModuleSrcPath) String() string {
return p.sourcePath.String() return p.sourcePath.String()
} }
func (p ModuleSrcPath) genPathWithExt(ctx ModuleContext, ext string) ModuleGenPath { func (p ModuleSrcPath) genPathWithExt(ctx ModuleContext, subdir, ext string) ModuleGenPath {
return PathForModuleGen(ctx, p.moduleDir, pathtools.ReplaceExtension(p.path, ext)) return PathForModuleGen(ctx, subdir, p.moduleDir, pathtools.ReplaceExtension(p.path, ext))
} }
func (p ModuleSrcPath) objPathWithExt(ctx ModuleContext, subdir, ext string) ModuleObjPath { func (p ModuleSrcPath) objPathWithExt(ctx ModuleContext, subdir, ext string) ModuleObjPath {
@ -583,9 +583,9 @@ func PathForModuleGen(ctx ModuleContext, paths ...string) ModuleGenPath {
} }
} }
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? // 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 { func (p ModuleGenPath) objPathWithExt(ctx ModuleContext, subdir, ext string) ModuleObjPath {

View file

@ -234,7 +234,7 @@ func TransformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles and
} }
for i, srcFile := range srcFiles { for i, srcFile := range srcFiles {
objFile := android.ObjPathWithExt(ctx, srcFile, subdir, "o") objFile := android.ObjPathWithExt(ctx, subdir, srcFile, "o")
objFiles[i] = objFile objFiles[i] = objFile
@ -285,7 +285,7 @@ func TransformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles and
}) })
if tidy { if tidy {
tidyFile := android.ObjPathWithExt(ctx, srcFile, subdir, "tidy") tidyFile := android.ObjPathWithExt(ctx, subdir, srcFile, "tidy")
tidyFiles = append(tidyFiles, tidyFile) tidyFiles = append(tidyFiles, tidyFile)
ctx.ModuleBuild(pctx, android.ModuleBuildParams{ ctx.ModuleBuild(pctx, android.ModuleBuildParams{

View file

@ -48,7 +48,7 @@ var (
) )
func genYacc(ctx android.ModuleContext, yaccFile android.Path, outFile android.ModuleGenPath, yaccFlags string) (headerFile android.ModuleGenPath) { 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{ ctx.ModuleBuild(pctx, android.ModuleBuildParams{
Rule: yacc, Rule: yacc,
@ -80,19 +80,19 @@ func genSources(ctx android.ModuleContext, srcFiles android.Paths,
for i, srcFile := range srcFiles { for i, srcFile := range srcFiles {
switch srcFile.Ext() { switch srcFile.Ext() {
case ".y": case ".y":
cFile := android.GenPathWithExt(ctx, srcFile, "c") cFile := android.GenPathWithExt(ctx, "yacc", srcFile, "c")
srcFiles[i] = cFile srcFiles[i] = cFile
deps = append(deps, genYacc(ctx, srcFile, cFile, buildFlags.yaccFlags)) deps = append(deps, genYacc(ctx, srcFile, cFile, buildFlags.yaccFlags))
case ".yy": case ".yy":
cppFile := android.GenPathWithExt(ctx, srcFile, "cpp") cppFile := android.GenPathWithExt(ctx, "yacc", srcFile, "cpp")
srcFiles[i] = cppFile srcFiles[i] = cppFile
deps = append(deps, genYacc(ctx, srcFile, cppFile, buildFlags.yaccFlags)) deps = append(deps, genYacc(ctx, srcFile, cppFile, buildFlags.yaccFlags))
case ".l": case ".l":
cFile := android.GenPathWithExt(ctx, srcFile, "c") cFile := android.GenPathWithExt(ctx, "lex", srcFile, "c")
srcFiles[i] = cFile srcFiles[i] = cFile
genLex(ctx, srcFile, cFile) genLex(ctx, srcFile, cFile)
case ".ll": case ".ll":
cppFile := android.GenPathWithExt(ctx, srcFile, "cpp") cppFile := android.GenPathWithExt(ctx, "lex", srcFile, "cpp")
srcFiles[i] = cppFile srcFiles[i] = cppFile
genLex(ctx, srcFile, cppFile) genLex(ctx, srcFile, cppFile)
case ".proto": case ".proto":

View file

@ -15,8 +15,6 @@
package cc package cc
import ( import (
"strings"
"github.com/google/blueprint" "github.com/google/blueprint"
"android/soong/android" "android/soong/android"
@ -46,17 +44,14 @@ var (
func genProto(ctx android.ModuleContext, protoFile android.Path, func genProto(ctx android.ModuleContext, protoFile android.Path,
protoFlags string) (android.ModuleGenPath, android.ModuleGenPath) { protoFlags string) (android.ModuleGenPath, android.ModuleGenPath) {
outDir := android.PathForModuleGen(ctx, "proto") outFile := android.GenPathWithExt(ctx, "proto", protoFile, "pb.cc")
baseName := strings.TrimSuffix(protoFile.Base(), protoFile.Ext()) headerFile := android.GenPathWithExt(ctx, "proto", protoFile, "pb.h")
outFile := android.PathForModuleGen(ctx, "proto", ctx.ModuleDir(), baseName+".pb.cc")
headerFile := android.PathForModuleGen(ctx, "proto", ctx.ModuleDir(), baseName+".pb.h")
ctx.ModuleBuild(pctx, android.ModuleBuildParams{ ctx.ModuleBuild(pctx, android.ModuleBuildParams{
Rule: proto, Rule: proto,
Outputs: android.WritablePaths{outFile, headerFile}, Outputs: android.WritablePaths{outFile, headerFile},
Input: protoFile, Input: protoFile,
Args: map[string]string{ Args: map[string]string{
"outDir": outDir.String(), "outDir": protoDir(ctx).String(),
"protoFlags": protoFlags, "protoFlags": protoFlags,
}, },
}) })

View file

@ -196,7 +196,7 @@ func GenSrcsFactory() (blueprint.Module, []interface{}) {
for _, in := range srcFiles { for _, in := range srcFiles {
tasks = append(tasks, generateTask{ tasks = append(tasks, generateTask{
in: android.Paths{in}, 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 return tasks

View file

@ -57,7 +57,7 @@ var (
) )
func genAidl(ctx android.ModuleContext, aidlFile android.Path, aidlFlags string) android.Path { 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" depFile := javaFile.String() + ".d"
ctx.ModuleBuild(pctx, android.ModuleBuildParams{ ctx.ModuleBuild(pctx, android.ModuleBuildParams{
@ -74,7 +74,7 @@ func genAidl(ctx android.ModuleContext, aidlFile android.Path, aidlFlags string)
} }
func genLogtags(ctx android.ModuleContext, logtagsFile android.Path) android.Path { 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{ ctx.ModuleBuild(pctx, android.ModuleBuildParams{
Rule: logtags, Rule: logtags,