diff options
author | Justin Yun <justinyun@google.com> | 2021-05-24 18:17:33 +0900 |
---|---|---|
committer | Bill Peckham <bpeckham@google.com> | 2021-05-24 15:51:50 -0700 |
commit | f5c687c76f7bf490eabe6e72927650609ceba40d (patch) | |
tree | 6ee21b8bcbed3712b2d9639f74a40b280da22d6b /cc | |
parent | 63022c9de6bb6f5b1df9a6c58e1b2165376f7d9b (diff) |
Do not filter LLNDK lib from llndk.libraries.txt
llndk.libraries.txt is used to list the LLNDKs for the linkerconfig.
This is also required to define the VNDK snapshot modules of LLNDK
stub libraries.
The list had a filter for hwasan libraries, but the filter must be
used only for the LLNDK_LIBRARIES make variable, but not for the
llndk.libraries.txt file.
Bug: 189070366
Bug: 188716508
Test: m nothing
Test: LLNDK_LIBRARIES in make_vars-*.mk does not include hwasan.
Change-Id: I820dd1161892dc76700aa1d696ea2643764d2052
(cherry picked from commit 611e886ca73cdab96aaff32b5ff1f86222951dff)
Diffstat (limited to 'cc')
-rw-r--r-- | cc/cc_test.go | 9 | ||||
-rw-r--r-- | cc/vndk.go | 44 |
2 files changed, 39 insertions, 14 deletions
diff --git a/cc/cc_test.go b/cc/cc_test.go index e9daf33fc..11013ebc3 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -554,6 +554,13 @@ func TestVndk(t *testing.T) { } } + cc_library { + name: "libclang_rt.hwasan-llndk", + llndk: { + symbol_file: "libclang_rt.hwasan.map.txt", + } + } + cc_library_headers { name: "libllndk_headers", llndk: { @@ -661,7 +668,7 @@ func TestVndk(t *testing.T) { "VNDK-product: libvndk_product.so", "VNDK-product: libvndk_sp_product_private-x.so", }) - checkVndkLibrariesOutput(t, ctx, "llndk.libraries.txt", []string{"libc.so", "libdl.so", "libft2.so", "libllndk.so", "libm.so"}) + checkVndkLibrariesOutput(t, ctx, "llndk.libraries.txt", []string{"libc.so", "libclang_rt.hwasan-llndk.so", "libdl.so", "libft2.so", "libllndk.so", "libm.so"}) checkVndkLibrariesOutput(t, ctx, "vndkcore.libraries.txt", []string{"libvndk-private.so", "libvndk.so", "libvndk_product.so"}) checkVndkLibrariesOutput(t, ctx, "vndksp.libraries.txt", []string{"libc++.so", "libvndk_sp-x.so", "libvndk_sp_private-x.so", "libvndk_sp_product_private-x.so"}) checkVndkLibrariesOutput(t, ctx, "vndkprivate.libraries.txt", []string{"libft2.so", "libvndk-private.so", "libvndk_sp_private-x.so", "libvndk_sp_product_private-x.so"}) diff --git a/cc/vndk.go b/cc/vndk.go index 8b3788bbb..9e8be251f 100644 --- a/cc/vndk.go +++ b/cc/vndk.go @@ -234,7 +234,6 @@ type moduleListerFunc func(ctx android.SingletonContext) (moduleNames, fileNames var ( llndkLibraries = vndkModuleLister(func(m *Module) bool { return m.VendorProperties.IsLLNDK && !m.Header() }) - llndkLibrariesWithoutHWASAN = vndkModuleListRemover(llndkLibraries, "libclang_rt.hwasan-") vndkSPLibraries = vndkModuleLister(func(m *Module) bool { return m.VendorProperties.IsVNDKSP }) vndkCoreLibraries = vndkModuleLister(func(m *Module) bool { return m.VendorProperties.IsVNDKCore }) vndkPrivateLibraries = vndkModuleLister(func(m *Module) bool { return m.VendorProperties.IsVNDKPrivate }) @@ -419,10 +418,6 @@ func init() { } func RegisterVndkLibraryTxtTypes(ctx android.RegistrationContext) { - // Make uses LLNDK_LIBRARIES to determine which libraries to install. - // HWASAN is only part of the LL-NDK in builds in which libc depends on HWASAN. - // Therefore, by removing the library here, we cause it to only be installed if libc - // depends on it. ctx.RegisterSingletonModuleType("llndk_libraries_txt", llndkLibrariesTxtFactory) ctx.RegisterSingletonModuleType("vndksp_libraries_txt", vndkSPLibrariesTxtFactory) ctx.RegisterSingletonModuleType("vndkcore_libraries_txt", vndkCoreLibrariesTxtFactory) @@ -434,8 +429,9 @@ func RegisterVndkLibraryTxtTypes(ctx android.RegistrationContext) { type vndkLibrariesTxt struct { android.SingletonModuleBase - lister moduleListerFunc - makeVarName string + lister moduleListerFunc + makeVarName string + filterOutFromMakeVar string properties VndkLibrariesTxtProperties @@ -454,8 +450,12 @@ var _ android.OutputFileProducer = &vndkLibrariesTxt{} // llndk_libraries_txt is a singleton module whose content is a list of LLNDK libraries // generated by Soong but can be referenced by other modules. // For example, apex_vndk can depend on these files as prebuilt. +// Make uses LLNDK_LIBRARIES to determine which libraries to install. +// HWASAN is only part of the LL-NDK in builds in which libc depends on HWASAN. +// Therefore, by removing the library here, we cause it to only be installed if libc +// depends on it. func llndkLibrariesTxtFactory() android.SingletonModule { - return newVndkLibrariesTxt(llndkLibrariesWithoutHWASAN, "LLNDK_LIBRARIES") + return newVndkLibrariesWithMakeVarFilter(llndkLibraries, "LLNDK_LIBRARIES", "libclang_rt.hwasan-") } // vndksp_libraries_txt is a singleton module whose content is a list of VNDKSP libraries @@ -493,16 +493,21 @@ func vndkUsingCoreVariantLibrariesTxtFactory() android.SingletonModule { return newVndkLibrariesTxt(vndkUsingCoreVariantLibraries, "VNDK_USING_CORE_VARIANT_LIBRARIES") } -func newVndkLibrariesTxt(lister moduleListerFunc, makeVarName string) android.SingletonModule { +func newVndkLibrariesWithMakeVarFilter(lister moduleListerFunc, makeVarName string, filter string) android.SingletonModule { m := &vndkLibrariesTxt{ - lister: lister, - makeVarName: makeVarName, + lister: lister, + makeVarName: makeVarName, + filterOutFromMakeVar: filter, } m.AddProperties(&m.properties) android.InitAndroidModule(m) return m } +func newVndkLibrariesTxt(lister moduleListerFunc, makeVarName string) android.SingletonModule { + return newVndkLibrariesWithMakeVarFilter(lister, makeVarName, "") +} + func insertVndkVersion(filename string, vndkVersion string) string { if index := strings.LastIndex(filename, "."); index != -1 { return filename[:index] + "." + vndkVersion + filename[index:] @@ -542,8 +547,21 @@ func (txt *vndkLibrariesTxt) AndroidMkEntries() []android.AndroidMkEntries { } func (txt *vndkLibrariesTxt) MakeVars(ctx android.MakeVarsContext) { - ctx.Strict(txt.makeVarName, strings.Join(txt.moduleNames, " ")) - + filter := func(modules []string, prefix string) []string { + if prefix == "" { + return modules + } + var result []string + for _, module := range modules { + if strings.HasPrefix(module, prefix) { + continue + } else { + result = append(result, module) + } + } + return result + } + ctx.Strict(txt.makeVarName, strings.Join(filter(txt.moduleNames, txt.filterOutFromMakeVar), " ")) } // PrebuiltEtcModule interface |