Support DCLA
Bug: 240424572 Test: Manual tests: 1. m --dev-mode-staging com.android.adbd com.android.media.swcodec. 2. verify the DCLA libs from the two apexes have the same size and sha1sum, and also match the libs in bazel-out. 3. empty the DCLA libs list in allowlist.go and repeat step 1 4. repeat step 2 and verify the opposite result 5. build git_master: mainline_modules_bundles-userdebug in ABTD with the cl, then follow go/build-sideload-dcla-locally to download the adbd and swcodec aab files, run the DCLA trimming workflow locally, and verify the symlinks in the two trimmed apexes are identical and also match the lib path in the DCLA apex that was created by the workflow. Change-Id: Ib2f8a29126a54829c0e10eba17b256a79930fd70
This commit is contained in:
@@ -28,6 +28,10 @@ import (
|
||||
"android/soong/bazel/cquery"
|
||||
)
|
||||
|
||||
func init() {
|
||||
registerTestMutators(android.InitRegistrationContext)
|
||||
}
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
os.Exit(m.Run())
|
||||
}
|
||||
@@ -41,6 +45,36 @@ var prepareForCcTest = android.GroupFixturePreparers(
|
||||
}),
|
||||
)
|
||||
|
||||
var ccLibInApex = "cc_lib_in_apex"
|
||||
var apexVariationName = "apex28"
|
||||
var apexVersion = "28"
|
||||
|
||||
func registerTestMutators(ctx android.RegistrationContext) {
|
||||
ctx.PostDepsMutators(func(ctx android.RegisterMutatorsContext) {
|
||||
ctx.BottomUp("apex", testApexMutator).Parallel()
|
||||
ctx.BottomUp("mixed_builds_prep", mixedBuildsPrepareMutator).Parallel()
|
||||
})
|
||||
}
|
||||
|
||||
func mixedBuildsPrepareMutator(ctx android.BottomUpMutatorContext) {
|
||||
if m := ctx.Module(); m.Enabled() {
|
||||
if mixedBuildMod, ok := m.(android.MixedBuildBuildable); ok {
|
||||
if mixedBuildMod.IsMixedBuildSupported(ctx) && android.MixedBuildsEnabled(ctx) {
|
||||
mixedBuildMod.QueueBazelCall(ctx)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func testApexMutator(mctx android.BottomUpMutatorContext) {
|
||||
modules := mctx.CreateVariations(apexVariationName)
|
||||
apexInfo := android.ApexInfo{
|
||||
ApexVariationName: apexVariationName,
|
||||
MinSdkVersion: android.ApiLevelForTest(apexVersion),
|
||||
}
|
||||
mctx.SetVariationProvider(modules[0], android.ApexInfoProvider, apexInfo)
|
||||
}
|
||||
|
||||
// testCcWithConfig runs tests using the prepareForCcTest
|
||||
//
|
||||
// See testCc for an explanation as to how to stop using this deprecated method.
|
||||
@@ -4906,3 +4940,56 @@ func TestCcBuildBrokenClangCFlags(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestDclaLibraryInApex(t *testing.T) {
|
||||
t.Parallel()
|
||||
bp := `
|
||||
cc_library_shared {
|
||||
name: "cc_lib_in_apex",
|
||||
srcs: ["foo.cc"],
|
||||
apex_available: ["myapex"],
|
||||
bazel_module: { label: "//foo/bar:bar" },
|
||||
}`
|
||||
label := "//foo/bar:bar"
|
||||
arch64 := "arm64_armv8-a"
|
||||
arch32 := "arm_armv7-a-neon"
|
||||
apexCfgKey := android.ApexConfigKey{
|
||||
WithinApex: true,
|
||||
ApexSdkVersion: "28",
|
||||
}
|
||||
|
||||
result := android.GroupFixturePreparers(
|
||||
prepareForCcTest,
|
||||
android.FixtureRegisterWithContext(registerTestMutators),
|
||||
android.FixtureModifyConfig(func(config android.Config) {
|
||||
config.BazelContext = android.MockBazelContext{
|
||||
OutputBaseDir: "outputbase",
|
||||
LabelToCcInfo: map[string]cquery.CcInfo{
|
||||
android.BuildMockBazelContextResultKey(label, arch32, android.Android, apexCfgKey): cquery.CcInfo{
|
||||
RootDynamicLibraries: []string{"foo.so"},
|
||||
},
|
||||
android.BuildMockBazelContextResultKey(label, arch64, android.Android, apexCfgKey): cquery.CcInfo{
|
||||
RootDynamicLibraries: []string{"foo.so"},
|
||||
},
|
||||
},
|
||||
BazelRequests: make(map[string]bool),
|
||||
}
|
||||
}),
|
||||
).RunTestWithBp(t, bp)
|
||||
ctx := result.TestContext
|
||||
|
||||
// Test if the bazel request is queued correctly
|
||||
key := android.BuildMockBazelContextRequestKey(label, cquery.GetCcInfo, arch32, android.Android, apexCfgKey)
|
||||
if !ctx.Config().BazelContext.(android.MockBazelContext).BazelRequests[key] {
|
||||
t.Errorf("Bazel request was not queued: %s", key)
|
||||
}
|
||||
|
||||
sharedFoo := ctx.ModuleForTests(ccLibInApex, "android_arm_armv7-a-neon_shared_"+apexVariationName).Module()
|
||||
producer := sharedFoo.(android.OutputFileProducer)
|
||||
outputFiles, err := producer.OutputFiles("")
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error getting cc_object outputfiles %s", err)
|
||||
}
|
||||
expectedOutputFiles := []string{"outputbase/execroot/__main__/foo.so"}
|
||||
android.AssertDeepEquals(t, "output files", expectedOutputFiles, outputFiles.Strings())
|
||||
}
|
||||
|
Reference in New Issue
Block a user