VNDK APEX contains related *.libraries.txt files
These files were highly coupled with vndk version, so having them inside the corresponding VNDK APEX is reasonable. These files are used by linkerconfig and libnativeloader. In the future, they reference these files from and VNDK APEX. Bug: 141450808 Test: m com.android.vndk.current Change-Id: I055a979d2636ddd8844a0afff81f6ba441f7965e
This commit is contained in:
@@ -17,6 +17,7 @@ package apex
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"reflect"
|
||||
"sort"
|
||||
"strings"
|
||||
@@ -117,6 +118,7 @@ func testApexContext(t *testing.T, bp string, handlers ...testCustomizer) (*andr
|
||||
ctx.RegisterModuleType("cc_test", android.ModuleFactoryAdaptor(cc.TestFactory))
|
||||
ctx.RegisterModuleType("llndk_library", android.ModuleFactoryAdaptor(cc.LlndkLibraryFactory))
|
||||
ctx.RegisterModuleType("vndk_prebuilt_shared", android.ModuleFactoryAdaptor(cc.VndkPrebuiltSharedFactory))
|
||||
ctx.RegisterModuleType("vndk_libraries_txt", android.ModuleFactoryAdaptor(cc.VndkLibrariesTxtFactory))
|
||||
ctx.RegisterModuleType("toolchain_library", android.ModuleFactoryAdaptor(cc.ToolchainLibraryFactory))
|
||||
ctx.RegisterModuleType("prebuilt_etc", android.ModuleFactoryAdaptor(android.PrebuiltEtcFactory))
|
||||
ctx.RegisterModuleType("sh_binary", android.ModuleFactoryAdaptor(android.ShBinaryFactory))
|
||||
@@ -298,6 +300,7 @@ func testApexContext(t *testing.T, bp string, handlers ...testCustomizer) (*andr
|
||||
"framework/aidl/a.aidl": nil,
|
||||
"build/make/core/proguard.flags": nil,
|
||||
"build/make/core/proguard_basic_keeps.flags": nil,
|
||||
"dummy.txt": nil,
|
||||
}
|
||||
|
||||
for _, handler := range handlers {
|
||||
@@ -1319,7 +1322,18 @@ func ensureExactContents(t *testing.T, ctx *android.TestContext, moduleName stri
|
||||
apexRule := ctx.ModuleForTests(moduleName, "android_common_"+moduleName+"_image").Rule("apexRule")
|
||||
copyCmds := apexRule.Args["copy_commands"]
|
||||
imageApexDir := "/image.apex/"
|
||||
dstFiles := []string{}
|
||||
var failed bool
|
||||
var surplus []string
|
||||
filesMatched := make(map[string]bool)
|
||||
addContent := func(content string) {
|
||||
for _, expected := range files {
|
||||
if matched, _ := path.Match(expected, content); matched {
|
||||
filesMatched[expected] = true
|
||||
return
|
||||
}
|
||||
}
|
||||
surplus = append(surplus, content)
|
||||
}
|
||||
for _, cmd := range strings.Split(copyCmds, "&&") {
|
||||
cmd = strings.TrimSpace(cmd)
|
||||
if cmd == "" {
|
||||
@@ -1338,42 +1352,26 @@ func ensureExactContents(t *testing.T, ctx *android.TestContext, moduleName stri
|
||||
t.Fatal("copyCmds should copy a file to image.apex/", cmd)
|
||||
}
|
||||
dstFile := dst[index+len(imageApexDir):]
|
||||
dstFiles = append(dstFiles, dstFile)
|
||||
addContent(dstFile)
|
||||
default:
|
||||
t.Fatalf("copyCmds should contain mkdir/cp commands only: %q", cmd)
|
||||
}
|
||||
}
|
||||
sort.Strings(dstFiles)
|
||||
sort.Strings(files)
|
||||
missing := []string{}
|
||||
surplus := []string{}
|
||||
i := 0
|
||||
j := 0
|
||||
for i < len(dstFiles) && j < len(files) {
|
||||
if dstFiles[i] == files[j] {
|
||||
i++
|
||||
j++
|
||||
} else if dstFiles[i] < files[j] {
|
||||
surplus = append(surplus, dstFiles[i])
|
||||
i++
|
||||
} else {
|
||||
missing = append(missing, files[j])
|
||||
j++
|
||||
}
|
||||
}
|
||||
if i < len(dstFiles) {
|
||||
surplus = append(surplus, dstFiles[i:]...)
|
||||
}
|
||||
if j < len(files) {
|
||||
missing = append(missing, files[j:]...)
|
||||
}
|
||||
|
||||
failed := false
|
||||
if len(surplus) > 0 {
|
||||
sort.Strings(surplus)
|
||||
t.Log("surplus files", surplus)
|
||||
failed = true
|
||||
}
|
||||
if len(missing) > 0 {
|
||||
|
||||
if len(files) > len(filesMatched) {
|
||||
var missing []string
|
||||
for _, expected := range files {
|
||||
if !filesMatched[expected] {
|
||||
missing = append(missing, expected)
|
||||
}
|
||||
}
|
||||
sort.Strings(missing)
|
||||
t.Log("missing files", missing)
|
||||
failed = true
|
||||
}
|
||||
@@ -1418,13 +1416,18 @@ func TestVndkApexCurrent(t *testing.T) {
|
||||
system_shared_libs: [],
|
||||
stl: "none",
|
||||
}
|
||||
`)
|
||||
`+vndkLibrariesTxtFiles("current"))
|
||||
|
||||
ensureExactContents(t, ctx, "myapex", []string{
|
||||
"lib/libvndk.so",
|
||||
"lib/libvndksp.so",
|
||||
"lib64/libvndk.so",
|
||||
"lib64/libvndksp.so",
|
||||
"etc/llndk.libraries.VER.txt",
|
||||
"etc/vndkcore.libraries.VER.txt",
|
||||
"etc/vndksp.libraries.VER.txt",
|
||||
"etc/vndkprivate.libraries.VER.txt",
|
||||
"etc/vndkcorevariant.libraries.VER.txt",
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1469,18 +1472,44 @@ func TestVndkApexWithPrebuilt(t *testing.T) {
|
||||
system_shared_libs: [],
|
||||
stl: "none",
|
||||
}
|
||||
`, withFiles(map[string][]byte{
|
||||
"libvndk.so": nil,
|
||||
"libvndk.arm.so": nil,
|
||||
}))
|
||||
`+vndkLibrariesTxtFiles("current"),
|
||||
withFiles(map[string][]byte{
|
||||
"libvndk.so": nil,
|
||||
"libvndk.arm.so": nil,
|
||||
}))
|
||||
|
||||
ensureExactContents(t, ctx, "myapex", []string{
|
||||
"lib/libvndk.so",
|
||||
"lib/libvndk.arm.so",
|
||||
"lib64/libvndk.so",
|
||||
"etc/*",
|
||||
})
|
||||
}
|
||||
|
||||
func vndkLibrariesTxtFiles(vers ...string) (result string) {
|
||||
for _, v := range vers {
|
||||
if v == "current" {
|
||||
for _, txt := range []string{"llndk", "vndkcore", "vndksp", "vndkprivate", "vndkcorevariant"} {
|
||||
result += `
|
||||
vndk_libraries_txt {
|
||||
name: "` + txt + `.libraries.txt",
|
||||
}
|
||||
`
|
||||
}
|
||||
} else {
|
||||
for _, txt := range []string{"llndk", "vndkcore", "vndksp", "vndkprivate"} {
|
||||
result += `
|
||||
prebuilt_etc {
|
||||
name: "` + txt + `.libraries.` + v + `.txt",
|
||||
src: "dummy.txt",
|
||||
}
|
||||
`
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func TestVndkApexVersion(t *testing.T) {
|
||||
ctx, _ := testApex(t, `
|
||||
apex_vndk {
|
||||
@@ -1530,17 +1559,19 @@ func TestVndkApexVersion(t *testing.T) {
|
||||
srcs: ["libvndk27_x86_64.so"],
|
||||
},
|
||||
},
|
||||
}
|
||||
`, withFiles(map[string][]byte{
|
||||
"libvndk27_arm.so": nil,
|
||||
"libvndk27_arm64.so": nil,
|
||||
"libvndk27_x86.so": nil,
|
||||
"libvndk27_x86_64.so": nil,
|
||||
}))
|
||||
}
|
||||
`+vndkLibrariesTxtFiles("27"),
|
||||
withFiles(map[string][]byte{
|
||||
"libvndk27_arm.so": nil,
|
||||
"libvndk27_arm64.so": nil,
|
||||
"libvndk27_x86.so": nil,
|
||||
"libvndk27_x86_64.so": nil,
|
||||
}))
|
||||
|
||||
ensureExactContents(t, ctx, "myapex_v27", []string{
|
||||
"lib/libvndk27_arm.so",
|
||||
"lib64/libvndk27_arm64.so",
|
||||
"etc/*",
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1607,7 +1638,7 @@ func TestVndkApexNameRule(t *testing.T) {
|
||||
name: "myapex.key",
|
||||
public_key: "testkey.avbpubkey",
|
||||
private_key: "testkey.pem",
|
||||
}`)
|
||||
}`+vndkLibrariesTxtFiles("28", "current"))
|
||||
|
||||
assertApexName := func(expected, moduleName string) {
|
||||
bundle := ctx.ModuleForTests(moduleName, "android_common_"+moduleName+"_image").Module().(*apexBundle)
|
||||
@@ -1647,18 +1678,20 @@ func TestVndkApexSkipsNativeBridgeSupportedModules(t *testing.T) {
|
||||
system_shared_libs: [],
|
||||
stl: "none",
|
||||
}
|
||||
`, withTargets(map[android.OsType][]android.Target{
|
||||
android.Android: []android.Target{
|
||||
{Os: android.Android, Arch: android.Arch{ArchType: android.Arm64, ArchVariant: "armv8-a", Abi: []string{"arm64-v8a"}}, NativeBridge: android.NativeBridgeDisabled, NativeBridgeHostArchName: "", NativeBridgeRelativePath: ""},
|
||||
{Os: android.Android, Arch: android.Arch{ArchType: android.Arm, ArchVariant: "armv7-a-neon", Abi: []string{"armeabi-v7a"}}, NativeBridge: android.NativeBridgeDisabled, NativeBridgeHostArchName: "", NativeBridgeRelativePath: ""},
|
||||
{Os: android.Android, Arch: android.Arch{ArchType: android.X86_64, ArchVariant: "silvermont", Abi: []string{"arm64-v8a"}}, NativeBridge: android.NativeBridgeEnabled, NativeBridgeHostArchName: "arm64", NativeBridgeRelativePath: "x86_64"},
|
||||
{Os: android.Android, Arch: android.Arch{ArchType: android.X86, ArchVariant: "silvermont", Abi: []string{"armeabi-v7a"}}, NativeBridge: android.NativeBridgeEnabled, NativeBridgeHostArchName: "arm", NativeBridgeRelativePath: "x86"},
|
||||
},
|
||||
}))
|
||||
`+vndkLibrariesTxtFiles("current"),
|
||||
withTargets(map[android.OsType][]android.Target{
|
||||
android.Android: []android.Target{
|
||||
{Os: android.Android, Arch: android.Arch{ArchType: android.Arm64, ArchVariant: "armv8-a", Abi: []string{"arm64-v8a"}}, NativeBridge: android.NativeBridgeDisabled, NativeBridgeHostArchName: "", NativeBridgeRelativePath: ""},
|
||||
{Os: android.Android, Arch: android.Arch{ArchType: android.Arm, ArchVariant: "armv7-a-neon", Abi: []string{"armeabi-v7a"}}, NativeBridge: android.NativeBridgeDisabled, NativeBridgeHostArchName: "", NativeBridgeRelativePath: ""},
|
||||
{Os: android.Android, Arch: android.Arch{ArchType: android.X86_64, ArchVariant: "silvermont", Abi: []string{"arm64-v8a"}}, NativeBridge: android.NativeBridgeEnabled, NativeBridgeHostArchName: "arm64", NativeBridgeRelativePath: "x86_64"},
|
||||
{Os: android.Android, Arch: android.Arch{ArchType: android.X86, ArchVariant: "silvermont", Abi: []string{"armeabi-v7a"}}, NativeBridge: android.NativeBridgeEnabled, NativeBridgeHostArchName: "arm", NativeBridgeRelativePath: "x86"},
|
||||
},
|
||||
}))
|
||||
|
||||
ensureExactContents(t, ctx, "myapex", []string{
|
||||
"lib/libvndk.so",
|
||||
"lib64/libvndk.so",
|
||||
"etc/*",
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1693,8 +1726,7 @@ func TestVndkApexDoesntSupportNativeBridgeSupported(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVndkApexWithBinder32(t *testing.T) {
|
||||
ctx, _ := testApex(t,
|
||||
`
|
||||
ctx, _ := testApex(t, `
|
||||
apex_vndk {
|
||||
name: "myapex_v27",
|
||||
key: "myapex.key",
|
||||
@@ -1738,7 +1770,7 @@ func TestVndkApexWithBinder32(t *testing.T) {
|
||||
}
|
||||
},
|
||||
}
|
||||
`,
|
||||
`+vndkLibrariesTxtFiles("27"),
|
||||
withFiles(map[string][]byte{
|
||||
"libvndk27.so": nil,
|
||||
"libvndk27binder32.so": nil,
|
||||
@@ -1753,6 +1785,7 @@ func TestVndkApexWithBinder32(t *testing.T) {
|
||||
|
||||
ensureExactContents(t, ctx, "myapex_v27", []string{
|
||||
"lib/libvndk27binder32.so",
|
||||
"etc/*",
|
||||
})
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user