Add support for prebuilt java_sdk_library modules
am: 79c7c26d8a
Change-Id: I479bbe64cadae218aa3e373726f9376e5d9bdfcf
This commit is contained in:
@@ -713,7 +713,7 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps {
|
|||||||
deps.classpath = append(deps.classpath, dep.SdkHeaderJars(ctx, j.sdkVersion())...)
|
deps.classpath = append(deps.classpath, dep.SdkHeaderJars(ctx, j.sdkVersion())...)
|
||||||
// names of sdk libs that are directly depended are exported
|
// names of sdk libs that are directly depended are exported
|
||||||
j.exportedSdkLibs = append(j.exportedSdkLibs, otherName)
|
j.exportedSdkLibs = append(j.exportedSdkLibs, otherName)
|
||||||
default:
|
case staticLibTag:
|
||||||
ctx.ModuleErrorf("dependency on java_sdk_library %q can only be in libs", otherName)
|
ctx.ModuleErrorf("dependency on java_sdk_library %q can only be in libs", otherName)
|
||||||
}
|
}
|
||||||
case Dependency:
|
case Dependency:
|
||||||
|
@@ -86,6 +86,7 @@ func testContext(config android.Config, bp string,
|
|||||||
ctx.RegisterModuleType("droiddoc_host", android.ModuleFactoryAdaptor(DroiddocHostFactory))
|
ctx.RegisterModuleType("droiddoc_host", android.ModuleFactoryAdaptor(DroiddocHostFactory))
|
||||||
ctx.RegisterModuleType("droiddoc_template", android.ModuleFactoryAdaptor(ExportedDroiddocDirFactory))
|
ctx.RegisterModuleType("droiddoc_template", android.ModuleFactoryAdaptor(ExportedDroiddocDirFactory))
|
||||||
ctx.RegisterModuleType("java_sdk_library", android.ModuleFactoryAdaptor(SdkLibraryFactory))
|
ctx.RegisterModuleType("java_sdk_library", android.ModuleFactoryAdaptor(SdkLibraryFactory))
|
||||||
|
ctx.RegisterModuleType("java_sdk_library_import", android.ModuleFactoryAdaptor(sdkLibraryImportFactory))
|
||||||
ctx.RegisterModuleType("override_android_app", android.ModuleFactoryAdaptor(OverrideAndroidAppModuleFactory))
|
ctx.RegisterModuleType("override_android_app", android.ModuleFactoryAdaptor(OverrideAndroidAppModuleFactory))
|
||||||
ctx.RegisterModuleType("prebuilt_apis", android.ModuleFactoryAdaptor(PrebuiltApisFactory))
|
ctx.RegisterModuleType("prebuilt_apis", android.ModuleFactoryAdaptor(PrebuiltApisFactory))
|
||||||
ctx.PreArchMutators(android.RegisterPrebuiltsPreArchMutators)
|
ctx.PreArchMutators(android.RegisterPrebuiltsPreArchMutators)
|
||||||
@@ -323,7 +324,7 @@ func TestPrebuilts(t *testing.T) {
|
|||||||
java_library {
|
java_library {
|
||||||
name: "foo",
|
name: "foo",
|
||||||
srcs: ["a.java"],
|
srcs: ["a.java"],
|
||||||
libs: ["bar"],
|
libs: ["bar", "sdklib"],
|
||||||
static_libs: ["baz"],
|
static_libs: ["baz"],
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -341,17 +342,27 @@ func TestPrebuilts(t *testing.T) {
|
|||||||
name: "qux",
|
name: "qux",
|
||||||
jars: ["b.jar"],
|
jars: ["b.jar"],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
java_sdk_library_import {
|
||||||
|
name: "sdklib",
|
||||||
|
jars: ["b.jar"],
|
||||||
|
}
|
||||||
`)
|
`)
|
||||||
|
|
||||||
javac := ctx.ModuleForTests("foo", "android_common").Rule("javac")
|
javac := ctx.ModuleForTests("foo", "android_common").Rule("javac")
|
||||||
combineJar := ctx.ModuleForTests("foo", "android_common").Description("for javac")
|
combineJar := ctx.ModuleForTests("foo", "android_common").Description("for javac")
|
||||||
barJar := ctx.ModuleForTests("bar", "android_common").Rule("combineJar").Output
|
barJar := ctx.ModuleForTests("bar", "android_common").Rule("combineJar").Output
|
||||||
bazJar := ctx.ModuleForTests("baz", "android_common").Rule("combineJar").Output
|
bazJar := ctx.ModuleForTests("baz", "android_common").Rule("combineJar").Output
|
||||||
|
sdklibStubsJar := ctx.ModuleForTests("sdklib.stubs", "android_common").Rule("combineJar").Output
|
||||||
|
|
||||||
if !strings.Contains(javac.Args["classpath"], barJar.String()) {
|
if !strings.Contains(javac.Args["classpath"], barJar.String()) {
|
||||||
t.Errorf("foo classpath %v does not contain %q", javac.Args["classpath"], barJar.String())
|
t.Errorf("foo classpath %v does not contain %q", javac.Args["classpath"], barJar.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !strings.Contains(javac.Args["classpath"], sdklibStubsJar.String()) {
|
||||||
|
t.Errorf("foo classpath %v does not contain %q", javac.Args["classpath"], sdklibStubsJar.String())
|
||||||
|
}
|
||||||
|
|
||||||
if len(combineJar.Inputs) != 2 || combineJar.Inputs[1].String() != bazJar.String() {
|
if len(combineJar.Inputs) != 2 || combineJar.Inputs[1].String() != bazJar.String() {
|
||||||
t.Errorf("foo combineJar inputs %v does not contain %q", combineJar.Inputs, bazJar.String())
|
t.Errorf("foo combineJar inputs %v does not contain %q", combineJar.Inputs, bazJar.String())
|
||||||
}
|
}
|
||||||
|
@@ -75,6 +75,7 @@ var (
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
android.RegisterModuleType("java_sdk_library", SdkLibraryFactory)
|
android.RegisterModuleType("java_sdk_library", SdkLibraryFactory)
|
||||||
|
android.RegisterModuleType("java_sdk_library_import", sdkLibraryImportFactory)
|
||||||
|
|
||||||
android.RegisterMakeVarsProvider(pctx, func(ctx android.MakeVarsContext) {
|
android.RegisterMakeVarsProvider(pctx, func(ctx android.MakeVarsContext) {
|
||||||
javaSdkLibraries := javaSdkLibraries(ctx.Config())
|
javaSdkLibraries := javaSdkLibraries(ctx.Config())
|
||||||
@@ -731,3 +732,112 @@ func SdkLibraryFactory() android.Module {
|
|||||||
android.AddLoadHook(module, func(ctx android.LoadHookContext) { module.CreateInternalModules(ctx) })
|
android.AddLoadHook(module, func(ctx android.LoadHookContext) { module.CreateInternalModules(ctx) })
|
||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// SDK library prebuilts
|
||||||
|
//
|
||||||
|
|
||||||
|
type sdkLibraryImportProperties struct {
|
||||||
|
Jars []string `android:"path"`
|
||||||
|
|
||||||
|
Sdk_version *string
|
||||||
|
|
||||||
|
Installable *bool
|
||||||
|
|
||||||
|
// List of shared java libs that this module has dependencies to
|
||||||
|
Libs []string
|
||||||
|
|
||||||
|
// List of files to remove from the jar file(s)
|
||||||
|
Exclude_files []string
|
||||||
|
|
||||||
|
// List of directories to remove from the jar file(s)
|
||||||
|
Exclude_dirs []string
|
||||||
|
}
|
||||||
|
|
||||||
|
type sdkLibraryImport struct {
|
||||||
|
android.ModuleBase
|
||||||
|
android.DefaultableModuleBase
|
||||||
|
prebuilt android.Prebuilt
|
||||||
|
|
||||||
|
properties sdkLibraryImportProperties
|
||||||
|
|
||||||
|
stubsPath android.Paths
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ SdkLibraryDependency = (*sdkLibraryImport)(nil)
|
||||||
|
|
||||||
|
func sdkLibraryImportFactory() android.Module {
|
||||||
|
module := &sdkLibraryImport{}
|
||||||
|
|
||||||
|
module.AddProperties(&module.properties)
|
||||||
|
|
||||||
|
android.InitPrebuiltModule(module, &module.properties.Jars)
|
||||||
|
InitJavaModule(module, android.HostAndDeviceSupported)
|
||||||
|
|
||||||
|
android.AddLoadHook(module, func(mctx android.LoadHookContext) { module.createInternalModules(mctx) })
|
||||||
|
return module
|
||||||
|
}
|
||||||
|
|
||||||
|
func (module *sdkLibraryImport) Prebuilt() *android.Prebuilt {
|
||||||
|
return &module.prebuilt
|
||||||
|
}
|
||||||
|
|
||||||
|
func (module *sdkLibraryImport) Name() string {
|
||||||
|
return module.prebuilt.Name(module.ModuleBase.Name())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (module *sdkLibraryImport) createInternalModules(mctx android.LoadHookContext) {
|
||||||
|
// Creates a java import for the jar with ".stubs" suffix
|
||||||
|
props := struct {
|
||||||
|
Name *string
|
||||||
|
Soc_specific *bool
|
||||||
|
Device_specific *bool
|
||||||
|
Product_specific *bool
|
||||||
|
}{}
|
||||||
|
|
||||||
|
props.Name = proptools.StringPtr(module.BaseModuleName() + sdkStubsLibrarySuffix)
|
||||||
|
|
||||||
|
if module.SocSpecific() {
|
||||||
|
props.Soc_specific = proptools.BoolPtr(true)
|
||||||
|
} else if module.DeviceSpecific() {
|
||||||
|
props.Device_specific = proptools.BoolPtr(true)
|
||||||
|
} else if module.ProductSpecific() {
|
||||||
|
props.Product_specific = proptools.BoolPtr(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
mctx.CreateModule(android.ModuleFactoryAdaptor(ImportFactory), &props, &module.properties)
|
||||||
|
|
||||||
|
javaSdkLibraries := javaSdkLibraries(mctx.Config())
|
||||||
|
javaSdkLibrariesLock.Lock()
|
||||||
|
defer javaSdkLibrariesLock.Unlock()
|
||||||
|
*javaSdkLibraries = append(*javaSdkLibraries, module.BaseModuleName())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (module *sdkLibraryImport) DepsMutator(ctx android.BottomUpMutatorContext) {
|
||||||
|
// Add dependencies to the prebuilt stubs library
|
||||||
|
ctx.AddVariationDependencies(nil, publicApiStubsTag, module.BaseModuleName()+sdkStubsLibrarySuffix)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (module *sdkLibraryImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||||
|
// Record the paths to the prebuilt stubs library.
|
||||||
|
ctx.VisitDirectDeps(func(to android.Module) {
|
||||||
|
tag := ctx.OtherModuleDependencyTag(to)
|
||||||
|
|
||||||
|
switch tag {
|
||||||
|
case publicApiStubsTag:
|
||||||
|
module.stubsPath = to.(Dependency).HeaderJars()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// to satisfy SdkLibraryDependency interface
|
||||||
|
func (module *sdkLibraryImport) SdkHeaderJars(ctx android.BaseContext, sdkVersion string) android.Paths {
|
||||||
|
// This module is just a wrapper for the prebuilt stubs.
|
||||||
|
return module.stubsPath
|
||||||
|
}
|
||||||
|
|
||||||
|
// to satisfy SdkLibraryDependency interface
|
||||||
|
func (module *sdkLibraryImport) SdkImplementationJars(ctx android.BaseContext, sdkVersion string) android.Paths {
|
||||||
|
// This module is just a wrapper for the stubs.
|
||||||
|
return module.stubsPath
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user