summaryrefslogtreecommitdiff
path: root/java/base.go
diff options
context:
space:
mode:
Diffstat (limited to 'java/base.go')
-rw-r--r--java/base.go52
1 files changed, 48 insertions, 4 deletions
diff --git a/java/base.go b/java/base.go
index 4fe093af9..a110aff56 100644
--- a/java/base.go
+++ b/java/base.go
@@ -192,6 +192,9 @@ type CommonProperties struct {
// Additional srcJars tacked in by GeneratedJavaLibraryModule
Generated_srcjars []android.Path `android:"mutated"`
+
+ // If true, then only the headers are built and not the implementation jar.
+ Headers_only bool
}
// Properties that are specific to device modules. Host module factories should not add these when
@@ -574,6 +577,17 @@ func (j *Module) checkPlatformAPI(ctx android.ModuleContext) {
}
}
+func (j *Module) checkHeadersOnly(ctx android.ModuleContext) {
+ if _, ok := ctx.Module().(android.SdkContext); ok {
+ headersOnly := proptools.Bool(&j.properties.Headers_only)
+ installable := proptools.Bool(j.properties.Installable)
+
+ if headersOnly && installable {
+ ctx.PropertyErrorf("headers_only", "This module has conflicting settings. headers_only is true which, which means this module doesn't generate an implementation jar. However installable is set to true.")
+ }
+ }
+}
+
func (j *Module) addHostProperties() {
j.AddProperties(
&j.properties,
@@ -1063,8 +1077,8 @@ func (j *Module) AddJSONData(d *map[string]interface{}) {
}
-func (module *Module) addGeneratedSrcJars(path android.Path) {
- module.properties.Generated_srcjars = append(module.properties.Generated_srcjars, path)
+func (j *Module) addGeneratedSrcJars(path android.Path) {
+ j.properties.Generated_srcjars = append(j.properties.Generated_srcjars, path)
}
func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspathJars, extraCombinedJars android.Paths) {
@@ -1153,6 +1167,36 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath
// final R classes from the app.
flags.classpath = append(android.CopyOf(extraClasspathJars), flags.classpath...)
+ // If compiling headers then compile them and skip the rest
+ if j.properties.Headers_only {
+ if srcFiles.HasExt(".kt") {
+ ctx.ModuleErrorf("Compiling headers_only with .kt not supported")
+ }
+ if ctx.Config().IsEnvFalse("TURBINE_ENABLED") || disableTurbine {
+ ctx.ModuleErrorf("headers_only is enabled but Turbine is disabled.")
+ }
+
+ _, j.headerJarFile =
+ j.compileJavaHeader(ctx, uniqueJavaFiles, srcJars, deps, flags, jarName,
+ extraCombinedJars)
+ if ctx.Failed() {
+ return
+ }
+
+ ctx.SetProvider(JavaInfoProvider, JavaInfo{
+ HeaderJars: android.PathsIfNonNil(j.headerJarFile),
+ TransitiveLibsHeaderJars: j.transitiveLibsHeaderJars,
+ TransitiveStaticLibsHeaderJars: j.transitiveStaticLibsHeaderJars,
+ AidlIncludeDirs: j.exportAidlIncludeDirs,
+ ExportedPlugins: j.exportedPluginJars,
+ ExportedPluginClasses: j.exportedPluginClasses,
+ ExportedPluginDisableTurbine: j.exportedDisableTurbine,
+ })
+
+ j.outputFile = j.headerJarFile
+ return
+ }
+
if srcFiles.HasExt(".kt") {
// When using kotlin sources turbine is used to generate annotation processor sources,
// including for annotation processors that generate API, so we can use turbine for
@@ -1564,7 +1608,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath
false, nil, nil)
if *j.dexProperties.Uncompress_dex {
combinedAlignedJar := android.PathForModuleOut(ctx, "dex-withres-aligned", jarName).OutputPath
- TransformZipAlign(ctx, combinedAlignedJar, combinedJar)
+ TransformZipAlign(ctx, combinedAlignedJar, combinedJar, nil)
dexOutputFile = combinedAlignedJar
} else {
dexOutputFile = combinedJar
@@ -2315,7 +2359,7 @@ type ModuleWithStem interface {
var _ ModuleWithStem = (*Module)(nil)
-func (j *Module) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
+func (j *Module) ConvertWithBp2build(ctx android.Bp2buildMutatorContext) {
switch ctx.ModuleType() {
case "java_library", "java_library_host", "java_library_static", "tradefed_java_library_host":
if lib, ok := ctx.Module().(*Library); ok {