Remove android_prebuilt_sdk modules
Forcing sdk modules to be declared explicitly is unnecessary, just add the required dependencies on the jar and aidl files. Test: java_test.go Change-Id: Ib28bdc1051c5825e7c0efb6adff1f9282675560e
This commit is contained in:
@@ -462,6 +462,10 @@ func (c *config) AllowMissingDependencies() bool {
|
|||||||
return Bool(c.ProductVariables.Allow_missing_dependencies)
|
return Bool(c.ProductVariables.Allow_missing_dependencies)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *config) UnbundledBuild() bool {
|
||||||
|
return Bool(c.ProductVariables.Unbundled_build)
|
||||||
|
}
|
||||||
|
|
||||||
func (c *config) DevicePrefer32BitExecutables() bool {
|
func (c *config) DevicePrefer32BitExecutables() bool {
|
||||||
return Bool(c.ProductVariables.DevicePrefer32BitExecutables)
|
return Bool(c.ProductVariables.DevicePrefer32BitExecutables)
|
||||||
}
|
}
|
||||||
|
@@ -233,9 +233,7 @@ func (a *AndroidApp) aaptFlags(ctx android.ModuleContext) ([]string, android.Pat
|
|||||||
|
|
||||||
ctx.VisitDirectDeps(func(module blueprint.Module) {
|
ctx.VisitDirectDeps(func(module blueprint.Module) {
|
||||||
var depFiles android.Paths
|
var depFiles android.Paths
|
||||||
if sdkDep, ok := module.(sdkDependency); ok {
|
if javaDep, ok := module.(Dependency); ok {
|
||||||
depFiles = sdkDep.ClasspathFiles()
|
|
||||||
} else if javaDep, ok := module.(Dependency); ok {
|
|
||||||
if ctx.OtherModuleName(module) == "framework-res" {
|
if ctx.OtherModuleName(module) == "framework-res" {
|
||||||
depFiles = android.Paths{javaDep.(*AndroidApp).exportPackage}
|
depFiles = android.Paths{javaDep.(*AndroidApp).exportPackage}
|
||||||
}
|
}
|
||||||
|
155
java/java.go
155
java/java.go
@@ -20,6 +20,7 @@ package java
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"path/filepath"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@@ -41,7 +42,6 @@ func init() {
|
|||||||
android.RegisterModuleType("java_binary_host", BinaryHostFactory)
|
android.RegisterModuleType("java_binary_host", BinaryHostFactory)
|
||||||
android.RegisterModuleType("java_import", ImportFactory)
|
android.RegisterModuleType("java_import", ImportFactory)
|
||||||
android.RegisterModuleType("java_import_host", ImportFactoryHost)
|
android.RegisterModuleType("java_import_host", ImportFactoryHost)
|
||||||
android.RegisterModuleType("android_prebuilt_sdk", SdkPrebuiltFactory)
|
|
||||||
android.RegisterModuleType("android_app", AndroidAppFactory)
|
android.RegisterModuleType("android_app", AndroidAppFactory)
|
||||||
|
|
||||||
android.RegisterSingletonType("logtags", LogtagsSingleton)
|
android.RegisterSingletonType("logtags", LogtagsSingleton)
|
||||||
@@ -179,26 +179,90 @@ var (
|
|||||||
libTag = dependencyTag{name: "javalib"}
|
libTag = dependencyTag{name: "javalib"}
|
||||||
bootClasspathTag = dependencyTag{name: "bootclasspath"}
|
bootClasspathTag = dependencyTag{name: "bootclasspath"}
|
||||||
frameworkResTag = dependencyTag{name: "framework-res"}
|
frameworkResTag = dependencyTag{name: "framework-res"}
|
||||||
sdkDependencyTag = dependencyTag{name: "sdk"}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type sdkDep struct {
|
||||||
|
useModule, useFiles, useDefaultLibs bool
|
||||||
|
module string
|
||||||
|
jar android.Path
|
||||||
|
aidl android.Path
|
||||||
|
}
|
||||||
|
|
||||||
|
func decodeSdkDep(ctx android.BaseContext, v string) sdkDep {
|
||||||
|
switch v {
|
||||||
|
case "", "current", "system_current", "test_current":
|
||||||
|
// OK
|
||||||
|
default:
|
||||||
|
if _, err := strconv.Atoi(v); err != nil {
|
||||||
|
ctx.PropertyErrorf("sdk_version", "invalid sdk version")
|
||||||
|
return sdkDep{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toFile := func(v string) sdkDep {
|
||||||
|
dir := filepath.Join("prebuilts/sdk", v)
|
||||||
|
jar := filepath.Join(dir, "android.jar")
|
||||||
|
aidl := filepath.Join(dir, "framework.aidl")
|
||||||
|
jarPath := android.ExistentPathForSource(ctx, "sdkdir", jar)
|
||||||
|
aidlPath := android.ExistentPathForSource(ctx, "sdkdir", aidl)
|
||||||
|
if !jarPath.Valid() {
|
||||||
|
ctx.PropertyErrorf("sdk_version", "invalid sdk version %q, %q does not exist", v, jar)
|
||||||
|
return sdkDep{}
|
||||||
|
}
|
||||||
|
if !aidlPath.Valid() {
|
||||||
|
ctx.PropertyErrorf("sdk_version", "invalid sdk version %q, %q does not exist", v, aidl)
|
||||||
|
return sdkDep{}
|
||||||
|
}
|
||||||
|
return sdkDep{
|
||||||
|
useFiles: true,
|
||||||
|
jar: jarPath.Path(),
|
||||||
|
aidl: aidlPath.Path(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toModule := func(m string) sdkDep {
|
||||||
|
return sdkDep{
|
||||||
|
useModule: true,
|
||||||
|
module: m,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ctx.AConfig().UnbundledBuild() {
|
||||||
|
if v == "" {
|
||||||
|
if ctx, ok := ctx.(android.ModuleContext); ok {
|
||||||
|
ctx.AddMissingDependencies([]string{"sdk_version_must_be_set_for_modules_used_in_unbundled_builds"})
|
||||||
|
}
|
||||||
|
return sdkDep{}
|
||||||
|
}
|
||||||
|
return toFile(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch v {
|
||||||
|
case "":
|
||||||
|
return sdkDep{
|
||||||
|
useDefaultLibs: true,
|
||||||
|
}
|
||||||
|
case "current":
|
||||||
|
return toModule("android_stubs_current")
|
||||||
|
case "system_current":
|
||||||
|
return toModule("android_system_stubs_current")
|
||||||
|
case "test_current":
|
||||||
|
return toModule("android_test_stubs_current")
|
||||||
|
default:
|
||||||
|
return toFile(v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (j *Module) deps(ctx android.BottomUpMutatorContext) {
|
func (j *Module) deps(ctx android.BottomUpMutatorContext) {
|
||||||
if !proptools.Bool(j.properties.No_standard_libs) {
|
if !proptools.Bool(j.properties.No_standard_libs) {
|
||||||
if ctx.Device() {
|
if ctx.Device() {
|
||||||
switch j.deviceProperties.Sdk_version {
|
sdkDep := decodeSdkDep(ctx, j.deviceProperties.Sdk_version)
|
||||||
case "":
|
if sdkDep.useDefaultLibs {
|
||||||
ctx.AddDependency(ctx.Module(), bootClasspathTag, "core-oj", "core-libart")
|
ctx.AddDependency(ctx.Module(), bootClasspathTag, "core-oj", "core-libart")
|
||||||
ctx.AddDependency(ctx.Module(), libTag, config.DefaultLibraries...)
|
ctx.AddDependency(ctx.Module(), libTag, config.DefaultLibraries...)
|
||||||
case "current":
|
}
|
||||||
// TODO: !TARGET_BUILD_APPS
|
if sdkDep.useModule {
|
||||||
// TODO: export preprocessed framework.aidl from android_stubs_current
|
ctx.AddDependency(ctx.Module(), bootClasspathTag, sdkDep.module)
|
||||||
ctx.AddDependency(ctx.Module(), bootClasspathTag, "android_stubs_current")
|
|
||||||
case "test_current":
|
|
||||||
ctx.AddDependency(ctx.Module(), bootClasspathTag, "android_test_stubs_current")
|
|
||||||
case "system_current":
|
|
||||||
ctx.AddDependency(ctx.Module(), bootClasspathTag, "android_system_stubs_current")
|
|
||||||
default:
|
|
||||||
ctx.AddDependency(ctx.Module(), sdkDependencyTag, "sdk_v"+j.deviceProperties.Sdk_version)
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if j.deviceProperties.Dex {
|
if j.deviceProperties.Dex {
|
||||||
@@ -247,6 +311,13 @@ type deps struct {
|
|||||||
|
|
||||||
func (j *Module) collectDeps(ctx android.ModuleContext) deps {
|
func (j *Module) collectDeps(ctx android.ModuleContext) deps {
|
||||||
var deps deps
|
var deps deps
|
||||||
|
|
||||||
|
sdkDep := decodeSdkDep(ctx, j.deviceProperties.Sdk_version)
|
||||||
|
if sdkDep.useFiles {
|
||||||
|
deps.classpath = append(deps.classpath, sdkDep.jar)
|
||||||
|
deps.aidlIncludeDirs = append(deps.aidlIncludeDirs, sdkDep.aidl)
|
||||||
|
}
|
||||||
|
|
||||||
ctx.VisitDirectDeps(func(module blueprint.Module) {
|
ctx.VisitDirectDeps(func(module blueprint.Module) {
|
||||||
otherName := ctx.OtherModuleName(module)
|
otherName := ctx.OtherModuleName(module)
|
||||||
tag := ctx.OtherModuleDependencyTag(module)
|
tag := ctx.OtherModuleDependencyTag(module)
|
||||||
@@ -277,17 +348,6 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps {
|
|||||||
// generated by framework-res.apk
|
// generated by framework-res.apk
|
||||||
deps.srcFileLists = append(deps.srcFileLists, module.(*AndroidApp).aaptJavaFileList)
|
deps.srcFileLists = append(deps.srcFileLists, module.(*AndroidApp).aaptJavaFileList)
|
||||||
}
|
}
|
||||||
case sdkDependencyTag:
|
|
||||||
sdkDep := module.(sdkDependency)
|
|
||||||
deps.bootClasspath = append(deps.bootClasspath, sdkDep.ClasspathFiles()...)
|
|
||||||
if sdkDep.AidlPreprocessed().Valid() {
|
|
||||||
if deps.aidlPreprocess.Valid() {
|
|
||||||
ctx.ModuleErrorf("multiple dependencies with preprocessed aidls:\n %q\n %q",
|
|
||||||
deps.aidlPreprocess, sdkDep.AidlPreprocessed())
|
|
||||||
} else {
|
|
||||||
deps.aidlPreprocess = sdkDep.AidlPreprocessed()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
panic(fmt.Errorf("unknown dependency %q for %q", otherName, ctx.ModuleName()))
|
panic(fmt.Errorf("unknown dependency %q for %q", otherName, ctx.ModuleName()))
|
||||||
}
|
}
|
||||||
@@ -677,51 +737,6 @@ func ImportFactoryHost() android.Module {
|
|||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// SDK java prebuilts (.jar containing resources plus framework.aidl)
|
|
||||||
//
|
|
||||||
|
|
||||||
type sdkDependency interface {
|
|
||||||
Dependency
|
|
||||||
AidlPreprocessed() android.OptionalPath
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ sdkDependency = (*sdkPrebuilt)(nil)
|
|
||||||
|
|
||||||
type sdkPrebuiltProperties struct {
|
|
||||||
Aidl_preprocessed *string
|
|
||||||
}
|
|
||||||
|
|
||||||
type sdkPrebuilt struct {
|
|
||||||
Import
|
|
||||||
|
|
||||||
sdkProperties sdkPrebuiltProperties
|
|
||||||
|
|
||||||
aidlPreprocessed android.OptionalPath
|
|
||||||
}
|
|
||||||
|
|
||||||
func (j *sdkPrebuilt) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|
||||||
j.Import.GenerateAndroidBuildActions(ctx)
|
|
||||||
|
|
||||||
j.aidlPreprocessed = android.OptionalPathForModuleSrc(ctx, j.sdkProperties.Aidl_preprocessed)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (j *sdkPrebuilt) AidlPreprocessed() android.OptionalPath {
|
|
||||||
return j.aidlPreprocessed
|
|
||||||
}
|
|
||||||
|
|
||||||
func SdkPrebuiltFactory() android.Module {
|
|
||||||
module := &sdkPrebuilt{}
|
|
||||||
|
|
||||||
module.AddProperties(
|
|
||||||
&module.sdkProperties,
|
|
||||||
&module.Import.properties)
|
|
||||||
|
|
||||||
android.InitPrebuiltModule(module, &module.Import.properties.Jars)
|
|
||||||
android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon)
|
|
||||||
return module
|
|
||||||
}
|
|
||||||
|
|
||||||
func inList(s string, l []string) bool {
|
func inList(s string, l []string) bool {
|
||||||
for _, e := range l {
|
for _, e := range l {
|
||||||
if e == s {
|
if e == s {
|
||||||
|
@@ -59,7 +59,6 @@ func testJava(t *testing.T, bp string) *android.TestContext {
|
|||||||
ctx.RegisterModuleType("java_library_host", android.ModuleFactoryAdaptor(LibraryHostFactory))
|
ctx.RegisterModuleType("java_library_host", android.ModuleFactoryAdaptor(LibraryHostFactory))
|
||||||
ctx.RegisterModuleType("java_import", android.ModuleFactoryAdaptor(ImportFactory))
|
ctx.RegisterModuleType("java_import", android.ModuleFactoryAdaptor(ImportFactory))
|
||||||
ctx.RegisterModuleType("java_defaults", android.ModuleFactoryAdaptor(defaultsFactory))
|
ctx.RegisterModuleType("java_defaults", android.ModuleFactoryAdaptor(defaultsFactory))
|
||||||
ctx.RegisterModuleType("android_prebuilt_sdk", android.ModuleFactoryAdaptor(SdkPrebuiltFactory))
|
|
||||||
ctx.PreArchMutators(android.RegisterPrebuiltsPreArchMutators)
|
ctx.PreArchMutators(android.RegisterPrebuiltsPreArchMutators)
|
||||||
ctx.PreArchMutators(android.RegisterPrebuiltsPostDepsMutators)
|
ctx.PreArchMutators(android.RegisterPrebuiltsPostDepsMutators)
|
||||||
ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
|
ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
|
||||||
@@ -86,21 +85,15 @@ func testJava(t *testing.T, bp string) *android.TestContext {
|
|||||||
`, extra)
|
`, extra)
|
||||||
}
|
}
|
||||||
|
|
||||||
bp += `
|
|
||||||
android_prebuilt_sdk {
|
|
||||||
name: "sdk_v14",
|
|
||||||
jars: ["sdk_v14.jar"],
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
ctx.MockFileSystem(map[string][]byte{
|
ctx.MockFileSystem(map[string][]byte{
|
||||||
"Android.bp": []byte(bp),
|
"Android.bp": []byte(bp),
|
||||||
"a.java": nil,
|
"a.java": nil,
|
||||||
"b.java": nil,
|
"b.java": nil,
|
||||||
"c.java": nil,
|
"c.java": nil,
|
||||||
"a.jar": nil,
|
"a.jar": nil,
|
||||||
"b.jar": nil,
|
"b.jar": nil,
|
||||||
"sdk_v14.jar": nil,
|
"prebuilts/sdk/14/android.jar": nil,
|
||||||
|
"prebuilts/sdk/14/framework.aidl": nil,
|
||||||
})
|
})
|
||||||
|
|
||||||
_, errs := ctx.ParseBlueprintsFiles("Android.bp")
|
_, errs := ctx.ParseBlueprintsFiles("Android.bp")
|
||||||
@@ -115,8 +108,8 @@ func moduleToPath(name string) string {
|
|||||||
switch {
|
switch {
|
||||||
case name == `""`:
|
case name == `""`:
|
||||||
return name
|
return name
|
||||||
case strings.HasPrefix(name, "sdk_v"):
|
case strings.HasSuffix(name, ".jar"):
|
||||||
return name + ".jar"
|
return name
|
||||||
default:
|
default:
|
||||||
return filepath.Join(buildDir, ".intermediates", name, "android_common", "classes-desugar.jar")
|
return filepath.Join(buildDir, ".intermediates", name, "android_common", "classes-desugar.jar")
|
||||||
}
|
}
|
||||||
@@ -187,8 +180,8 @@ var classpathTestcases = []struct {
|
|||||||
|
|
||||||
name: "sdk v14",
|
name: "sdk v14",
|
||||||
properties: `sdk_version: "14",`,
|
properties: `sdk_version: "14",`,
|
||||||
bootclasspath: []string{"sdk_v14"},
|
bootclasspath: []string{`""`},
|
||||||
classpath: []string{},
|
classpath: []string{"prebuilts/sdk/14/android.jar"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user