From b719c0194e74dc2921a457df1cad78986bd34487 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Mon, 26 Apr 2021 14:35:38 -0700 Subject: [PATCH] Fix and test vendor public libraries for product modules Vendor public libraries are checked for product modules, but never reached because the VNDK check occurs first, and wouldn't work anyways because vendor_public_library did not have the product_available property. Reorder the rewrite checks and add VendorProperties, and add a test. Bug: 178231622 Test: vendor_public_library_test.go Change-Id: Idbd2802fbd134d22c30600762cb0465633703506 --- cc/cc.go | 4 ++-- cc/vendor_public_library.go | 1 + cc/vendor_public_library_test.go | 20 +++++++++++++++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/cc/cc.go b/cc/cc.go index 98df545a7..260fcf1d5 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -2070,8 +2070,6 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) { nonvariantLibs = append(nonvariantLibs, rewriteSnapshotLib(entry, getSnapshot().SharedLibs)) } else if ctx.useSdk() && inList(name, *getNDKKnownLibs(ctx.Config())) { variantLibs = append(variantLibs, name+ndkLibrarySuffix) - } else if ctx.useVndk() { - nonvariantLibs = append(nonvariantLibs, rewriteSnapshotLib(entry, getSnapshot().SharedLibs)) } else if (ctx.Platform() || ctx.ProductSpecific()) && inList(name, *vendorPublicLibraries) { vendorPublicLib := name + vendorPublicLibrarySuffix if actx.OtherModuleExists(vendorPublicLib) { @@ -2082,6 +2080,8 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) { // link to the original library. nonvariantLibs = append(nonvariantLibs, name) } + } else if ctx.useVndk() { + nonvariantLibs = append(nonvariantLibs, rewriteSnapshotLib(entry, getSnapshot().SharedLibs)) } else { // put name#version back nonvariantLibs = append(nonvariantLibs, entry) diff --git a/cc/vendor_public_library.go b/cc/vendor_public_library.go index 85f514c83..394e32229 100644 --- a/cc/vendor_public_library.go +++ b/cc/vendor_public_library.go @@ -155,6 +155,7 @@ func vendorPublicLibraryFactory() android.Module { module.AddProperties( &stub.Properties, + &module.VendorProperties, &library.MutatedProperties, &library.flagExporter.Properties) diff --git a/cc/vendor_public_library_test.go b/cc/vendor_public_library_test.go index ee9dc0079..9f2accf4b 100644 --- a/cc/vendor_public_library_test.go +++ b/cc/vendor_public_library_test.go @@ -23,10 +23,12 @@ func TestVendorPublicLibraries(t *testing.T) { ctx := testCc(t, ` cc_library_headers { name: "libvendorpublic_headers", + product_available: true, export_include_dirs: ["my_include"], } vendor_public_library { name: "libvendorpublic", + product_available: true, symbol_file: "", export_public_headers: ["libvendorpublic_headers"], } @@ -46,6 +48,14 @@ func TestVendorPublicLibraries(t *testing.T) { no_libcrt: true, nocrt: true, } + cc_library { + name: "libproduct", + shared_libs: ["libvendorpublic"], + product_specific: true, + srcs: ["foo.c"], + no_libcrt: true, + nocrt: true, + } cc_library { name: "libvendor", shared_libs: ["libvendorpublic"], @@ -58,6 +68,7 @@ func TestVendorPublicLibraries(t *testing.T) { coreVariant := "android_arm64_armv8-a_shared" vendorVariant := "android_vendor.29_arm64_armv8-a_shared" + productVariant := "android_product.29_arm64_armv8-a_shared" // test if header search paths are correctly added // _static variant is used since _shared reuses *.o from the static variant @@ -75,6 +86,14 @@ func TestVendorPublicLibraries(t *testing.T) { t.Errorf("libflags for libsystem must contain %#v, but was %#v", stubPaths[0], libflags) } + // test if libsystem is linked to the stub + ld = ctx.ModuleForTests("libproduct", productVariant).Rule("ld") + libflags = ld.Args["libFlags"] + stubPaths = getOutputPaths(ctx, productVariant, []string{"libvendorpublic" + vendorPublicLibrarySuffix}) + if !strings.Contains(libflags, stubPaths[0].String()) { + t.Errorf("libflags for libproduct must contain %#v, but was %#v", stubPaths[0], libflags) + } + // test if libvendor is linked to the real shared lib ld = ctx.ModuleForTests("libvendor", vendorVariant).Rule("ld") libflags = ld.Args["libFlags"] @@ -82,5 +101,4 @@ func TestVendorPublicLibraries(t *testing.T) { if !strings.Contains(libflags, stubPaths[0].String()) { t.Errorf("libflags for libvendor must contain %#v, but was %#v", stubPaths[0], libflags) } - }