pw_toolchain: Support grouping in generate_toolchain
This allows linking projects with circular dependencies without
requiring -Wl,--whole-archive.
Change-Id: I230edca9a0f5d2c922455ce3bb258ae089ed09e0
diff --git a/pw_toolchain/generate_toolchain.gni b/pw_toolchain/generate_toolchain.gni
index db25b1e..10dba7c 100644
--- a/pw_toolchain/generate_toolchain.gni
+++ b/pw_toolchain/generate_toolchain.gni
@@ -33,6 +33,8 @@
# binaries.
# link_whole_archive: (optional) Boolean indicating if the linker should load
# all object files when resolving symbols.
+# link_group: (optional) Boolean indicating if the linker should use
+# a group to resolve circular dependencies between artifacts.
# defaults: (required) A scope setting defaults to apply to GN
# targets in this toolchain, as described in pw_vars_default.gni
#
@@ -149,6 +151,11 @@
]
}
+ _link_group =
+ defined(invoker.link_group) && invoker.link_group && host_os != "mac"
+ if (_link_group) {
+ _link_flags += [ "-Wl,--start-group" ]
+ }
_link_flags += [ "{{inputs}}" ]
if (defined(invoker.link_whole_archive) && invoker.link_whole_archive) {
@@ -169,6 +176,9 @@
_link_flags += [ "{{libs}}" ]
}
+ if (_link_group) {
+ _link_flags += [ "-Wl,--end-group" ]
+ }
_link_flags += [ "-o $_link_outfile" ]
_link_command = string_join(" ", _link_flags)