diff --git a/cmd/javac_wrapper/javac_wrapper.go b/cmd/javac_wrapper/javac_wrapper.go index a86f1e925..4df49380f 100644 --- a/cmd/javac_wrapper/javac_wrapper.go +++ b/cmd/javac_wrapper/javac_wrapper.go @@ -17,6 +17,11 @@ // // It also hides the unhelpful and unhideable "warning there is a warning" // messages. +// +// Each javac build statement has an order-only dependency on the +// soong_javac_wrapper tool, which means the javac command will not be rerun +// if soong_javac_wrapper changes. That means that soong_javac_wrapper must +// not do anything that will affect the results of the build. package main import ( diff --git a/java/builder.go b/java/builder.go index a03f89271..9086d5185 100644 --- a/java/builder.go +++ b/java/builder.go @@ -39,14 +39,15 @@ var ( javac = pctx.AndroidGomaStaticRule("javac", blueprint.RuleParams{ Command: `rm -rf "$outDir" "$annoDir" && mkdir -p "$outDir" "$annoDir" && ` + - `${config.JavacWrapper}${config.JavacCmd} ${config.JavacHeapFlags} ${config.CommonJdkFlags} ` + + `${config.SoongJavacWrapper} ${config.JavacWrapper}${config.JavacCmd} ${config.JavacHeapFlags} ${config.CommonJdkFlags} ` + `$javacFlags $sourcepath $bootClasspath $classpath ` + `-source $javaVersion -target $javaVersion ` + `-d $outDir -s $annoDir @$out.rsp && ` + `${config.SoongZipCmd} -jar -o $out -C $outDir -D $outDir`, - CommandDeps: []string{"${config.JavacCmd}", "${config.SoongZipCmd}"}, - Rspfile: "$out.rsp", - RspfileContent: "$in", + CommandDeps: []string{"${config.JavacCmd}", "${config.SoongZipCmd}"}, + CommandOrderOnly: []string{"${config.SoongJavacWrapper}"}, + Rspfile: "$out.rsp", + RspfileContent: "$in", }, "javacFlags", "sourcepath", "bootClasspath", "classpath", "outDir", "annoDir", "javaVersion") @@ -69,7 +70,7 @@ var ( errorprone = pctx.AndroidStaticRule("errorprone", blueprint.RuleParams{ Command: `rm -rf "$outDir" "$annoDir" && mkdir -p "$outDir" "$annoDir" && ` + - `${config.ErrorProneCmd} ` + + `${config.SoongJavacWrapper} ${config.ErrorProneCmd} ` + `$javacFlags $sourcepath $bootClasspath $classpath ` + `-source $javaVersion -target $javaVersion ` + `-d $outDir -s $annoDir @$out.rsp && ` + @@ -80,8 +81,9 @@ var ( "${config.ErrorProneJar}", "${config.SoongZipCmd}", }, - Rspfile: "$out.rsp", - RspfileContent: "$in", + CommandOrderOnly: []string{"${config.SoongJavacWrapper}"}, + Rspfile: "$out.rsp", + RspfileContent: "$in", }, "javacFlags", "sourcepath", "bootClasspath", "classpath", "outDir", "annoDir", "javaVersion") diff --git a/java/config/config.go b/java/config/config.go index 7d1fa29bf..eb71ddb6d 100644 --- a/java/config/config.go +++ b/java/config/config.go @@ -15,7 +15,6 @@ package config import ( - "path/filepath" "strings" _ "github.com/google/blueprint/bootstrap" @@ -76,12 +75,14 @@ func init() { pctx.SourcePathVariable("JrtFsJar", "${JavaHome}/lib/jrt-fs.jar") pctx.SourcePathVariable("JarArgsCmd", "build/soong/scripts/jar-args.sh") - pctx.StaticVariable("SoongZipCmd", filepath.Join("${bootstrap.ToolDir}", "soong_zip")) - pctx.StaticVariable("MergeZipsCmd", filepath.Join("${bootstrap.ToolDir}", "merge_zips")) + pctx.HostBinToolVariable("SoongZipCmd", "soong_zip") + pctx.HostBinToolVariable("MergeZipsCmd", "merge_zips") pctx.HostBinToolVariable("DxCmd", "dx") pctx.HostJavaToolVariable("JarjarCmd", "jarjar.jar") pctx.HostJavaToolVariable("DesugarJar", "desugar.jar") + pctx.HostBinToolVariable("SoongJavacWrapper", "soong_javac_wrapper") + pctx.VariableFunc("JavacWrapper", func(config interface{}) (string, error) { if override := config.(android.Config).Getenv("JAVAC_WRAPPER"); override != "" { return override + " ", nil diff --git a/java/config/makevars.go b/java/config/makevars.go index 1453a0784..6b495924e 100644 --- a/java/config/makevars.go +++ b/java/config/makevars.go @@ -56,4 +56,6 @@ func makeVarsProvider(ctx android.MakeVarsContext) { ctx.Strict("JLINK", "${JlinkCmd}") ctx.Strict("JMOD", "${JmodCmd}") } + + ctx.Strict("SOONG_JAVAC_WRAPPER", "${SoongJavacWrapper}") }