Add more androidmk translations for android libraries
Add support for translating LOCAL_MANIFEST_FILE, LOCAL_RESOURCE_DIR LOCAL_SHARED_ANDROID_LIBRARIES, and LOCAL_STATIC_ANDROID_LIBRARIES. Use the presence of non-empty LOCAL_RESOURCE_DIR, LOCAL_SHARED_ANDROID_LIBRARIES or LOCAL_STATIC_ANDROID_LIBRARIES to convert a java_library_static into an android_library module, and then squash LOCAL_SHARED_ANDROID_LIBRARIES into LOCAL_SHARED_LIBRARIES and LOCAL_STATIC_ANDROID_LIBRARIES into LOCAL_STATIC_LIBRARIES. Test: androidmk_test.go Change-Id: I3ad2a3561f69ebd097eca97cb170754d64e06123
This commit is contained in:
@@ -64,6 +64,9 @@ var rewriteProperties = map[string](func(variableAssignmentContext) error){
|
|||||||
"LOCAL_MODULE_SUFFIX": skip, // TODO
|
"LOCAL_MODULE_SUFFIX": skip, // TODO
|
||||||
"LOCAL_PATH": skip, // Nothing to do, except maybe avoid the "./" in paths?
|
"LOCAL_PATH": skip, // Nothing to do, except maybe avoid the "./" in paths?
|
||||||
"LOCAL_PRELINK_MODULE": skip, // Already phased out
|
"LOCAL_PRELINK_MODULE": skip, // Already phased out
|
||||||
|
"LOCAL_BUILT_MODULE_STEM": skip,
|
||||||
|
"LOCAL_USE_AAPT2": skip, // Always enabled in Soong
|
||||||
|
"LOCAL_JAR_EXCLUDE_FILES": skip, // Soong never excludes files from jars
|
||||||
}
|
}
|
||||||
|
|
||||||
// adds a group of properties all having the same type
|
// adds a group of properties all having the same type
|
||||||
@@ -94,6 +97,7 @@ func init() {
|
|||||||
"LOCAL_NOTICE_FILE": "notice",
|
"LOCAL_NOTICE_FILE": "notice",
|
||||||
"LOCAL_JAVA_LANGUAGE_VERSION": "java_version",
|
"LOCAL_JAVA_LANGUAGE_VERSION": "java_version",
|
||||||
"LOCAL_INSTRUMENTATION_FOR": "instrumentation_for",
|
"LOCAL_INSTRUMENTATION_FOR": "instrumentation_for",
|
||||||
|
"LOCAL_MANIFEST_FILE": "manifest",
|
||||||
|
|
||||||
"LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING": "dex_preopt.profile",
|
"LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING": "dex_preopt.profile",
|
||||||
})
|
})
|
||||||
@@ -129,6 +133,7 @@ func init() {
|
|||||||
"LOCAL_RENDERSCRIPT_FLAGS": "renderscript.flags",
|
"LOCAL_RENDERSCRIPT_FLAGS": "renderscript.flags",
|
||||||
|
|
||||||
"LOCAL_JAVA_RESOURCE_DIRS": "java_resource_dirs",
|
"LOCAL_JAVA_RESOURCE_DIRS": "java_resource_dirs",
|
||||||
|
"LOCAL_RESOURCE_DIR": "resource_dirs",
|
||||||
"LOCAL_JAVACFLAGS": "javacflags",
|
"LOCAL_JAVACFLAGS": "javacflags",
|
||||||
"LOCAL_ERROR_PRONE_FLAGS": "errorprone.javacflags",
|
"LOCAL_ERROR_PRONE_FLAGS": "errorprone.javacflags",
|
||||||
"LOCAL_DX_FLAGS": "dxflags",
|
"LOCAL_DX_FLAGS": "dxflags",
|
||||||
@@ -143,7 +148,13 @@ func init() {
|
|||||||
|
|
||||||
"LOCAL_PROGUARD_FLAGS": "optimize.proguard_flags",
|
"LOCAL_PROGUARD_FLAGS": "optimize.proguard_flags",
|
||||||
"LOCAL_PROGUARD_FLAG_FILES": "optimize.proguard_flag_files",
|
"LOCAL_PROGUARD_FLAG_FILES": "optimize.proguard_flag_files",
|
||||||
|
|
||||||
|
// These will be rewritten to libs/static_libs by bpfix, after their presence is used to convert
|
||||||
|
// java_library_static to android_library.
|
||||||
|
"LOCAL_SHARED_ANDROID_LIBRARIES": "android_libs",
|
||||||
|
"LOCAL_STATIC_ANDROID_LIBRARIES": "android_static_libs",
|
||||||
})
|
})
|
||||||
|
|
||||||
addStandardProperties(bpparser.BoolType,
|
addStandardProperties(bpparser.BoolType,
|
||||||
map[string]string{
|
map[string]string{
|
||||||
// Bool properties
|
// Bool properties
|
||||||
|
@@ -496,6 +496,7 @@ include $(call all-makefiles-under,$(LOCAL_PATH))
|
|||||||
include $(CLEAR_VARS)
|
include $(CLEAR_VARS)
|
||||||
LOCAL_SRC_FILES := test.jar
|
LOCAL_SRC_FILES := test.jar
|
||||||
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
|
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
|
||||||
|
LOCAL_STATIC_ANDROID_LIBRARIES :=
|
||||||
include $(BUILD_PREBUILT)
|
include $(BUILD_PREBUILT)
|
||||||
`,
|
`,
|
||||||
expected: `
|
expected: `
|
||||||
@@ -520,6 +521,60 @@ include $(call all-makefiles-under,$(LOCAL_PATH))
|
|||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
desc: "aar",
|
||||||
|
in: `
|
||||||
|
include $(CLEAR_VARS)
|
||||||
|
LOCAL_SRC_FILES := test.java
|
||||||
|
LOCAL_RESOURCE_DIR := res
|
||||||
|
include $(BUILD_STATIC_JAVA_LIBRARY)
|
||||||
|
|
||||||
|
include $(CLEAR_VARS)
|
||||||
|
LOCAL_SRC_FILES := test.java
|
||||||
|
LOCAL_STATIC_LIBRARIES := foo
|
||||||
|
LOCAL_STATIC_ANDROID_LIBRARIES := bar
|
||||||
|
include $(BUILD_STATIC_JAVA_LIBRARY)
|
||||||
|
|
||||||
|
include $(CLEAR_VARS)
|
||||||
|
LOCAL_SRC_FILES := test.java
|
||||||
|
LOCAL_SHARED_LIBRARIES := foo
|
||||||
|
LOCAL_SHARED_ANDROID_LIBRARIES := bar
|
||||||
|
include $(BUILD_STATIC_JAVA_LIBRARY)
|
||||||
|
|
||||||
|
include $(CLEAR_VARS)
|
||||||
|
LOCAL_SRC_FILES := test.java
|
||||||
|
LOCAL_STATIC_ANDROID_LIBRARIES :=
|
||||||
|
include $(BUILD_STATIC_JAVA_LIBRARY)
|
||||||
|
`,
|
||||||
|
expected: `
|
||||||
|
android_library {
|
||||||
|
srcs: ["test.java"],
|
||||||
|
resource_dirs: ["res"],
|
||||||
|
}
|
||||||
|
|
||||||
|
android_library {
|
||||||
|
srcs: ["test.java"],
|
||||||
|
static_libs: [
|
||||||
|
"foo",
|
||||||
|
"bar",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
android_library {
|
||||||
|
srcs: ["test.java"],
|
||||||
|
libs: [
|
||||||
|
"foo",
|
||||||
|
"bar",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
java_library_static {
|
||||||
|
srcs: ["test.java"],
|
||||||
|
static_libs: [],
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEndToEnd(t *testing.T) {
|
func TestEndToEnd(t *testing.T) {
|
||||||
|
@@ -46,6 +46,7 @@ func Reformat(input string) (string, error) {
|
|||||||
type FixRequest struct {
|
type FixRequest struct {
|
||||||
simplifyKnownRedundantVariables bool
|
simplifyKnownRedundantVariables bool
|
||||||
rewriteIncorrectAndroidmkPrebuilts bool
|
rewriteIncorrectAndroidmkPrebuilts bool
|
||||||
|
rewriteIncorrectAndroidmkAndroidLibraries bool
|
||||||
mergeMatchingModuleProperties bool
|
mergeMatchingModuleProperties bool
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,6 +58,7 @@ func (r FixRequest) AddAll() (result FixRequest) {
|
|||||||
result = r
|
result = r
|
||||||
result.simplifyKnownRedundantVariables = true
|
result.simplifyKnownRedundantVariables = true
|
||||||
result.rewriteIncorrectAndroidmkPrebuilts = true
|
result.rewriteIncorrectAndroidmkPrebuilts = true
|
||||||
|
result.rewriteIncorrectAndroidmkAndroidLibraries = true
|
||||||
result.mergeMatchingModuleProperties = true
|
result.mergeMatchingModuleProperties = true
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
@@ -154,6 +156,13 @@ func (f *Fixer) fixTreeOnce(config FixRequest) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if config.rewriteIncorrectAndroidmkAndroidLibraries {
|
||||||
|
err := f.rewriteIncorrectAndroidmkAndroidLibraries()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if config.mergeMatchingModuleProperties {
|
if config.mergeMatchingModuleProperties {
|
||||||
err := f.mergeMatchingModuleProperties()
|
err := f.mergeMatchingModuleProperties()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -191,6 +200,7 @@ func (f *Fixer) rewriteIncorrectAndroidmkPrebuilts() error {
|
|||||||
switch filepath.Ext(src.Value) {
|
switch filepath.Ext(src.Value) {
|
||||||
case ".jar":
|
case ".jar":
|
||||||
renameProperty(mod, "srcs", "jars")
|
renameProperty(mod, "srcs", "jars")
|
||||||
|
|
||||||
case ".aar":
|
case ".aar":
|
||||||
renameProperty(mod, "srcs", "aars")
|
renameProperty(mod, "srcs", "aars")
|
||||||
mod.Type = "android_library_import"
|
mod.Type = "android_library_import"
|
||||||
@@ -203,6 +213,37 @@ func (f *Fixer) rewriteIncorrectAndroidmkPrebuilts() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *Fixer) rewriteIncorrectAndroidmkAndroidLibraries() error {
|
||||||
|
for _, def := range f.tree.Defs {
|
||||||
|
mod, ok := def.(*parser.Module)
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
hasAndroidLibraries := hasNonEmptyLiteralListProperty(mod, "android_libs")
|
||||||
|
hasStaticAndroidLibraries := hasNonEmptyLiteralListProperty(mod, "android_static_libs")
|
||||||
|
hasResourceDirs := hasNonEmptyLiteralListProperty(mod, "resource_dirs")
|
||||||
|
|
||||||
|
if hasAndroidLibraries || hasStaticAndroidLibraries || hasResourceDirs {
|
||||||
|
if mod.Type == "java_library_static" {
|
||||||
|
mod.Type = "android_library"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if mod.Type == "java_import" && !hasStaticAndroidLibraries {
|
||||||
|
removeProperty(mod, "android_static_libs")
|
||||||
|
}
|
||||||
|
|
||||||
|
// These may conflict with existing libs and static_libs properties, but the
|
||||||
|
// mergeMatchingModuleProperties pass will fix it.
|
||||||
|
renameProperty(mod, "shared_libs", "libs")
|
||||||
|
renameProperty(mod, "android_libs", "libs")
|
||||||
|
renameProperty(mod, "android_static_libs", "static_libs")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (f *Fixer) mergeMatchingModuleProperties() error {
|
func (f *Fixer) mergeMatchingModuleProperties() error {
|
||||||
// Make sure all the offsets are accurate
|
// Make sure all the offsets are accurate
|
||||||
buf, err := f.reparse()
|
buf, err := f.reparse()
|
||||||
@@ -355,6 +396,11 @@ func (f *Fixer) removeMatchingModuleListProperties(canonicalName string, legacyN
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func hasNonEmptyLiteralListProperty(mod *parser.Module, name string) bool {
|
||||||
|
list, found := getLiteralListProperty(mod, name)
|
||||||
|
return found && len(list.Values) > 0
|
||||||
|
}
|
||||||
|
|
||||||
func getLiteralListProperty(mod *parser.Module, name string) (list *parser.List, found bool) {
|
func getLiteralListProperty(mod *parser.Module, name string) (list *parser.List, found bool) {
|
||||||
prop, ok := mod.GetProperty(name)
|
prop, ok := mod.GetProperty(name)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
Reference in New Issue
Block a user