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)