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 Merged-In: I820dd1161892dc76700aa1d696ea2643764d2052 (cherry picked from commit 611e886ca73cdab96aaff32b5ff1f86222951dff)
This commit is contained in:
parent
b40610ad00
commit
acd459728a
|
@ -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"})
|
||||
|
|
44
cc/vndk.go
44
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
|
||||
|
|
Loading…
Reference in New Issue