Skip to content

Commit

Permalink
Support passing extra linker flags to the relinker
Browse files Browse the repository at this point in the history
Summary: It's possible for a build to only want a specific optimization during the final phase of linking (aka relinker stage). An example would be to only run LTO during the relinker stage since LTO can incur a high build speed cost. We've tested internally that this doesn't affect APK size is neutral, but we'll still need to run perf tests. Support this flag as a general case so we can also run other specific optimizations only during relinker stage.

Reviewed By: smeenai

Differential Revision: D69625538

fbshipit-source-id: e934b6e076853f5b3593d704d09d539355e20ebc
  • Loading branch information
thevinster authored and facebook-github-bot committed Feb 21, 2025
1 parent e0021de commit aa18ad8
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 0 deletions.
1 change: 1 addition & 0 deletions prelude/android/android_binary_native_library_rules.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -1661,6 +1661,7 @@ def relink_libraries(ctx: AnalysisContext, libraries_by_platform: dict[str, dict
relinker_link_args = (
original_shared_library.link_args +
[LinkArgs(flags = [cmd_args(relinker_version_script, format = "-Wl,--version-script={}")])] +
[LinkArgs(flags = ctx.attrs.relinker_extra_args)] +
([LinkArgs(infos = [set_link_info_link_whole(red_linkable[1]) for red_linkable in red_linkables[platform]])] if len(red_linkables) > 0 else [])
)

Expand Down
3 changes: 3 additions & 0 deletions prelude/decls/android_rules.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ android_aar = prelude_rule(
"never_mark_as_unused_dependency": attrs.option(attrs.bool(), default = None),
"on_unused_dependencies": attrs.option(attrs.enum(UnusedDependenciesAction), default = None),
"proguard_config": attrs.option(attrs.source(), default = None),
"relinker_extra_args": attrs.list(attrs.arg(), default = [], doc = "Extra arguments passed when relinking all libraries."),
"relinker_extra_deps": attrs.list(attrs.dep(), default = [], doc = "Deps statically linked to every native lib by the relinker."),
"relinker_whitelist": attrs.list(attrs.regex(), default = []),
"required_for_source_only_abi": attrs.bool(default = False),
Expand Down Expand Up @@ -256,6 +257,7 @@ android_binary = prelude_rule(
"primary_dex_patterns": attrs.list(attrs.string(), default = []),
"proguard_config": attrs.option(attrs.source(), default = None),
"proguard_jvm_args": attrs.list(attrs.string(), default = []),
"relinker_extra_args": attrs.list(attrs.arg(), default = [], doc = "Extra arguments passed when relinking all libraries."),
"relinker_extra_deps": attrs.list(attrs.dep(), default = [], doc = "Deps statically linked to every native lib by the relinker."),
"relinker_whitelist": attrs.list(attrs.regex(), default = []),
"resource_compression": attrs.enum(ResourceCompressionMode, default = "disabled"),
Expand Down Expand Up @@ -491,6 +493,7 @@ android_bundle = prelude_rule(
"primary_dex_patterns": attrs.list(attrs.string(), default = []),
"proguard_config": attrs.option(attrs.source(), default = None),
"proguard_jvm_args": attrs.list(attrs.string(), default = []),
"relinker_extra_args": attrs.list(attrs.arg(), default = [], doc = "Extra arguments passed when relinking all libraries."),
"relinker_extra_deps": attrs.list(attrs.dep(), default = [], doc = "Deps statically linked to every native lib by the relinker."),
"relinker_whitelist": attrs.list(attrs.regex(), default = []),
"resource_compression": attrs.enum(ResourceCompressionMode, default = "disabled"),
Expand Down

0 comments on commit aa18ad8

Please sign in to comment.