From 2907459e430f0cba0257badcc038817a73d570f3 Mon Sep 17 00:00:00 2001 From: Jiyong Park Date: Sun, 7 Jul 2019 16:27:47 +0900 Subject: [PATCH] filegroup.path is used to specify the include path for aidl files filegroup { name: "foo", srcs: ["srcs/aidl/com/android/**/*.aidl"], path: "srcs/aidl", } cc_library { // or java_library, etc. name: "bar", srcs: [":foo"], } automatically adds "-Ipath/to/foo/srcs/aidl" when compiling the aidl files from foo for bar. This allows us to omit aidl include path when using sources in other places via file group. Bug: 135922046 Test: m (unit tests added) Change-Id: I9b42f316f2858fb6da72c2f58a314f391416e809 --- cc/cc_test.go | 3 +++ cc/gen.go | 5 +++++ cc/gen_test.go | 10 +++++++++- cc/testing.go | 1 + java/gen.go | 6 ++++++ java/java_test.go | 17 +++++++++++++++-- 6 files changed, 39 insertions(+), 3 deletions(-) diff --git a/cc/cc_test.go b/cc/cc_test.go index a1b753cc9..c619b5aa8 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -2277,6 +2277,9 @@ func TestFuzzTarget(t *testing.T) { ctx.ModuleForTests("fuzz_smoke_test", variant).Rule("cc") } +func TestAidl(t *testing.T) { +} + func assertString(t *testing.T, got, expected string) { t.Helper() if got != expected { diff --git a/cc/gen.go b/cc/gen.go index f8007e6bc..42b0cbe1a 100644 --- a/cc/gen.go +++ b/cc/gen.go @@ -120,6 +120,11 @@ func genAidl(ctx android.ModuleContext, rule *android.RuleBuilder, aidlFile andr headerBn := outDir.Join(ctx, aidlPackage, "Bn"+shortName+".h") headerBp := outDir.Join(ctx, aidlPackage, "Bp"+shortName+".h") + baseDir := strings.TrimSuffix(aidlFile.String(), aidlFile.Rel()) + if baseDir != "" { + aidlFlags += " -I" + baseDir + } + cmd := rule.Command() cmd.BuiltTool(ctx, "aidl-cpp"). FlagWithDepFile("-d", depFile). diff --git a/cc/gen_test.go b/cc/gen_test.go index e4219d999..da3b4e8ad 100644 --- a/cc/gen_test.go +++ b/cc/gen_test.go @@ -16,6 +16,7 @@ package cc import ( "path/filepath" + "strings" "testing" ) @@ -42,7 +43,8 @@ func TestGen(t *testing.T) { ctx := testCc(t, ` filegroup { name: "fg", - srcs: ["b.aidl"], + srcs: ["sub/c.aidl"], + path: "sub", } cc_library_shared { @@ -59,6 +61,12 @@ func TestGen(t *testing.T) { if !inList("-I"+filepath.Dir(aidl.Output.String()), libfoo.flags.GlobalFlags) { t.Errorf("missing aidl includes in global flags") } + + aidlCommand := aidl.RuleParams.Command + if !strings.Contains(aidlCommand, "-Isub") { + t.Errorf("aidl command for c.aidl should contain \"-Isub\", but was %q", aidlCommand) + } + }) } diff --git a/cc/testing.go b/cc/testing.go index bf806bc5a..f0ad33b91 100644 --- a/cc/testing.go +++ b/cc/testing.go @@ -265,6 +265,7 @@ func CreateTestContext(bp string, fs map[string][]byte, "bar.c": nil, "a.proto": nil, "b.aidl": nil, + "sub/c.aidl": nil, "my_include": nil, "foo.map.txt": nil, "liba.so": nil, diff --git a/java/gen.go b/java/gen.go index b1c028d12..69965ecec 100644 --- a/java/gen.go +++ b/java/gen.go @@ -15,6 +15,8 @@ package java import ( + "strings" + "github.com/google/blueprint" "android/soong/android" @@ -63,6 +65,10 @@ var ( func genAidl(ctx android.ModuleContext, aidlFile android.Path, aidlFlags string, deps android.Paths) android.Path { javaFile := android.GenPathWithExt(ctx, "aidl", aidlFile, "java") depFile := javaFile.String() + ".d" + baseDir := strings.TrimSuffix(aidlFile.String(), aidlFile.Rel()) + if baseDir != "" { + aidlFlags += " -I" + baseDir + } ctx.Build(pctx, android.BuildParams{ Rule: aidl, diff --git a/java/java_test.go b/java/java_test.go index 5942afe00..4c85bed99 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -192,6 +192,7 @@ func testContext(bp string, fs map[string][]byte) *android.TestContext { "bar-doc/a.java": nil, "bar-doc/b.java": nil, "bar-doc/IFoo.aidl": nil, + "bar-doc/IBar.aidl": nil, "bar-doc/known_oj_tags.txt": nil, "external/doclava/templates-sdk": nil, @@ -754,11 +755,17 @@ func TestDroiddoc(t *testing.T) { name: "droiddoc-templates-sdk", path: ".", } + filegroup { + name: "bar-doc-aidl-srcs", + srcs: ["bar-doc/IBar.aidl"], + path: "bar-doc", + } droiddoc { name: "bar-doc", srcs: [ "bar-doc/*.java", "bar-doc/IFoo.aidl", + ":bar-doc-aidl-srcs", ], exclude_srcs: [ "bar-doc/b.java" @@ -786,8 +793,14 @@ func TestDroiddoc(t *testing.T) { for _, i := range inputs { javaSrcs = append(javaSrcs, i.Base()) } - if len(javaSrcs) != 2 || javaSrcs[0] != "a.java" || javaSrcs[1] != "IFoo.java" { - t.Errorf("inputs of bar-doc must be []string{\"a.java\", \"IFoo.java\", but was %#v.", javaSrcs) + if len(javaSrcs) != 3 || javaSrcs[0] != "a.java" || javaSrcs[1] != "IFoo.java" || javaSrcs[2] != "IBar.java" { + t.Errorf("inputs of bar-doc must be []string{\"a.java\", \"IFoo.java\", \"IBar.java\", but was %#v.", javaSrcs) + } + + aidlRule := ctx.ModuleForTests("bar-doc", "android_common").Output(inputs[2].String()) + aidlFlags := aidlRule.Args["aidlFlags"] + if !strings.Contains(aidlFlags, "-Ibar-doc") { + t.Errorf("aidl flags for IBar.aidl should contain \"-Ibar-doc\", but was %q", aidlFlags) } }