From 805e0a53ef53299878643dffbb7641c21892bcfe Mon Sep 17 00:00:00 2001 From: Anton Hansson Date: Fri, 25 Nov 2022 14:06:46 +0000 Subject: [PATCH] Ignore native bridge archs for apex selection This leads to an arm64 apex being used on a device that is mixed x86_64 with nativebridge=arm64. A device like that doesn't appear to work with arm64 binaries. For example, the boringssl-self-check binary crashes on boot. Bug: 260115309 Test: unit test Test: boot emulator with this combination Change-Id: Ic4a91974290a05b1799f755fcf52ef226d68f4c2 --- apex/apex_test.go | 24 ++++++++++++++++++++++++ apex/prebuilt.go | 5 ++++- java/app_set.go | 7 +++++-- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/apex/apex_test.go b/apex/apex_test.go index ea3e73470..883c3c847 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -8413,6 +8413,30 @@ func TestApexSet(t *testing.T) { } } +func TestApexSet_NativeBridge(t *testing.T) { + ctx := testApex(t, ` + apex_set { + name: "myapex", + set: "myapex.apks", + filename: "foo_v2.apex", + overrides: ["foo"], + } + `, + android.FixtureModifyConfig(func(config android.Config) { + config.Targets[android.Android] = []android.Target{ + {Os: android.Android, Arch: android.Arch{ArchType: android.X86_64, ArchVariant: "", Abi: []string{"x86_64"}}}, + {Os: android.Android, Arch: android.Arch{ArchType: android.Arm64, ArchVariant: "armv8-a", Abi: []string{"arm64-v8a"}}, NativeBridge: android.NativeBridgeEnabled}, + } + }), + ) + + m := ctx.ModuleForTests("myapex.apex.extractor", "android_common") + + // Check extract_apks tool parameters. No native bridge arch expected + extractedApex := m.Output("extracted/myapex.apks") + android.AssertStringEquals(t, "abis", "X86_64", extractedApex.Args["abis"]) +} + func TestNoStaticLinkingToStubsLib(t *testing.T) { testApexError(t, `.*required by "mylib" is a native library providing stub.*`, ` apex { diff --git a/apex/prebuilt.go b/apex/prebuilt.go index 39446a1b7..6fdd50a5e 100644 --- a/apex/prebuilt.go +++ b/apex/prebuilt.go @@ -24,6 +24,7 @@ import ( "android/soong/android" "android/soong/java" "android/soong/provenance" + "github.com/google/blueprint" "github.com/google/blueprint/proptools" ) @@ -831,6 +832,8 @@ func (p *prebuiltApexExtractorModule) GenerateAndroidBuildActions(ctx android.Mo } apexSet := android.SingleSourcePathFromSupplier(ctx, srcsSupplier, "set") p.extractedApex = android.PathForModuleOut(ctx, "extracted", apexSet.Base()) + // Filter out NativeBridge archs (b/260115309) + abis := java.SupportedAbis(ctx, true) ctx.Build(pctx, android.BuildParams{ Rule: extractMatchingApex, @@ -838,7 +841,7 @@ func (p *prebuiltApexExtractorModule) GenerateAndroidBuildActions(ctx android.Mo Inputs: android.Paths{apexSet}, Output: p.extractedApex, Args: map[string]string{ - "abis": strings.Join(java.SupportedAbis(ctx), ","), + "abis": strings.Join(abis, ","), "allow-prereleased": strconv.FormatBool(proptools.Bool(p.properties.Prerelease)), "sdk-version": ctx.Config().PlatformSdkVersion().String(), }, diff --git a/java/app_set.go b/java/app_set.go index d8c2a8d3c..0f55b7791 100644 --- a/java/app_set.go +++ b/java/app_set.go @@ -98,7 +98,7 @@ var TargetCpuAbi = map[string]string{ "x86_64": "X86_64", } -func SupportedAbis(ctx android.ModuleContext) []string { +func SupportedAbis(ctx android.ModuleContext, excludeNativeBridgeAbis bool) []string { abiName := func(targetIdx int, deviceArch string) string { if abi, found := TargetCpuAbi[deviceArch]; found { return abi @@ -109,6 +109,9 @@ func SupportedAbis(ctx android.ModuleContext) []string { var result []string for i, target := range ctx.Config().Targets[android.Android] { + if target.NativeBridge == android.NativeBridgeEnabled && excludeNativeBridgeAbis { + continue + } result = append(result, abiName(i, target.Arch.ArchType.String())) } return result @@ -135,7 +138,7 @@ func (as *AndroidAppSet) GenerateAndroidBuildActions(ctx android.ModuleContext) ImplicitOutputs: android.WritablePaths{as.packedOutput, as.apkcertsFile}, Inputs: android.Paths{as.prebuilt.SingleSourcePath(ctx)}, Args: map[string]string{ - "abis": strings.Join(SupportedAbis(ctx), ","), + "abis": strings.Join(SupportedAbis(ctx, false), ","), "allow-prereleased": strconv.FormatBool(proptools.Bool(as.properties.Prerelease)), "screen-densities": screenDensities, "sdk-version": ctx.Config().PlatformSdkVersion().String(),