Merge "Enable kotlin's jvm-abi-gen plugin to generate header jars" am: 93d65fb60d
am: 5e281cd016
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2046152 Change-Id: I51100630478a6f32b6a05b2d5c7c3f19f489a75b Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
11
java/base.go
11
java/base.go
@@ -1052,6 +1052,7 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) {
|
|||||||
j.expandIDEInfoCompiledSrcs = append(j.expandIDEInfoCompiledSrcs, uniqueSrcFiles.Strings()...)
|
j.expandIDEInfoCompiledSrcs = append(j.expandIDEInfoCompiledSrcs, uniqueSrcFiles.Strings()...)
|
||||||
|
|
||||||
var kotlinJars android.Paths
|
var kotlinJars android.Paths
|
||||||
|
var kotlinHeaderJars android.Paths
|
||||||
|
|
||||||
if srcFiles.HasExt(".kt") {
|
if srcFiles.HasExt(".kt") {
|
||||||
// user defined kotlin flags.
|
// user defined kotlin flags.
|
||||||
@@ -1109,18 +1110,22 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
kotlinJar := android.PathForModuleOut(ctx, "kotlin", jarName)
|
kotlinJar := android.PathForModuleOut(ctx, "kotlin", jarName)
|
||||||
kotlinCompile(ctx, kotlinJar, kotlinSrcFiles, kotlinCommonSrcFiles, srcJars, flags)
|
kotlinHeaderJar := android.PathForModuleOut(ctx, "kotlin_headers", jarName)
|
||||||
|
kotlinCompile(ctx, kotlinJar, kotlinHeaderJar, kotlinSrcFiles, kotlinCommonSrcFiles, srcJars, flags)
|
||||||
if ctx.Failed() {
|
if ctx.Failed() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make javac rule depend on the kotlinc rule
|
// Make javac rule depend on the kotlinc rule
|
||||||
flags.classpath = append(flags.classpath, kotlinJar)
|
flags.classpath = append(classpath{kotlinHeaderJar}, flags.classpath...)
|
||||||
|
|
||||||
kotlinJars = append(kotlinJars, kotlinJar)
|
kotlinJars = append(kotlinJars, kotlinJar)
|
||||||
|
kotlinHeaderJars = append(kotlinHeaderJars, kotlinHeaderJar)
|
||||||
|
|
||||||
// Jar kotlin classes into the final jar after javac
|
// Jar kotlin classes into the final jar after javac
|
||||||
if BoolDefault(j.properties.Static_kotlin_stdlib, true) {
|
if BoolDefault(j.properties.Static_kotlin_stdlib, true) {
|
||||||
kotlinJars = append(kotlinJars, deps.kotlinStdlib...)
|
kotlinJars = append(kotlinJars, deps.kotlinStdlib...)
|
||||||
|
kotlinHeaderJars = append(kotlinHeaderJars, deps.kotlinStdlib...)
|
||||||
} else {
|
} else {
|
||||||
flags.dexClasspath = append(flags.dexClasspath, deps.kotlinStdlib...)
|
flags.dexClasspath = append(flags.dexClasspath, deps.kotlinStdlib...)
|
||||||
}
|
}
|
||||||
@@ -1144,7 +1149,7 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) {
|
|||||||
// with sharding enabled. See: b/77284273.
|
// with sharding enabled. See: b/77284273.
|
||||||
}
|
}
|
||||||
headerJarFileWithoutDepsOrJarjar, j.headerJarFile =
|
headerJarFileWithoutDepsOrJarjar, j.headerJarFile =
|
||||||
j.compileJavaHeader(ctx, uniqueSrcFiles, srcJars, deps, flags, jarName, kotlinJars)
|
j.compileJavaHeader(ctx, uniqueSrcFiles, srcJars, deps, flags, jarName, kotlinHeaderJars)
|
||||||
if ctx.Failed() {
|
if ctx.Failed() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@@ -34,6 +34,7 @@ func init() {
|
|||||||
pctx.SourcePathVariable("KotlinKaptJar", "external/kotlinc/lib/kotlin-annotation-processing.jar")
|
pctx.SourcePathVariable("KotlinKaptJar", "external/kotlinc/lib/kotlin-annotation-processing.jar")
|
||||||
pctx.SourcePathVariable("KotlinAnnotationJar", "external/kotlinc/lib/annotations-13.0.jar")
|
pctx.SourcePathVariable("KotlinAnnotationJar", "external/kotlinc/lib/annotations-13.0.jar")
|
||||||
pctx.SourcePathVariable("KotlinStdlibJar", KotlinStdlibJar)
|
pctx.SourcePathVariable("KotlinStdlibJar", KotlinStdlibJar)
|
||||||
|
pctx.SourcePathVariable("KotlinAbiGenPluginJar", "external/kotlinc/lib/jvm-abi-gen.jar")
|
||||||
|
|
||||||
// These flags silence "Illegal reflective access" warnings when running kapt in OpenJDK9+
|
// These flags silence "Illegal reflective access" warnings when running kapt in OpenJDK9+
|
||||||
pctx.StaticVariable("KaptSuppressJDK9Warnings", strings.Join([]string{
|
pctx.StaticVariable("KaptSuppressJDK9Warnings", strings.Join([]string{
|
||||||
|
@@ -28,8 +28,8 @@ import (
|
|||||||
|
|
||||||
var kotlinc = pctx.AndroidRemoteStaticRule("kotlinc", android.RemoteRuleSupports{Goma: true},
|
var kotlinc = pctx.AndroidRemoteStaticRule("kotlinc", android.RemoteRuleSupports{Goma: true},
|
||||||
blueprint.RuleParams{
|
blueprint.RuleParams{
|
||||||
Command: `rm -rf "$classesDir" "$srcJarDir" "$kotlinBuildFile" "$emptyDir" && ` +
|
Command: `rm -rf "$classesDir" "$headerClassesDir" "$srcJarDir" "$kotlinBuildFile" "$emptyDir" && ` +
|
||||||
`mkdir -p "$classesDir" "$srcJarDir" "$emptyDir" && ` +
|
`mkdir -p "$classesDir" "$headerClassesDir" "$srcJarDir" "$emptyDir" && ` +
|
||||||
`${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` +
|
`${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` +
|
||||||
`${config.GenKotlinBuildFileCmd} --classpath "$classpath" --name "$name"` +
|
`${config.GenKotlinBuildFileCmd} --classpath "$classpath" --name "$name"` +
|
||||||
` --out_dir "$classesDir" --srcs "$out.rsp" --srcs "$srcJarDir/list"` +
|
` --out_dir "$classesDir" --srcs "$out.rsp" --srcs "$srcJarDir/list"` +
|
||||||
@@ -37,8 +37,11 @@ var kotlinc = pctx.AndroidRemoteStaticRule("kotlinc", android.RemoteRuleSupports
|
|||||||
`${config.KotlincCmd} ${config.KotlincGlobalFlags} ` +
|
`${config.KotlincCmd} ${config.KotlincGlobalFlags} ` +
|
||||||
` ${config.KotlincSuppressJDK9Warnings} ${config.JavacHeapFlags} ` +
|
` ${config.KotlincSuppressJDK9Warnings} ${config.JavacHeapFlags} ` +
|
||||||
` $kotlincFlags -jvm-target $kotlinJvmTarget -Xbuild-file=$kotlinBuildFile ` +
|
` $kotlincFlags -jvm-target $kotlinJvmTarget -Xbuild-file=$kotlinBuildFile ` +
|
||||||
`-kotlin-home $emptyDir && ` +
|
` -kotlin-home $emptyDir ` +
|
||||||
`${config.SoongZipCmd} -jar -o $out -C $classesDir -D $classesDir && ` +
|
` -Xplugin=${config.KotlinAbiGenPluginJar} ` +
|
||||||
|
` -P plugin:org.jetbrains.kotlin.jvm.abi:outputDir=$headerClassesDir && ` +
|
||||||
|
`${config.SoongZipCmd} -jar -o $out -C $classesDir -D $classesDir -write_if_changed && ` +
|
||||||
|
`${config.SoongZipCmd} -jar -o $headerJar -C $headerClassesDir -D $headerClassesDir -write_if_changed && ` +
|
||||||
`rm -rf "$srcJarDir"`,
|
`rm -rf "$srcJarDir"`,
|
||||||
CommandDeps: []string{
|
CommandDeps: []string{
|
||||||
"${config.KotlincCmd}",
|
"${config.KotlincCmd}",
|
||||||
@@ -49,15 +52,17 @@ var kotlinc = pctx.AndroidRemoteStaticRule("kotlinc", android.RemoteRuleSupports
|
|||||||
"${config.KotlinStdlibJar}",
|
"${config.KotlinStdlibJar}",
|
||||||
"${config.KotlinTrove4jJar}",
|
"${config.KotlinTrove4jJar}",
|
||||||
"${config.KotlinAnnotationJar}",
|
"${config.KotlinAnnotationJar}",
|
||||||
|
"${config.KotlinAbiGenPluginJar}",
|
||||||
"${config.GenKotlinBuildFileCmd}",
|
"${config.GenKotlinBuildFileCmd}",
|
||||||
"${config.SoongZipCmd}",
|
"${config.SoongZipCmd}",
|
||||||
"${config.ZipSyncCmd}",
|
"${config.ZipSyncCmd}",
|
||||||
},
|
},
|
||||||
Rspfile: "$out.rsp",
|
Rspfile: "$out.rsp",
|
||||||
RspfileContent: `$in`,
|
RspfileContent: `$in`,
|
||||||
|
Restat: true,
|
||||||
},
|
},
|
||||||
"kotlincFlags", "classpath", "srcJars", "commonSrcFilesArg", "srcJarDir", "classesDir",
|
"kotlincFlags", "classpath", "srcJars", "commonSrcFilesArg", "srcJarDir", "classesDir",
|
||||||
"kotlinJvmTarget", "kotlinBuildFile", "emptyDir", "name")
|
"headerClassesDir", "headerJar", "kotlinJvmTarget", "kotlinBuildFile", "emptyDir", "name")
|
||||||
|
|
||||||
func kotlinCommonSrcsList(ctx android.ModuleContext, commonSrcFiles android.Paths) android.OptionalPath {
|
func kotlinCommonSrcsList(ctx android.ModuleContext, commonSrcFiles android.Paths) android.OptionalPath {
|
||||||
if len(commonSrcFiles) > 0 {
|
if len(commonSrcFiles) > 0 {
|
||||||
@@ -76,7 +81,7 @@ func kotlinCommonSrcsList(ctx android.ModuleContext, commonSrcFiles android.Path
|
|||||||
}
|
}
|
||||||
|
|
||||||
// kotlinCompile takes .java and .kt sources and srcJars, and compiles the .kt sources into a classes jar in outputFile.
|
// kotlinCompile takes .java and .kt sources and srcJars, and compiles the .kt sources into a classes jar in outputFile.
|
||||||
func kotlinCompile(ctx android.ModuleContext, outputFile android.WritablePath,
|
func kotlinCompile(ctx android.ModuleContext, outputFile, headerOutputFile android.WritablePath,
|
||||||
srcFiles, commonSrcFiles, srcJars android.Paths,
|
srcFiles, commonSrcFiles, srcJars android.Paths,
|
||||||
flags javaBuilderFlags) {
|
flags javaBuilderFlags) {
|
||||||
|
|
||||||
@@ -100,6 +105,7 @@ func kotlinCompile(ctx android.ModuleContext, outputFile android.WritablePath,
|
|||||||
Rule: kotlinc,
|
Rule: kotlinc,
|
||||||
Description: "kotlinc",
|
Description: "kotlinc",
|
||||||
Output: outputFile,
|
Output: outputFile,
|
||||||
|
ImplicitOutput: headerOutputFile,
|
||||||
Inputs: srcFiles,
|
Inputs: srcFiles,
|
||||||
Implicits: deps,
|
Implicits: deps,
|
||||||
Args: map[string]string{
|
Args: map[string]string{
|
||||||
@@ -108,6 +114,8 @@ func kotlinCompile(ctx android.ModuleContext, outputFile android.WritablePath,
|
|||||||
"commonSrcFilesArg": commonSrcFilesArg,
|
"commonSrcFilesArg": commonSrcFilesArg,
|
||||||
"srcJars": strings.Join(srcJars.Strings(), " "),
|
"srcJars": strings.Join(srcJars.Strings(), " "),
|
||||||
"classesDir": android.PathForModuleOut(ctx, "kotlinc", "classes").String(),
|
"classesDir": android.PathForModuleOut(ctx, "kotlinc", "classes").String(),
|
||||||
|
"headerClassesDir": android.PathForModuleOut(ctx, "kotlinc", "header_classes").String(),
|
||||||
|
"headerJar": headerOutputFile.String(),
|
||||||
"srcJarDir": android.PathForModuleOut(ctx, "kotlinc", "srcJars").String(),
|
"srcJarDir": android.PathForModuleOut(ctx, "kotlinc", "srcJars").String(),
|
||||||
"kotlinBuildFile": android.PathForModuleOut(ctx, "kotlinc-build.xml").String(),
|
"kotlinBuildFile": android.PathForModuleOut(ctx, "kotlinc-build.xml").String(),
|
||||||
"emptyDir": android.PathForModuleOut(ctx, "kotlinc", "empty").String(),
|
"emptyDir": android.PathForModuleOut(ctx, "kotlinc", "empty").String(),
|
||||||
|
@@ -45,6 +45,10 @@ func TestKotlin(t *testing.T) {
|
|||||||
fooKotlinc := ctx.ModuleForTests("foo", "android_common").Rule("kotlinc")
|
fooKotlinc := ctx.ModuleForTests("foo", "android_common").Rule("kotlinc")
|
||||||
fooJavac := ctx.ModuleForTests("foo", "android_common").Rule("javac")
|
fooJavac := ctx.ModuleForTests("foo", "android_common").Rule("javac")
|
||||||
fooJar := ctx.ModuleForTests("foo", "android_common").Output("combined/foo.jar")
|
fooJar := ctx.ModuleForTests("foo", "android_common").Output("combined/foo.jar")
|
||||||
|
fooHeaderJar := ctx.ModuleForTests("foo", "android_common").Output("turbine-combined/foo.jar")
|
||||||
|
|
||||||
|
fooKotlincClasses := fooKotlinc.Output
|
||||||
|
fooKotlincHeaderClasses := fooKotlinc.ImplicitOutput
|
||||||
|
|
||||||
if len(fooKotlinc.Inputs) != 2 || fooKotlinc.Inputs[0].String() != "a.java" ||
|
if len(fooKotlinc.Inputs) != 2 || fooKotlinc.Inputs[0].String() != "a.java" ||
|
||||||
fooKotlinc.Inputs[1].String() != "b.kt" {
|
fooKotlinc.Inputs[1].String() != "b.kt" {
|
||||||
@@ -55,17 +59,21 @@ func TestKotlin(t *testing.T) {
|
|||||||
t.Errorf(`foo inputs %v != ["a.java"]`, fooJavac.Inputs)
|
t.Errorf(`foo inputs %v != ["a.java"]`, fooJavac.Inputs)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !strings.Contains(fooJavac.Args["classpath"], fooKotlinc.Output.String()) {
|
if !strings.Contains(fooJavac.Args["classpath"], fooKotlincHeaderClasses.String()) {
|
||||||
t.Errorf("foo classpath %v does not contain %q",
|
t.Errorf("foo classpath %v does not contain %q",
|
||||||
fooJavac.Args["classpath"], fooKotlinc.Output.String())
|
fooJavac.Args["classpath"], fooKotlincHeaderClasses.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
if !inList(fooKotlinc.Output.String(), fooJar.Inputs.Strings()) {
|
if !inList(fooKotlincClasses.String(), fooJar.Inputs.Strings()) {
|
||||||
t.Errorf("foo jar inputs %v does not contain %q",
|
t.Errorf("foo jar inputs %v does not contain %q",
|
||||||
fooJar.Inputs.Strings(), fooKotlinc.Output.String())
|
fooJar.Inputs.Strings(), fooKotlincClasses.String())
|
||||||
|
}
|
||||||
|
|
||||||
|
if !inList(fooKotlincHeaderClasses.String(), fooHeaderJar.Inputs.Strings()) {
|
||||||
|
t.Errorf("foo header jar inputs %v does not contain %q",
|
||||||
|
fooHeaderJar.Inputs.Strings(), fooKotlincHeaderClasses.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
fooHeaderJar := ctx.ModuleForTests("foo", "android_common").Output("turbine-combined/foo.jar")
|
|
||||||
bazHeaderJar := ctx.ModuleForTests("baz", "android_common").Output("turbine-combined/baz.jar")
|
bazHeaderJar := ctx.ModuleForTests("baz", "android_common").Output("turbine-combined/baz.jar")
|
||||||
barKotlinc := ctx.ModuleForTests("bar", "android_common").Rule("kotlinc")
|
barKotlinc := ctx.ModuleForTests("bar", "android_common").Rule("kotlinc")
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user