From 535e2cf4e1aa7b942e4662f6073517df0c00d09e Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Fri, 20 Oct 2017 17:57:49 -0700 Subject: [PATCH 1/3] Support installable prebuilt jars Some host modules need to be installed. Add an installable property. Test: m checkbuild Change-Id: Ifd023213ff66e81aa77ba1741c75837a1dd88d1d --- java/androidmk.go | 2 +- java/java.go | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/java/androidmk.go b/java/androidmk.go index c61b7e56a..d3aadef3d 100644 --- a/java/androidmk.go +++ b/java/androidmk.go @@ -74,7 +74,7 @@ func (prebuilt *Import) AndroidMk() android.AndroidMkData { Include: "$(BUILD_SYSTEM)/soong_java_prebuilt.mk", Extra: []android.AndroidMkExtraFunc{ func(w io.Writer, outputFile android.Path) { - fmt.Fprintln(w, "LOCAL_UNINSTALLABLE_MODULE := true") + fmt.Fprintln(w, "LOCAL_UNINSTALLABLE_MODULE := ", !proptools.Bool(prebuilt.properties.Installable)) fmt.Fprintln(w, "LOCAL_SOONG_HEADER_JAR :=", prebuilt.combinedClasspathFile.String()) fmt.Fprintln(w, "LOCAL_SDK_VERSION :=", prebuilt.properties.Sdk_version) }, diff --git a/java/java.go b/java/java.go index 497b28510..fbd7bdd8b 100644 --- a/java/java.go +++ b/java/java.go @@ -920,6 +920,8 @@ type ImportProperties struct { Jars []string Sdk_version string + + Installable *bool } type Import struct { From 15e86d938bea0cf95f2694714fbc4dc35ee2a30e Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Fri, 20 Oct 2017 15:07:08 -0700 Subject: [PATCH 2/3] Support multiple outputs in genrules with depfile: true Ninja doesn't support depfiles on a rule with multiple outputs. Use a single output and put all the rest as implicit outputs. Bug: 68057449 Test: java_test.go Change-Id: Ia544493b1b3b51b185c865149d8f3e0eb3c57ee2 --- genrule/genrule.go | 22 +++++++++++++++------- java/java_test.go | 6 +++--- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/genrule/genrule.go b/genrule/genrule.go index 4a734dad2..e47035310 100644 --- a/genrule/genrule.go +++ b/genrule/genrule.go @@ -260,13 +260,13 @@ func (g *Module) GenerateAndroidBuildActions(ctx android.ModuleContext) { // recall that Sprintf replaces percent sign expressions, whereas dollar signs expressions remain as written, // to be replaced later by ninja_strings.go - sandboxCommand := fmt.Sprintf("$sboxCmd --sandbox-path %s --output-root %s -c %q $out", sandboxPath, buildDir, rawCommand) + sandboxCommand := fmt.Sprintf("$sboxCmd --sandbox-path %s --output-root %s -c %q $allouts", sandboxPath, buildDir, rawCommand) ruleParams := blueprint.RuleParams{ Command: sandboxCommand, CommandDeps: []string{"$sboxCmd"}, } - var args []string + args := []string{"allouts"} if g.properties.Depfile { ruleParams.Deps = blueprint.DepsGCC args = append(args, "depfile") @@ -281,16 +281,24 @@ func (g *Module) GenerateAndroidBuildActions(ctx android.ModuleContext) { func (g *Module) generateSourceFile(ctx android.ModuleContext, task generateTask) { desc := "generate" + if len(task.out) == 0 { + ctx.ModuleErrorf("must have at least one output file") + return + } if len(task.out) == 1 { desc += " " + task.out[0].Base() } params := android.ModuleBuildParams{ - Rule: g.rule, - Description: "generate", - Outputs: task.out, - Inputs: task.in, - Implicits: g.deps, + Rule: g.rule, + Description: "generate", + Output: task.out[0], + ImplicitOutputs: task.out[1:], + Inputs: task.in, + Implicits: g.deps, + Args: map[string]string{ + "allouts": strings.Join(task.out.Strings(), " "), + }, } if g.properties.Depfile { depfile := android.GenPathWithExt(ctx, "", task.out[0], task.out[0].Ext()+".d") diff --git a/java/java_test.go b/java/java_test.go index 451f58e9b..8ac4b3b2f 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -613,13 +613,13 @@ func TestGeneratedSources(t *testing.T) { javac := ctx.ModuleForTests("foo", "android_common").Rule("javac") genrule := ctx.ModuleForTests("gen", "").Rule("generator") - if len(genrule.Outputs) != 1 || filepath.Base(genrule.Outputs[0].String()) != "gen.java" { - t.Fatalf(`gen output file %v is not [".../gen.java"]`, genrule.Outputs.Strings()) + if filepath.Base(genrule.Output.String()) != "gen.java" { + t.Fatalf(`gen output file %v is not ".../gen.java"`, genrule.Output.String()) } if len(javac.Inputs) != 3 || javac.Inputs[0].String() != "a.java" || - javac.Inputs[1].String() != genrule.Outputs[0].String() || + javac.Inputs[1].String() != genrule.Output.String() || javac.Inputs[2].String() != "b.java" { t.Errorf(`foo inputs %v != ["a.java", ".../gen.java", "b.java"]`, javac.Inputs) } From e243c231da6fca6c40f8075bf014094f4ec0fce0 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Sat, 21 Oct 2017 15:16:37 -0700 Subject: [PATCH 3/3] Fix finding src directory for aidl aidlFlags was always looking for a src directory at the top level instead of in the module's source directory. Test: m checkbuild Change-Id: Ie31baa21c8632c2bd9a6ebc42e6291417b1f31cd --- java/java.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/java.go b/java/java.go index fbd7bdd8b..8941b4d7f 100644 --- a/java/java.go +++ b/java/java.go @@ -374,7 +374,7 @@ func (j *Module) aidlFlags(ctx android.ModuleContext, aidlPreprocess android.Opt flags = append(flags, android.JoinWithPrefix(j.exportAidlIncludeDirs.Strings(), "-I")) flags = append(flags, android.JoinWithPrefix(localAidlIncludes.Strings(), "-I")) flags = append(flags, "-I"+android.PathForModuleSrc(ctx).String()) - if src := android.ExistentPathForSource(ctx, "", "src"); src.Valid() { + if src := android.ExistentPathForSource(ctx, "", ctx.ModuleDir(), "src"); src.Valid() { flags = append(flags, "-I"+src.String()) }