From 21ec49068f7be873e963dd8dc5cff610539540c5 Mon Sep 17 00:00:00 2001 From: Dan Willemsen Date: Wed, 2 Nov 2016 20:43:13 -0700 Subject: [PATCH 1/2] 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 --- android/paths.go | 16 ++++++++-------- cc/builder.go | 4 ++-- cc/gen.go | 10 +++++----- cc/proto.go | 11 +++-------- genrule/genrule.go | 2 +- java/gen.go | 4 ++-- 6 files changed, 21 insertions(+), 26 deletions(-) diff --git a/android/paths.go b/android/paths.go index 56c3715f0..1202d6d47 100644 --- a/android/paths.go +++ b/android/paths.go @@ -94,7 +94,7 @@ type WritablePath interface { } 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 @@ type resPathProvider interface { // 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 @@ func GenPathWithExt(ctx ModuleContext, p Path, ext string) ModuleGenPath { // 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 @@ func (p ModuleSrcPath) String() string { 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 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? - 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 faa39d152..f795bba80 100644 --- a/cc/builder.go +++ b/cc/builder.go @@ -234,7 +234,7 @@ func TransformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles and } 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 @@ func TransformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles and }) 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 145189562..9d3a67cf6 100644 --- a/cc/gen.go +++ b/cc/gen.go @@ -48,7 +48,7 @@ var ( ) 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 @@ func genSources(ctx android.ModuleContext, srcFiles android.Paths, 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 3d3ca59f7..51f544898 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 @@ var ( 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 f70c5fc33..5ee8b0bc2 100644 --- a/genrule/genrule.go +++ b/genrule/genrule.go @@ -196,7 +196,7 @@ func GenSrcsFactory() (blueprint.Module, []interface{}) { 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 52a0c799d..062470854 100644 --- a/java/gen.go +++ b/java/gen.go @@ -57,7 +57,7 @@ var ( ) 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 genAidl(ctx android.ModuleContext, aidlFile android.Path, aidlFlags string) } 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, From e1a3ce3609bb29d0ad6a0126ad30bb0cb222093d Mon Sep 17 00:00:00 2001 From: Dan Willemsen Date: Wed, 2 Nov 2016 20:44:08 -0700 Subject: [PATCH 2/2] Add yacc generated headers to the include path Test: mmma -j system/tools/aidl Change-Id: I444c7f2b004877e027f67e36e016b528511e1a32 --- cc/compiler.go | 13 +++++++++---- cc/library.go | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/cc/compiler.go b/cc/compiler.go index 454be5e3b..a14f39773 100644 --- a/cc/compiler.go +++ b/cc/compiler.go @@ -124,7 +124,7 @@ func (compiler *baseCompiler) compilerDeps(ctx BaseModuleContext, deps Deps) Dep deps.GeneratedSources = append(deps.GeneratedSources, compiler.Properties.Generated_sources...) deps.GeneratedHeaders = append(deps.GeneratedHeaders, compiler.Properties.Generated_headers...) - if compiler.hasProto() { + if compiler.hasSrcExt(".proto") { deps = protoDeps(ctx, deps, &compiler.Proto) } @@ -322,16 +322,21 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags) Flag flags.CFlags = append(flags.CFlags, "-DANDROID_STRICT") } - if compiler.hasProto() { + if compiler.hasSrcExt(".proto") { flags = protoFlags(ctx, flags, &compiler.Proto) } + if compiler.hasSrcExt(".y") || compiler.hasSrcExt(".yy") { + flags.GlobalFlags = append(flags.GlobalFlags, + "-I"+android.PathForModuleGen(ctx, "yacc", ctx.ModuleDir()).String()) + } + return flags } -func (compiler *baseCompiler) hasProto() bool { +func (compiler *baseCompiler) hasSrcExt(ext string) bool { for _, src := range compiler.Properties.Srcs { - if filepath.Ext(src) == ".proto" { + if filepath.Ext(src) == ext { return true } } diff --git a/cc/library.go b/cc/library.go index dcfc077d2..73efb9eab 100644 --- a/cc/library.go +++ b/cc/library.go @@ -477,7 +477,7 @@ func (library *libraryDecorator) link(ctx ModuleContext, library.reexportFlags(deps.ReexportedFlags) library.reexportDeps(deps.ReexportedFlagsDeps) - if library.baseCompiler.hasProto() { + if library.baseCompiler.hasSrcExt(".proto") { if library.Properties.Proto.Export_proto_headers { library.reexportFlags([]string{ "-I" + protoSubDir(ctx).String(),