Add dynamic_list property
Add a dynamic_list property that is similar to version_script but uses a -Wl,--dynamic-list flag instead of -Wl,--version-script. Bug: 190084016 Test: TestLibraryDynamicList Change-Id: Idbeb4819ce4d92e50c4e9b27ec8f150d566d380a
This commit is contained in:
@@ -286,3 +286,37 @@ cc_library {
|
||||
gotFlags := entries.EntryMap["LOCAL_EXPORT_CFLAGS"]
|
||||
android.AssertDeepEquals(t, "androidmk exported cflags", expectedFlags, gotFlags)
|
||||
}
|
||||
|
||||
func TestLibraryVersionScript(t *testing.T) {
|
||||
result := PrepareForIntegrationTestWithCc.RunTestWithBp(t, `
|
||||
cc_library {
|
||||
name: "libfoo",
|
||||
srcs: ["foo.c"],
|
||||
version_script: "foo.map.txt",
|
||||
}`)
|
||||
|
||||
libfoo := result.ModuleForTests("libfoo", "android_arm64_armv8-a_shared").Rule("ld")
|
||||
|
||||
android.AssertStringListContains(t, "missing dependency on version_script",
|
||||
libfoo.Implicits.Strings(), "foo.map.txt")
|
||||
android.AssertStringDoesContain(t, "missing flag for version_script",
|
||||
libfoo.Args["ldFlags"], "-Wl,--version-script,foo.map.txt")
|
||||
|
||||
}
|
||||
|
||||
func TestLibraryDynamicList(t *testing.T) {
|
||||
result := PrepareForIntegrationTestWithCc.RunTestWithBp(t, `
|
||||
cc_library {
|
||||
name: "libfoo",
|
||||
srcs: ["foo.c"],
|
||||
dynamic_list: "foo.dynamic.txt",
|
||||
}`)
|
||||
|
||||
libfoo := result.ModuleForTests("libfoo", "android_arm64_armv8-a_shared").Rule("ld")
|
||||
|
||||
android.AssertStringListContains(t, "missing dependency on dynamic_list",
|
||||
libfoo.Implicits.Strings(), "foo.dynamic.txt")
|
||||
android.AssertStringDoesContain(t, "missing flag for dynamic_list",
|
||||
libfoo.Args["ldFlags"], "-Wl,--dynamic-list,foo.dynamic.txt")
|
||||
|
||||
}
|
||||
|
14
cc/linker.go
14
cc/linker.go
@@ -201,6 +201,9 @@ type BaseLinkerProperties struct {
|
||||
// local file name to pass to the linker as --version_script
|
||||
Version_script *string `android:"path,arch_variant"`
|
||||
|
||||
// local file name to pass to the linker as --dynamic-list
|
||||
Dynamic_list *string `android:"path,arch_variant"`
|
||||
|
||||
// list of static libs that should not be used to build this module
|
||||
Exclude_static_libs []string `android:"arch_variant"`
|
||||
|
||||
@@ -561,6 +564,17 @@ func (linker *baseLinker) linkerFlags(ctx ModuleContext, flags Flags) Flags {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dynamicList := android.OptionalPathForModuleSrc(ctx, linker.Properties.Dynamic_list)
|
||||
if dynamicList.Valid() {
|
||||
if ctx.Darwin() {
|
||||
ctx.PropertyErrorf("dynamic_list", "Not supported on Darwin")
|
||||
} else {
|
||||
flags.Local.LdFlags = append(flags.Local.LdFlags,
|
||||
"-Wl,--dynamic-list,"+dynamicList.String())
|
||||
flags.LdFlagsDeps = append(flags.LdFlagsDeps, dynamicList.Path())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return flags
|
||||
|
Reference in New Issue
Block a user