java_library support for building headers-only
Flag for java_library modules to build just the Turbine headers and skip building an impl jar. Test: go test java Bug: 289776578 Change-Id: Iad0babf951710476bc32df93c25d17065a14ab84
This commit is contained in:
44
java/base.go
44
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,
|
||||
@@ -1151,6 +1165,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
|
||||
|
Reference in New Issue
Block a user