Merge changes Ife12ba69,Ibf910262
* changes: Implement android_test_import AndroidMkEntries minor refactoring.
This commit is contained in:
@@ -79,12 +79,14 @@ type AndroidMkEntries struct {
|
|||||||
header bytes.Buffer
|
header bytes.Buffer
|
||||||
footer bytes.Buffer
|
footer bytes.Buffer
|
||||||
|
|
||||||
AddCustomEntries func(name, prefix, moduleDir string, entries *AndroidMkEntries)
|
ExtraEntries []AndroidMkExtraEntriesFunc
|
||||||
|
|
||||||
EntryMap map[string][]string
|
EntryMap map[string][]string
|
||||||
entryOrder []string
|
entryOrder []string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AndroidMkExtraEntriesFunc func(entries *AndroidMkEntries)
|
||||||
|
|
||||||
func (a *AndroidMkEntries) SetString(name, value string) {
|
func (a *AndroidMkEntries) SetString(name, value string) {
|
||||||
if _, ok := a.EntryMap[name]; !ok {
|
if _, ok := a.EntryMap[name]; !ok {
|
||||||
a.entryOrder = append(a.entryOrder, name)
|
a.entryOrder = append(a.entryOrder, name)
|
||||||
@@ -246,9 +248,8 @@ func (a *AndroidMkEntries) fillInEntries(config Config, bpPath string, mod bluep
|
|||||||
prefix = "2ND_" + prefix
|
prefix = "2ND_" + prefix
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
blueprintDir := filepath.Dir(bpPath)
|
for _, extra := range a.ExtraEntries {
|
||||||
if a.AddCustomEntries != nil {
|
extra(a)
|
||||||
a.AddCustomEntries(name, prefix, blueprintDir, a)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write to footer.
|
// Write to footer.
|
||||||
|
@@ -155,7 +155,8 @@ func (p *PrebuiltEtc) AndroidMkEntries() AndroidMkEntries {
|
|||||||
Class: "ETC",
|
Class: "ETC",
|
||||||
SubName: nameSuffix,
|
SubName: nameSuffix,
|
||||||
OutputFile: OptionalPathForPath(p.outputFilePath),
|
OutputFile: OptionalPathForPath(p.outputFilePath),
|
||||||
AddCustomEntries: func(name, prefix, moduleDir string, entries *AndroidMkEntries) {
|
ExtraEntries: []AndroidMkExtraEntriesFunc{
|
||||||
|
func(entries *AndroidMkEntries) {
|
||||||
entries.SetString("LOCAL_MODULE_TAGS", "optional")
|
entries.SetString("LOCAL_MODULE_TAGS", "optional")
|
||||||
entries.SetString("LOCAL_MODULE_PATH", "$(OUT_DIR)/"+p.installDirPath.RelPathString())
|
entries.SetString("LOCAL_MODULE_PATH", "$(OUT_DIR)/"+p.installDirPath.RelPathString())
|
||||||
entries.SetString("LOCAL_INSTALLED_MODULE_STEM", p.outputFilePath.Base())
|
entries.SetString("LOCAL_INSTALLED_MODULE_STEM", p.outputFilePath.Base())
|
||||||
@@ -166,6 +167,7 @@ func (p *PrebuiltEtc) AndroidMkEntries() AndroidMkEntries {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -133,9 +133,11 @@ func (s *ShBinary) AndroidMkEntries() AndroidMkEntries {
|
|||||||
Class: "EXECUTABLES",
|
Class: "EXECUTABLES",
|
||||||
OutputFile: OptionalPathForPath(s.outputFilePath),
|
OutputFile: OptionalPathForPath(s.outputFilePath),
|
||||||
Include: "$(BUILD_SYSTEM)/soong_cc_prebuilt.mk",
|
Include: "$(BUILD_SYSTEM)/soong_cc_prebuilt.mk",
|
||||||
AddCustomEntries: func(name, prefix, moduleDir string, entries *AndroidMkEntries) {
|
ExtraEntries: []AndroidMkExtraEntriesFunc{
|
||||||
|
func(entries *AndroidMkEntries) {
|
||||||
s.customAndroidMkEntries(entries)
|
s.customAndroidMkEntries(entries)
|
||||||
},
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,7 +158,8 @@ func (s *ShTest) AndroidMkEntries() AndroidMkEntries {
|
|||||||
Class: "NATIVE_TESTS",
|
Class: "NATIVE_TESTS",
|
||||||
OutputFile: OptionalPathForPath(s.outputFilePath),
|
OutputFile: OptionalPathForPath(s.outputFilePath),
|
||||||
Include: "$(BUILD_SYSTEM)/soong_cc_prebuilt.mk",
|
Include: "$(BUILD_SYSTEM)/soong_cc_prebuilt.mk",
|
||||||
AddCustomEntries: func(name, prefix, moduleDir string, entries *AndroidMkEntries) {
|
ExtraEntries: []AndroidMkExtraEntriesFunc{
|
||||||
|
func(entries *AndroidMkEntries) {
|
||||||
s.customAndroidMkEntries(entries)
|
s.customAndroidMkEntries(entries)
|
||||||
|
|
||||||
entries.AddStrings("LOCAL_COMPATIBILITY_SUITE", s.testProperties.Test_suites...)
|
entries.AddStrings("LOCAL_COMPATIBILITY_SUITE", s.testProperties.Test_suites...)
|
||||||
@@ -171,6 +174,7 @@ func (s *ShTest) AndroidMkEntries() AndroidMkEntries {
|
|||||||
entries.AddStrings("LOCAL_TEST_DATA", path+":"+rel)
|
entries.AddStrings("LOCAL_TEST_DATA", path+":"+rel)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1687,12 +1687,14 @@ func (p *Prebuilt) AndroidMkEntries() android.AndroidMkEntries {
|
|||||||
Class: "ETC",
|
Class: "ETC",
|
||||||
OutputFile: android.OptionalPathForPath(p.inputApex),
|
OutputFile: android.OptionalPathForPath(p.inputApex),
|
||||||
Include: "$(BUILD_PREBUILT)",
|
Include: "$(BUILD_PREBUILT)",
|
||||||
AddCustomEntries: func(name, prefix, moduleDir string, entries *android.AndroidMkEntries) {
|
ExtraEntries: []android.AndroidMkExtraEntriesFunc{
|
||||||
|
func(entries *android.AndroidMkEntries) {
|
||||||
entries.SetString("LOCAL_MODULE_PATH", filepath.Join("$(OUT_DIR)", p.installDir.RelPathString()))
|
entries.SetString("LOCAL_MODULE_PATH", filepath.Join("$(OUT_DIR)", p.installDir.RelPathString()))
|
||||||
entries.SetString("LOCAL_MODULE_STEM", p.installFilename)
|
entries.SetString("LOCAL_MODULE_STEM", p.installFilename)
|
||||||
entries.SetBoolIfTrue("LOCAL_UNINSTALLABLE_MODULE", !p.installable())
|
entries.SetBoolIfTrue("LOCAL_UNINSTALLABLE_MODULE", !p.installable())
|
||||||
entries.AddStrings("LOCAL_OVERRIDES_PACKAGES", p.properties.Overrides...)
|
entries.AddStrings("LOCAL_OVERRIDES_PACKAGES", p.properties.Overrides...)
|
||||||
},
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -122,6 +122,15 @@ func testSuiteComponent(w io.Writer, test_suites []string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testSuiteComponentEntries(entries *android.AndroidMkEntries, test_suites []string) {
|
||||||
|
entries.SetString("LOCAL_MODULE_TAGS", "tests")
|
||||||
|
if len(test_suites) > 0 {
|
||||||
|
entries.AddStrings("LOCAL_COMPATIBILITY_SUITE", test_suites...)
|
||||||
|
} else {
|
||||||
|
entries.SetString("LOCAL_COMPATIBILITY_SUITE", "null-suite")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (j *Test) AndroidMk() android.AndroidMkData {
|
func (j *Test) AndroidMk() android.AndroidMkData {
|
||||||
data := j.Library.AndroidMk()
|
data := j.Library.AndroidMk()
|
||||||
data.Extra = append(data.Extra, func(w io.Writer, outputFile android.Path) {
|
data.Extra = append(data.Extra, func(w io.Writer, outputFile android.Path) {
|
||||||
@@ -614,7 +623,8 @@ func (a *AndroidAppImport) AndroidMkEntries() android.AndroidMkEntries {
|
|||||||
Class: "APPS",
|
Class: "APPS",
|
||||||
OutputFile: android.OptionalPathForPath(a.outputFile),
|
OutputFile: android.OptionalPathForPath(a.outputFile),
|
||||||
Include: "$(BUILD_SYSTEM)/soong_app_prebuilt.mk",
|
Include: "$(BUILD_SYSTEM)/soong_app_prebuilt.mk",
|
||||||
AddCustomEntries: func(name, prefix, moduleDir string, entries *android.AndroidMkEntries) {
|
ExtraEntries: []android.AndroidMkExtraEntriesFunc{
|
||||||
|
func(entries *android.AndroidMkEntries) {
|
||||||
entries.SetBoolIfTrue("LOCAL_PRIVILEGED_MODULE", Bool(a.properties.Privileged))
|
entries.SetBoolIfTrue("LOCAL_PRIVILEGED_MODULE", Bool(a.properties.Privileged))
|
||||||
if a.certificate != nil {
|
if a.certificate != nil {
|
||||||
entries.SetString("LOCAL_CERTIFICATE", a.certificate.Pem.String())
|
entries.SetString("LOCAL_CERTIFICATE", a.certificate.Pem.String())
|
||||||
@@ -627,9 +637,19 @@ func (a *AndroidAppImport) AndroidMkEntries() android.AndroidMkEntries {
|
|||||||
}
|
}
|
||||||
entries.AddStrings("LOCAL_INSTALLED_MODULE_STEM", a.installPath.Rel())
|
entries.AddStrings("LOCAL_INSTALLED_MODULE_STEM", a.installPath.Rel())
|
||||||
},
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *AndroidTestImport) AndroidMkEntries() android.AndroidMkEntries {
|
||||||
|
entries := a.AndroidAppImport.AndroidMkEntries()
|
||||||
|
entries.ExtraEntries = append(entries.ExtraEntries, func(entries *android.AndroidMkEntries) {
|
||||||
|
testSuiteComponentEntries(entries, a.testProperties.Test_suites)
|
||||||
|
androidMkEntriesWriteTestData(a.data, entries)
|
||||||
|
})
|
||||||
|
return entries
|
||||||
|
}
|
||||||
|
|
||||||
func androidMkWriteTestData(data android.Paths, ret *android.AndroidMkData) {
|
func androidMkWriteTestData(data android.Paths, ret *android.AndroidMkData) {
|
||||||
var testFiles []string
|
var testFiles []string
|
||||||
for _, d := range data {
|
for _, d := range data {
|
||||||
@@ -641,3 +661,11 @@ func androidMkWriteTestData(data android.Paths, ret *android.AndroidMkData) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func androidMkEntriesWriteTestData(data android.Paths, entries *android.AndroidMkEntries) {
|
||||||
|
var testFiles []string
|
||||||
|
for _, d := range data {
|
||||||
|
testFiles = append(testFiles, d.String()+":"+d.Rel())
|
||||||
|
}
|
||||||
|
entries.AddStrings("LOCAL_COMPATIBILITY_SUPPORT_FILES", testFiles...)
|
||||||
|
}
|
||||||
|
38
java/app.go
38
java/app.go
@@ -39,6 +39,7 @@ func init() {
|
|||||||
android.RegisterModuleType("android_app_certificate", AndroidAppCertificateFactory)
|
android.RegisterModuleType("android_app_certificate", AndroidAppCertificateFactory)
|
||||||
android.RegisterModuleType("override_android_app", OverrideAndroidAppModuleFactory)
|
android.RegisterModuleType("override_android_app", OverrideAndroidAppModuleFactory)
|
||||||
android.RegisterModuleType("android_app_import", AndroidAppImportFactory)
|
android.RegisterModuleType("android_app_import", AndroidAppImportFactory)
|
||||||
|
android.RegisterModuleType("android_test_import", AndroidTestImportFactory)
|
||||||
|
|
||||||
initAndroidAppImportVariantGroupTypes()
|
initAndroidAppImportVariantGroupTypes()
|
||||||
}
|
}
|
||||||
@@ -866,6 +867,10 @@ func (a *AndroidAppImport) uncompressDex(
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *AndroidAppImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
func (a *AndroidAppImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||||
|
a.generateAndroidBuildActions(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *AndroidAppImport) generateAndroidBuildActions(ctx android.ModuleContext) {
|
||||||
numCertPropsSet := 0
|
numCertPropsSet := 0
|
||||||
if String(a.properties.Certificate) != "" {
|
if String(a.properties.Certificate) != "" {
|
||||||
numCertPropsSet++
|
numCertPropsSet++
|
||||||
@@ -1024,6 +1029,39 @@ func AndroidAppImportFactory() android.Module {
|
|||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AndroidTestImport struct {
|
||||||
|
AndroidAppImport
|
||||||
|
|
||||||
|
testProperties testProperties
|
||||||
|
|
||||||
|
data android.Paths
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *AndroidTestImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||||
|
a.generateAndroidBuildActions(ctx)
|
||||||
|
|
||||||
|
a.data = android.PathsForModuleSrc(ctx, a.testProperties.Data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// android_test_import imports a prebuilt test apk with additional processing specified in the
|
||||||
|
// module. DPI or arch variant configurations can be made as with android_app_import.
|
||||||
|
func AndroidTestImportFactory() android.Module {
|
||||||
|
module := &AndroidTestImport{}
|
||||||
|
module.AddProperties(&module.properties)
|
||||||
|
module.AddProperties(&module.dexpreoptProperties)
|
||||||
|
module.AddProperties(&module.usesLibrary.usesLibraryProperties)
|
||||||
|
module.AddProperties(&module.testProperties)
|
||||||
|
module.populateAllVariantStructs()
|
||||||
|
android.AddLoadHook(module, func(ctx android.LoadHookContext) {
|
||||||
|
module.processVariants(ctx)
|
||||||
|
})
|
||||||
|
|
||||||
|
InitJavaModule(module, android.DeviceSupported)
|
||||||
|
android.InitSingleSourcePrebuiltModule(module, &module.properties, "Apk")
|
||||||
|
|
||||||
|
return module
|
||||||
|
}
|
||||||
|
|
||||||
type UsesLibraryProperties struct {
|
type UsesLibraryProperties struct {
|
||||||
// A list of shared library modules that will be listed in uses-library tags in the AndroidManifest.xml file.
|
// A list of shared library modules that will be listed in uses-library tags in the AndroidManifest.xml file.
|
||||||
Uses_libs []string
|
Uses_libs []string
|
||||||
|
@@ -1381,6 +1381,34 @@ func TestAndroidAppImport_ArchVariants(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAndroidTestImport(t *testing.T) {
|
||||||
|
ctx, config := testJava(t, `
|
||||||
|
android_test_import {
|
||||||
|
name: "foo",
|
||||||
|
apk: "prebuilts/apk/app.apk",
|
||||||
|
presigned: true,
|
||||||
|
data: [
|
||||||
|
"testdata/data",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
|
||||||
|
test := ctx.ModuleForTests("foo", "android_common").Module().(*AndroidTestImport)
|
||||||
|
|
||||||
|
// Check android mks.
|
||||||
|
entries := android.AndroidMkEntriesForTest(t, config, "", test)
|
||||||
|
expected := []string{"tests"}
|
||||||
|
actual := entries.EntryMap["LOCAL_MODULE_TAGS"]
|
||||||
|
if !reflect.DeepEqual(expected, actual) {
|
||||||
|
t.Errorf("Unexpected module tags - expected: %q, actual: %q", expected, actual)
|
||||||
|
}
|
||||||
|
expected = []string{"testdata/data:testdata/data"}
|
||||||
|
actual = entries.EntryMap["LOCAL_COMPATIBILITY_SUPPORT_FILES"]
|
||||||
|
if !reflect.DeepEqual(expected, actual) {
|
||||||
|
t.Errorf("Unexpected test data - expected: %q, actual: %q", expected, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestStl(t *testing.T) {
|
func TestStl(t *testing.T) {
|
||||||
ctx, _ := testJava(t, cc.GatherRequiredDepsForTest(android.Android)+`
|
ctx, _ := testJava(t, cc.GatherRequiredDepsForTest(android.Android)+`
|
||||||
cc_library {
|
cc_library {
|
||||||
|
@@ -66,6 +66,7 @@ func testContext(bp string, fs map[string][]byte) *android.TestContext {
|
|||||||
ctx.RegisterModuleType("android_library", android.ModuleFactoryAdaptor(AndroidLibraryFactory))
|
ctx.RegisterModuleType("android_library", android.ModuleFactoryAdaptor(AndroidLibraryFactory))
|
||||||
ctx.RegisterModuleType("android_test", android.ModuleFactoryAdaptor(AndroidTestFactory))
|
ctx.RegisterModuleType("android_test", android.ModuleFactoryAdaptor(AndroidTestFactory))
|
||||||
ctx.RegisterModuleType("android_test_helper_app", android.ModuleFactoryAdaptor(AndroidTestHelperAppFactory))
|
ctx.RegisterModuleType("android_test_helper_app", android.ModuleFactoryAdaptor(AndroidTestHelperAppFactory))
|
||||||
|
ctx.RegisterModuleType("android_test_import", android.ModuleFactoryAdaptor(AndroidTestImportFactory))
|
||||||
ctx.RegisterModuleType("java_binary", android.ModuleFactoryAdaptor(BinaryFactory))
|
ctx.RegisterModuleType("java_binary", android.ModuleFactoryAdaptor(BinaryFactory))
|
||||||
ctx.RegisterModuleType("java_binary_host", android.ModuleFactoryAdaptor(BinaryHostFactory))
|
ctx.RegisterModuleType("java_binary_host", android.ModuleFactoryAdaptor(BinaryHostFactory))
|
||||||
ctx.RegisterModuleType("java_device_for_host", android.ModuleFactoryAdaptor(DeviceForHostFactory))
|
ctx.RegisterModuleType("java_device_for_host", android.ModuleFactoryAdaptor(DeviceForHostFactory))
|
||||||
@@ -200,6 +201,8 @@ func testContext(bp string, fs map[string][]byte) *android.TestContext {
|
|||||||
|
|
||||||
"cert/new_cert.x509.pem": nil,
|
"cert/new_cert.x509.pem": nil,
|
||||||
"cert/new_cert.pk8": nil,
|
"cert/new_cert.pk8": nil,
|
||||||
|
|
||||||
|
"testdata/data": nil,
|
||||||
}
|
}
|
||||||
|
|
||||||
for k, v := range fs {
|
for k, v := range fs {
|
||||||
|
@@ -77,10 +77,12 @@ func (p *platformCompatConfig) AndroidMkEntries() android.AndroidMkEntries {
|
|||||||
Class: "ETC",
|
Class: "ETC",
|
||||||
OutputFile: android.OptionalPathForPath(p.configFile),
|
OutputFile: android.OptionalPathForPath(p.configFile),
|
||||||
Include: "$(BUILD_PREBUILT)",
|
Include: "$(BUILD_PREBUILT)",
|
||||||
AddCustomEntries: func(name, prefix, moduleDir string, entries *android.AndroidMkEntries) {
|
ExtraEntries: []android.AndroidMkExtraEntriesFunc{
|
||||||
|
func(entries *android.AndroidMkEntries) {
|
||||||
entries.SetString("LOCAL_MODULE_PATH", "$(OUT_DIR)/"+p.installDirPath.RelPathString())
|
entries.SetString("LOCAL_MODULE_PATH", "$(OUT_DIR)/"+p.installDirPath.RelPathString())
|
||||||
entries.SetString("LOCAL_INSTALLED_MODULE_STEM", p.configFile.Base())
|
entries.SetString("LOCAL_INSTALLED_MODULE_STEM", p.configFile.Base())
|
||||||
},
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user