aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--android/package_ctx.go16
-rw-r--r--java/builder.go45
-rw-r--r--java/config/config.go47
-rw-r--r--java/config/makevars.go10
-rw-r--r--java/java.go10
5 files changed, 99 insertions, 29 deletions
diff --git a/android/package_ctx.go b/android/package_ctx.go
index 53044039..2bc98aaf 100644
--- a/android/package_ctx.go
+++ b/android/package_ctx.go
@@ -75,6 +75,22 @@ func (p AndroidPackageContext) SourcePathVariable(name, path string) blueprint.V
})
}
+// SourcePathVariableWithEnvOverride returns a Variable whose value is the source directory
+// appended with the supplied path, or the value of the given environment variable if it is set.
+// The environment variable is not required to point to a path inside the source tree.
+// It may only be called during a Go package's initialization - either from the init() function or
+// as part of a package-scoped variable's initialization.
+func (p AndroidPackageContext) SourcePathVariableWithEnvOverride(name, path, env string) blueprint.Variable {
+ return p.VariableFunc(name, func(config interface{}) (string, error) {
+ ctx := &configErrorWrapper{p, config.(Config), []error{}}
+ p := safePathForSource(ctx, path)
+ if len(ctx.errors) > 0 {
+ return "", ctx.errors[0]
+ }
+ return config.(Config).GetenvWithDefault(env, p.String()), nil
+ })
+}
+
// HostBinVariable returns a Variable whose value is the path to a host tool
// in the bin directory for host targets. It may only be called during a Go
// package's initialization - either from the init() function or as part of a
diff --git a/java/builder.go b/java/builder.go
index 2e41a604..017f64f8 100644
--- a/java/builder.go
+++ b/java/builder.go
@@ -19,13 +19,11 @@ package java
// functions.
import (
- "path/filepath"
"strings"
"android/soong/android"
"github.com/google/blueprint"
- _ "github.com/google/blueprint/bootstrap"
)
var (
@@ -39,36 +37,37 @@ var (
// read from directly using @<listfile>)
javac = pctx.AndroidGomaStaticRule("javac",
blueprint.RuleParams{
- Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` +
- `${JavacWrapper}$javacCmd ` +
- `-encoding UTF-8 $javacFlags $bootClasspath $classpath ` +
- `-extdirs "" -d $outDir @$out.rsp || ( rm -rf "$outDir"; exit 41 ) && ` +
+ Command: `rm -rf "$outDir" "$annoDir" && mkdir -p "$outDir" "$annoDir" && ` +
+ `${config.JavacWrapper}${config.JavacCmd} ${config.CommonJdkFlags} ` +
+ `$javacFlags $bootClasspath $classpath ` +
+ `-source $javaVersion -target $javaVersion ` +
+ `-d $outDir -s $annoDir @$out.rsp || ( rm -rf "$outDir"; exit 41 ) && ` +
`find $outDir -name "*.class" > $out`,
Rspfile: "$out.rsp",
RspfileContent: "$in",
},
- "javacCmd", "javacFlags", "bootClasspath", "classpath", "outDir")
+ "javacFlags", "bootClasspath", "classpath", "outDir", "annoDir", "javaVersion")
jar = pctx.AndroidStaticRule("jar",
blueprint.RuleParams{
- Command: `$jarCmd -o $out $jarArgs`,
- CommandDeps: []string{"$jarCmd"},
+ Command: `${config.SoongZipCmd} -o $out -d $jarArgs`,
+ CommandDeps: []string{"${config.SoongZipCmd}"},
},
"jarCmd", "jarArgs")
dx = pctx.AndroidStaticRule("dx",
blueprint.RuleParams{
Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` +
- `$dxCmd --dex --output=$outDir $dxFlags $in || ( rm -rf "$outDir"; exit 41 ) && ` +
- `find "$outDir" -name "classes*.dex" > $out`,
- CommandDeps: []string{"$dxCmd"},
+ `${config.DxCmd} --dex --output=$outDir $dxFlags $in || ( rm -rf "$outDir"; exit 41 ) && ` +
+ `find "$outDir" -name "classes*.dex" | sort > $out`,
+ CommandDeps: []string{"${config.DxCmd}"},
},
"outDir", "dxFlags")
jarjar = pctx.AndroidStaticRule("jarjar",
blueprint.RuleParams{
- Command: "java -jar $jarjarCmd process $rulesFile $in $out",
- CommandDeps: []string{"$jarjarCmd", "$rulesFile"},
+ Command: "${config.JavaCmd} -jar ${config.JarjarCmd} process $rulesFile $in $out",
+ CommandDeps: []string{"${config.JavaCmd}", "${config.JarjarCmd}", "$rulesFile"},
},
"rulesFile")
@@ -83,19 +82,7 @@ var (
)
func init() {
- pctx.Import("github.com/google/blueprint/bootstrap")
- pctx.StaticVariable("commonJdkFlags", "-source 1.7 -target 1.7 -Xmaxerrs 9999999")
- pctx.StaticVariable("javacCmd", "javac -J-Xmx1024M $commonJdkFlags")
- pctx.StaticVariable("jarCmd", filepath.Join("${bootstrap.ToolDir}", "soong_zip"))
- pctx.HostBinToolVariable("dxCmd", "dx")
- pctx.HostJavaToolVariable("jarjarCmd", "jarjar.jar")
-
- pctx.VariableFunc("JavacWrapper", func(config interface{}) (string, error) {
- if override := config.(android.Config).Getenv("JAVAC_WRAPPER"); override != "" {
- return override + " ", nil
- }
- return "", nil
- })
+ pctx.Import("android/soong/java/config")
}
type javaBuilderFlags struct {
@@ -104,6 +91,7 @@ type javaBuilderFlags struct {
bootClasspath string
classpath string
aidlFlags string
+ javaVersion string
}
type jarSpec struct {
@@ -118,6 +106,7 @@ func TransformJavaToClasses(ctx android.ModuleContext, srcFiles android.Paths, s
flags javaBuilderFlags, deps android.Paths) jarSpec {
classDir := android.PathForModuleOut(ctx, "classes")
+ annoDir := android.PathForModuleOut(ctx, "anno")
classFileList := android.PathForModuleOut(ctx, "classes.list")
javacFlags := flags.javacFlags + android.JoinWithPrefix(srcFileLists.Strings(), "@")
@@ -135,6 +124,8 @@ func TransformJavaToClasses(ctx android.ModuleContext, srcFiles android.Paths, s
"bootClasspath": flags.bootClasspath,
"classpath": flags.classpath,
"outDir": classDir.String(),
+ "annoDir": annoDir.String(),
+ "javaVersion": flags.javaVersion,
},
})
diff --git a/java/config/config.go b/java/config/config.go
index 848d09d1..44651cb4 100644
--- a/java/config/config.go
+++ b/java/config/config.go
@@ -14,10 +14,53 @@
package config
-import "android/soong/android"
+import (
+ "path/filepath"
+ "strings"
+
+ _ "github.com/google/blueprint/bootstrap"
+
+ "android/soong/android"
+)
var (
+ pctx = android.NewPackageContext("android/soong/java/config")
+
DefaultLibraries = []string{"core-oj", "core-libart", "ext", "framework", "okhttp"}
)
-var pctx = android.NewPackageContext("android/soong/java/config")
+func init() {
+ pctx.Import("github.com/google/blueprint/bootstrap")
+
+ pctx.StaticVariable("CommonJdkFlags", strings.Join([]string{
+ `-J-Xmx2048M`,
+ `-Xmaxerrs 9999999`,
+ `-encoding UTF-8`,
+ `-sourcepath ""`,
+ `-g`,
+ }, " "))
+
+ pctx.StaticVariable("DefaultJavaVersion", "1.8")
+
+ pctx.VariableConfigMethod("hostPrebuiltTag", android.Config.PrebuiltOS)
+
+ pctx.SourcePathVariableWithEnvOverride("JavaHome",
+ "prebuilts/jdk/jdk8/${hostPrebuiltTag}", "OVERRIDE_ANDROID_JAVA_HOME")
+ pctx.SourcePathVariable("JavaToolchain", "${JavaHome}/bin")
+ pctx.SourcePathVariableWithEnvOverride("JavacCmd",
+ "${JavaToolchain}/javac", "ALTERNATE_JAVAC")
+ pctx.SourcePathVariable("JavaCmd", "${JavaToolchain}/java")
+ pctx.SourcePathVariable("JarCmd", "${JavaToolchain}/jar")
+ pctx.SourcePathVariable("JavadocCmd", "${JavaToolchain}/javadoc")
+
+ pctx.StaticVariable("SoongZipCmd", filepath.Join("${bootstrap.ToolDir}", "soong_zip"))
+ pctx.HostBinToolVariable("DxCmd", "dx")
+ pctx.HostJavaToolVariable("JarjarCmd", "jarjar.jar")
+
+ pctx.VariableFunc("JavacWrapper", func(config interface{}) (string, error) {
+ if override := config.(android.Config).Getenv("JAVAC_WRAPPER"); override != "" {
+ return override + " ", nil
+ }
+ return "", nil
+ })
+}
diff --git a/java/config/makevars.go b/java/config/makevars.go
index 67024543..ec0d9397 100644
--- a/java/config/makevars.go
+++ b/java/config/makevars.go
@@ -26,4 +26,14 @@ func init() {
func makeVarsProvider(ctx android.MakeVarsContext) {
ctx.Strict("TARGET_DEFAULT_JAVA_LIBRARIES", strings.Join(DefaultLibraries, " "))
+
+ ctx.Strict("DEFAULT_JAVA_LANGUAGE_VERSION", "${DefaultJavaVersion}")
+
+ ctx.Strict("ANDROID_JAVA_HOME", "${JavaHome}")
+ ctx.Strict("ANDROID_JAVA_TOOLCHAIN", "${JavaToolchain}")
+ ctx.Strict("JAVA", "${JavaCmd}")
+ ctx.Strict("JAVAC", "${JavacCmd}")
+ ctx.Strict("JAR", "${JarCmd}")
+ ctx.Strict("JAVADOC", "${JavadocCmd}")
+ ctx.Strict("COMMON_JDK_FLAGS", "${CommonJdkFlags}")
}
diff --git a/java/java.go b/java/java.go
index 37d959bc..4c614e5d 100644
--- a/java/java.go
+++ b/java/java.go
@@ -92,6 +92,9 @@ type CompilerProperties struct {
// if not blank, run jarjar using the specified rules file
Jarjar_rules *string
+
+ // If not blank, set the java version passed to javac as -source and -target
+ Java_version *string
}
type CompilerDeviceProperties struct {
@@ -285,6 +288,13 @@ func (j *Module) compile(ctx android.ModuleContext) {
var flags javaBuilderFlags
javacFlags := j.properties.Javacflags
+
+ if j.properties.Java_version != nil {
+ flags.javaVersion = *j.properties.Java_version
+ } else {
+ flags.javaVersion = "${config.DefaultJavaVersion}"
+ }
+
if len(javacFlags) > 0 {
ctx.Variable(pctx, "javacFlags", strings.Join(javacFlags, " "))
flags.javacFlags = "$javacFlags"