diff --git a/apex/apex.go b/apex/apex.go index da344ccb2..da309ca9e 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -1852,9 +1852,15 @@ func (a *apexBundle) WalkPayloadDeps(ctx android.ModuleContext, do android.Paylo return false } + dt := ctx.OtherModuleDependencyTag(child) + + if _, ok := dt.(android.ExcludeFromApexContentsTag); ok { + return false + } + // Check for the direct dependencies that contribute to the payload - if dt, ok := ctx.OtherModuleDependencyTag(child).(dependencyTag); ok { - if dt.payload { + if adt, ok := dt.(dependencyTag); ok { + if adt.payload { return do(ctx, parent, am, false /* externalDep */) } // As soon as the dependency graph crosses the APEX boundary, don't go further. diff --git a/apex/apex_test.go b/apex/apex_test.go index fb8b08411..3c37ca304 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -5928,6 +5928,41 @@ func TestAllowedFiles(t *testing.T) { } } +func TestNonPreferredPrebuiltDependency(t *testing.T) { + _, _ = testApex(t, ` + apex { + name: "myapex", + key: "myapex.key", + native_shared_libs: ["mylib"], + } + + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + + cc_library { + name: "mylib", + srcs: ["mylib.cpp"], + stubs: { + versions: ["10000"], + }, + apex_available: ["myapex"], + } + + cc_prebuilt_library_shared { + name: "mylib", + prefer: false, + srcs: ["prebuilt.so"], + stubs: { + versions: ["10000"], + }, + apex_available: ["myapex"], + } + `) +} + func TestMain(m *testing.M) { run := func() int { setUp() diff --git a/sdk/cc_sdk_test.go b/sdk/cc_sdk_test.go index 123fe7069..c59cd3095 100644 --- a/sdk/cc_sdk_test.go +++ b/sdk/cc_sdk_test.go @@ -69,6 +69,28 @@ func TestSdkIsCompileMultilibBoth(t *testing.T) { ensureListContains(t, inputs, arm64Output.String()) } +func TestSdkCompileMultilibOverride(t *testing.T) { + result := testSdkWithCc(t, ` + sdk { + name: "mysdk", + native_shared_libs: ["sdkmember"], + compile_multilib: "64", + } + + cc_library_shared { + name: "sdkmember", + srcs: ["Test.cpp"], + stl: "none", + compile_multilib: "64", + } + `) + + result.CheckSnapshot("mysdk", "", + checkAllCopyRules(` +.intermediates/sdkmember/android_arm64_armv8-a_shared/sdkmember.so -> arm64/lib/sdkmember.so +`)) +} + func TestBasicSdkWithCc(t *testing.T) { result := testSdkWithCc(t, ` sdk { @@ -79,6 +101,8 @@ func TestBasicSdkWithCc(t *testing.T) { cc_library_shared { name: "sdkmember", system_shared_libs: [], + stl: "none", + apex_available: ["mysdkapex"], } sdk_snapshot { @@ -152,6 +176,13 @@ func TestBasicSdkWithCc(t *testing.T) { key: "myapex.key", certificate: ":myapex.cert", } + + apex { + name: "mysdkapex", + native_shared_libs: ["sdkmember"], + key: "myapex.key", + certificate: ":myapex.cert", + } `) sdkMemberV1 := result.ModuleForTests("sdkmember_mysdk_1", "android_arm64_armv8-a_shared_myapex").Rule("toc").Output diff --git a/sdk/sdk.go b/sdk/sdk.go index b9b8199d3..3e760080e 100644 --- a/sdk/sdk.go +++ b/sdk/sdk.go @@ -218,7 +218,7 @@ func newSdkModule(moduleExports bool) *sdk { Compile_multilib *string } p := &props{Compile_multilib: proptools.StringPtr("both")} - ctx.AppendProperties(p) + ctx.PrependProperties(p) }) return s } @@ -330,6 +330,11 @@ type dependencyTag struct { blueprint.BaseDependencyTag } +// Mark this tag so dependencies that use it are excluded from APEX contents. +func (t dependencyTag) ExcludeFromApexContents() {} + +var _ android.ExcludeFromApexContentsTag = dependencyTag{} + // For dependencies from an in-development version of an SDK member to frozen versions of the same member // e.g. libfoo -> libfoo.mysdk.11 and libfoo.mysdk.12 type sdkMemberVersionedDepTag struct { diff --git a/sdk/testing.go b/sdk/testing.go index 40abdcd0f..4d029e422 100644 --- a/sdk/testing.go +++ b/sdk/testing.go @@ -44,14 +44,15 @@ func testSdkContext(bp string, fs map[string][]byte) (*android.TestContext, andr ` + cc.GatherRequiredDepsForTest(android.Android, android.Windows) mockFS := map[string][]byte{ - "build/make/target/product/security": nil, - "apex_manifest.json": nil, - "system/sepolicy/apex/myapex-file_contexts": nil, - "system/sepolicy/apex/myapex2-file_contexts": nil, - "myapex.avbpubkey": nil, - "myapex.pem": nil, - "myapex.x509.pem": nil, - "myapex.pk8": nil, + "build/make/target/product/security": nil, + "apex_manifest.json": nil, + "system/sepolicy/apex/myapex-file_contexts": nil, + "system/sepolicy/apex/myapex2-file_contexts": nil, + "system/sepolicy/apex/mysdkapex-file_contexts": nil, + "myapex.avbpubkey": nil, + "myapex.pem": nil, + "myapex.x509.pem": nil, + "myapex.pk8": nil, } cc.GatherRequiredFilesForTest(mockFS)