Loading Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -248,6 +248,7 @@ bootstrap_go_package { "java/java.go", "java/jdeps.go", "java/java_resources.go", "java/kotlin.go", "java/prebuilt_apis.go", "java/proto.go", "java/sdk.go", Loading @@ -260,6 +261,7 @@ bootstrap_go_package { "java/dexpreopt_test.go", "java/java_test.go", "java/jdeps_test.go", "java/kotlin_test.go", "java/sdk_test.go", ], pluginFor: ["soong_build"], Loading android/config.go +1 −0 Original line number Diff line number Diff line Loading @@ -241,6 +241,7 @@ func TestArchConfig(buildDir string, env map[string]string) Config { } config.BuildOsVariant = config.Targets[BuildOs][0].String() config.BuildOsCommonVariant = getCommonTargets(config.Targets[BuildOs])[0].String() return testConfig } Loading java/builder.go +3 −52 Original line number Diff line number Diff line Loading @@ -60,26 +60,6 @@ var ( "javacFlags", "bootClasspath", "classpath", "processorpath", "srcJars", "srcJarDir", "outDir", "annoDir", "javaVersion") kotlinc = pctx.AndroidGomaStaticRule("kotlinc", blueprint.RuleParams{ Command: `rm -rf "$classesDir" "$srcJarDir" "$kotlinBuildFile" && mkdir -p "$classesDir" "$srcJarDir" && ` + `${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` + `${config.GenKotlinBuildFileCmd} $classpath $classesDir $out.rsp $srcJarDir/list > $kotlinBuildFile &&` + `${config.KotlincCmd} $kotlincFlags ` + `-jvm-target $kotlinJvmTarget -Xbuild-file=$kotlinBuildFile && ` + `${config.SoongZipCmd} -jar -o $out -C $classesDir -D $classesDir`, CommandDeps: []string{ "${config.KotlincCmd}", "${config.KotlinCompilerJar}", "${config.GenKotlinBuildFileCmd}", "${config.SoongZipCmd}", "${config.ZipSyncCmd}", }, Rspfile: "$out.rsp", RspfileContent: `$in`, }, "kotlincFlags", "classpath", "srcJars", "srcJarDir", "classesDir", "kotlinJvmTarget", "kotlinBuildFile") turbine = pctx.AndroidStaticRule("turbine", blueprint.RuleParams{ Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` + Loading Loading @@ -177,35 +157,6 @@ type javaBuilderFlags struct { protoRoot bool } func TransformKotlinToClasses(ctx android.ModuleContext, outputFile android.WritablePath, srcFiles, srcJars android.Paths, flags javaBuilderFlags) { inputs := append(android.Paths(nil), srcFiles...) var deps android.Paths deps = append(deps, flags.kotlincClasspath...) deps = append(deps, srcJars...) ctx.Build(pctx, android.BuildParams{ Rule: kotlinc, Description: "kotlinc", Output: outputFile, Inputs: inputs, Implicits: deps, Args: map[string]string{ "classpath": flags.kotlincClasspath.FormJavaClassPath("-classpath"), "kotlincFlags": flags.kotlincFlags, "srcJars": strings.Join(srcJars.Strings(), " "), "classesDir": android.PathForModuleOut(ctx, "kotlinc", "classes").String(), "srcJarDir": android.PathForModuleOut(ctx, "kotlinc", "srcJars").String(), "kotlinBuildFile": android.PathForModuleOut(ctx, "kotlinc-build.xml").String(), // http://b/69160377 kotlinc only supports -jvm-target 1.6 and 1.8 "kotlinJvmTarget": "1.8", }, }) } func TransformJavaToClasses(ctx android.ModuleContext, outputFile android.WritablePath, shardIdx int, srcFiles, srcJars android.Paths, flags javaBuilderFlags, deps android.Paths) { Loading Loading @@ -464,7 +415,7 @@ func (x *classpath) FormTurbineClasspath(optName string) []string { } flags := make([]string, len(*x)) for i, v := range *x { flags[i] = optName + " " + v.String() flags[i] = optName + v.String() } return flags Loading java/config/kotlin.go +11 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,8 @@ package config import "strings" var ( KotlinStdlibJar = "external/kotlinc/lib/kotlin-stdlib.jar" KotlincIllegalFlags = []string{ Loading @@ -25,5 +27,14 @@ var ( func init() { pctx.SourcePathVariable("KotlincCmd", "external/kotlinc/bin/kotlinc") pctx.SourcePathVariable("KotlinCompilerJar", "external/kotlinc/lib/kotlin-compiler.jar") pctx.SourcePathVariable("KotlinKaptJar", "external/kotlinc/lib/kotlin-annotation-processing.jar") pctx.SourcePathVariable("KotlinStdlibJar", KotlinStdlibJar) // These flags silence "Illegal reflective access" warnings when running kotlinc in OpenJDK9 pctx.StaticVariable("KotlincSuppressJDK9Warnings", strings.Join([]string{ "-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED", "-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED", "-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED", "-J--add-opens=java.base/sun.net.www.protocol.jar=ALL-UNNAMED", }, " ")) } java/java.go +22 −5 Original line number Diff line number Diff line Loading @@ -379,6 +379,7 @@ var ( frameworkResTag = dependencyTag{name: "framework-res"} frameworkApkTag = dependencyTag{name: "framework-apk"} kotlinStdlibTag = dependencyTag{name: "kotlin-stdlib"} kotlinAnnotationsTag = dependencyTag{name: "kotlin-annotations"} proguardRaiseTag = dependencyTag{name: "proguard-raise"} certificateTag = dependencyTag{name: "certificate"} instrumentationForTag = dependencyTag{name: "instrumentation_for"} Loading Loading @@ -483,6 +484,9 @@ func (j *Module) deps(ctx android.BottomUpMutatorContext) { // TODO(ccross): move this to a mutator pass that can tell if generated sources contain // Kotlin files ctx.AddVariationDependencies(nil, kotlinStdlibTag, "kotlin-stdlib") if len(j.properties.Annotation_processors) > 0 { ctx.AddVariationDependencies(nil, kotlinAnnotationsTag, "kotlin-annotations") } } if j.shouldInstrumentStatic(ctx) { Loading Loading @@ -564,6 +568,7 @@ type deps struct { systemModules android.Path aidlPreprocess android.OptionalPath kotlinStdlib android.Paths kotlinAnnotations android.Paths } func checkProducesJars(ctx android.ModuleContext, dep android.SourceFileProducer) { Loading Loading @@ -723,6 +728,8 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps { } case kotlinStdlibTag: deps.kotlinStdlib = dep.HeaderJars() case kotlinAnnotationsTag: deps.kotlinAnnotations = dep.HeaderJars() } deps.aidlIncludeDirs = append(deps.aidlIncludeDirs, dep.AidlIncludeDirs()...) Loading Loading @@ -969,18 +976,28 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path kotlinSrcFiles = append(kotlinSrcFiles, uniqueSrcFiles...) kotlinSrcFiles = append(kotlinSrcFiles, srcFiles.FilterByExt(".kt")...) flags.kotlincClasspath = append(flags.kotlincClasspath, deps.bootClasspath...) flags.kotlincClasspath = append(flags.kotlincClasspath, deps.kotlinStdlib...) flags.kotlincClasspath = append(flags.kotlincClasspath, deps.classpath...) flags.classpath = append(flags.classpath, deps.kotlinStdlib...) flags.classpath = append(flags.classpath, deps.kotlinAnnotations...) flags.kotlincClasspath = append(flags.kotlincClasspath, flags.bootClasspath...) flags.kotlincClasspath = append(flags.kotlincClasspath, flags.classpath...) if len(flags.processorPath) > 0 { // Use kapt for annotation processing kaptSrcJar := android.PathForModuleOut(ctx, "kapt", "kapt-sources.jar") kotlinKapt(ctx, kaptSrcJar, kotlinSrcFiles, srcJars, flags) srcJars = append(srcJars, kaptSrcJar) // Disable annotation processing in javac, it's already been handled by kapt flags.processorPath = nil } kotlinJar := android.PathForModuleOut(ctx, "kotlin", jarName) TransformKotlinToClasses(ctx, kotlinJar, kotlinSrcFiles, srcJars, flags) kotlinCompile(ctx, kotlinJar, kotlinSrcFiles, srcJars, flags) if ctx.Failed() { return } // Make javac rule depend on the kotlinc rule flags.classpath = append(flags.classpath, deps.kotlinStdlib...) flags.classpath = append(flags.classpath, kotlinJar) // Jar kotlin classes into the final jar after javac Loading Loading
Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -248,6 +248,7 @@ bootstrap_go_package { "java/java.go", "java/jdeps.go", "java/java_resources.go", "java/kotlin.go", "java/prebuilt_apis.go", "java/proto.go", "java/sdk.go", Loading @@ -260,6 +261,7 @@ bootstrap_go_package { "java/dexpreopt_test.go", "java/java_test.go", "java/jdeps_test.go", "java/kotlin_test.go", "java/sdk_test.go", ], pluginFor: ["soong_build"], Loading
android/config.go +1 −0 Original line number Diff line number Diff line Loading @@ -241,6 +241,7 @@ func TestArchConfig(buildDir string, env map[string]string) Config { } config.BuildOsVariant = config.Targets[BuildOs][0].String() config.BuildOsCommonVariant = getCommonTargets(config.Targets[BuildOs])[0].String() return testConfig } Loading
java/builder.go +3 −52 Original line number Diff line number Diff line Loading @@ -60,26 +60,6 @@ var ( "javacFlags", "bootClasspath", "classpath", "processorpath", "srcJars", "srcJarDir", "outDir", "annoDir", "javaVersion") kotlinc = pctx.AndroidGomaStaticRule("kotlinc", blueprint.RuleParams{ Command: `rm -rf "$classesDir" "$srcJarDir" "$kotlinBuildFile" && mkdir -p "$classesDir" "$srcJarDir" && ` + `${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` + `${config.GenKotlinBuildFileCmd} $classpath $classesDir $out.rsp $srcJarDir/list > $kotlinBuildFile &&` + `${config.KotlincCmd} $kotlincFlags ` + `-jvm-target $kotlinJvmTarget -Xbuild-file=$kotlinBuildFile && ` + `${config.SoongZipCmd} -jar -o $out -C $classesDir -D $classesDir`, CommandDeps: []string{ "${config.KotlincCmd}", "${config.KotlinCompilerJar}", "${config.GenKotlinBuildFileCmd}", "${config.SoongZipCmd}", "${config.ZipSyncCmd}", }, Rspfile: "$out.rsp", RspfileContent: `$in`, }, "kotlincFlags", "classpath", "srcJars", "srcJarDir", "classesDir", "kotlinJvmTarget", "kotlinBuildFile") turbine = pctx.AndroidStaticRule("turbine", blueprint.RuleParams{ Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` + Loading Loading @@ -177,35 +157,6 @@ type javaBuilderFlags struct { protoRoot bool } func TransformKotlinToClasses(ctx android.ModuleContext, outputFile android.WritablePath, srcFiles, srcJars android.Paths, flags javaBuilderFlags) { inputs := append(android.Paths(nil), srcFiles...) var deps android.Paths deps = append(deps, flags.kotlincClasspath...) deps = append(deps, srcJars...) ctx.Build(pctx, android.BuildParams{ Rule: kotlinc, Description: "kotlinc", Output: outputFile, Inputs: inputs, Implicits: deps, Args: map[string]string{ "classpath": flags.kotlincClasspath.FormJavaClassPath("-classpath"), "kotlincFlags": flags.kotlincFlags, "srcJars": strings.Join(srcJars.Strings(), " "), "classesDir": android.PathForModuleOut(ctx, "kotlinc", "classes").String(), "srcJarDir": android.PathForModuleOut(ctx, "kotlinc", "srcJars").String(), "kotlinBuildFile": android.PathForModuleOut(ctx, "kotlinc-build.xml").String(), // http://b/69160377 kotlinc only supports -jvm-target 1.6 and 1.8 "kotlinJvmTarget": "1.8", }, }) } func TransformJavaToClasses(ctx android.ModuleContext, outputFile android.WritablePath, shardIdx int, srcFiles, srcJars android.Paths, flags javaBuilderFlags, deps android.Paths) { Loading Loading @@ -464,7 +415,7 @@ func (x *classpath) FormTurbineClasspath(optName string) []string { } flags := make([]string, len(*x)) for i, v := range *x { flags[i] = optName + " " + v.String() flags[i] = optName + v.String() } return flags Loading
java/config/kotlin.go +11 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,8 @@ package config import "strings" var ( KotlinStdlibJar = "external/kotlinc/lib/kotlin-stdlib.jar" KotlincIllegalFlags = []string{ Loading @@ -25,5 +27,14 @@ var ( func init() { pctx.SourcePathVariable("KotlincCmd", "external/kotlinc/bin/kotlinc") pctx.SourcePathVariable("KotlinCompilerJar", "external/kotlinc/lib/kotlin-compiler.jar") pctx.SourcePathVariable("KotlinKaptJar", "external/kotlinc/lib/kotlin-annotation-processing.jar") pctx.SourcePathVariable("KotlinStdlibJar", KotlinStdlibJar) // These flags silence "Illegal reflective access" warnings when running kotlinc in OpenJDK9 pctx.StaticVariable("KotlincSuppressJDK9Warnings", strings.Join([]string{ "-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED", "-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED", "-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED", "-J--add-opens=java.base/sun.net.www.protocol.jar=ALL-UNNAMED", }, " ")) }
java/java.go +22 −5 Original line number Diff line number Diff line Loading @@ -379,6 +379,7 @@ var ( frameworkResTag = dependencyTag{name: "framework-res"} frameworkApkTag = dependencyTag{name: "framework-apk"} kotlinStdlibTag = dependencyTag{name: "kotlin-stdlib"} kotlinAnnotationsTag = dependencyTag{name: "kotlin-annotations"} proguardRaiseTag = dependencyTag{name: "proguard-raise"} certificateTag = dependencyTag{name: "certificate"} instrumentationForTag = dependencyTag{name: "instrumentation_for"} Loading Loading @@ -483,6 +484,9 @@ func (j *Module) deps(ctx android.BottomUpMutatorContext) { // TODO(ccross): move this to a mutator pass that can tell if generated sources contain // Kotlin files ctx.AddVariationDependencies(nil, kotlinStdlibTag, "kotlin-stdlib") if len(j.properties.Annotation_processors) > 0 { ctx.AddVariationDependencies(nil, kotlinAnnotationsTag, "kotlin-annotations") } } if j.shouldInstrumentStatic(ctx) { Loading Loading @@ -564,6 +568,7 @@ type deps struct { systemModules android.Path aidlPreprocess android.OptionalPath kotlinStdlib android.Paths kotlinAnnotations android.Paths } func checkProducesJars(ctx android.ModuleContext, dep android.SourceFileProducer) { Loading Loading @@ -723,6 +728,8 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps { } case kotlinStdlibTag: deps.kotlinStdlib = dep.HeaderJars() case kotlinAnnotationsTag: deps.kotlinAnnotations = dep.HeaderJars() } deps.aidlIncludeDirs = append(deps.aidlIncludeDirs, dep.AidlIncludeDirs()...) Loading Loading @@ -969,18 +976,28 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path kotlinSrcFiles = append(kotlinSrcFiles, uniqueSrcFiles...) kotlinSrcFiles = append(kotlinSrcFiles, srcFiles.FilterByExt(".kt")...) flags.kotlincClasspath = append(flags.kotlincClasspath, deps.bootClasspath...) flags.kotlincClasspath = append(flags.kotlincClasspath, deps.kotlinStdlib...) flags.kotlincClasspath = append(flags.kotlincClasspath, deps.classpath...) flags.classpath = append(flags.classpath, deps.kotlinStdlib...) flags.classpath = append(flags.classpath, deps.kotlinAnnotations...) flags.kotlincClasspath = append(flags.kotlincClasspath, flags.bootClasspath...) flags.kotlincClasspath = append(flags.kotlincClasspath, flags.classpath...) if len(flags.processorPath) > 0 { // Use kapt for annotation processing kaptSrcJar := android.PathForModuleOut(ctx, "kapt", "kapt-sources.jar") kotlinKapt(ctx, kaptSrcJar, kotlinSrcFiles, srcJars, flags) srcJars = append(srcJars, kaptSrcJar) // Disable annotation processing in javac, it's already been handled by kapt flags.processorPath = nil } kotlinJar := android.PathForModuleOut(ctx, "kotlin", jarName) TransformKotlinToClasses(ctx, kotlinJar, kotlinSrcFiles, srcJars, flags) kotlinCompile(ctx, kotlinJar, kotlinSrcFiles, srcJars, flags) if ctx.Failed() { return } // Make javac rule depend on the kotlinc rule flags.classpath = append(flags.classpath, deps.kotlinStdlib...) flags.classpath = append(flags.classpath, kotlinJar) // Jar kotlin classes into the final jar after javac Loading