From c9d487fe7b99c1651e1ab038caaee9826f7e2f27 Mon Sep 17 00:00:00 2001
From: Roland McGrath <mcgrathr@google.com>
Date: Sun, 12 May 2019 00:06:29 +0000
Subject: [PATCH] [build] Allow //zircon/public/lib/foo vs
 //zircon/public/tool/foo name reuse

Subdirectories in different parts of the Zircon tree reusing the same
name is not a problem, and neither is //zircon/public/*/NAME reuse.
Fix the metadata-based target generation magic to distinguish the
category (i.e. subdirectory under //zircon/public/) so that names
can be reused across categories.

Bug: BLD-472 #done
Test: local build with //zircon/public/lib/blobfs export enabled
Change-Id: I592e52f524471a006bec2ff5942215ec277705dd
---
 build/zircon/template.gn           | 3 ++-
 zircon/public/gn/BUILDCONFIG.gn    | 3 +++
 zircon/public/gn/banjo.gni         | 2 ++
 zircon/public/gn/fidl.gni          | 2 ++
 zircon/system/ulib/zircon/BUILD.gn | 2 ++
 5 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/build/zircon/template.gn b/build/zircon/template.gn
index ff4016f4afb..a36cc836c04 100644
--- a/build/zircon/template.gn
+++ b/build/zircon/template.gn
@@ -9,10 +9,11 @@
 import("//build/config/fuchsia/zircon.gni")
 
 dir = get_label_info(".", "name")
+zircon_public = get_label_info("..", "name")
 
 dir_target = false
 foreach(target, zircon_legacy_targets) {
-  if (target.target_name == dir) {
+  if (target.target_name == dir && target._zircon_public == zircon_public) {
     assert(dir_target == false,
            "$dir appears twice in Zircon legacy_targets metadata:" +
                " $dir_target vs $target")
diff --git a/zircon/public/gn/BUILDCONFIG.gn b/zircon/public/gn/BUILDCONFIG.gn
index a287ce86a8b..710bbdd8e99 100644
--- a/zircon/public/gn/BUILDCONFIG.gn
+++ b/zircon/public/gn/BUILDCONFIG.gn
@@ -413,6 +413,7 @@ template("library") {
       legacy_targets = [
         {
           _label = get_label_info(":$_library_name", "label_with_toolchain")
+          _zircon_public = "lib"
           forward_variables_from(invoker, [ "testonly" ])
           import = "//build/zircon/zircon_library.gni"
           target_type = "zircon_library"
@@ -1458,6 +1459,8 @@ template("host_tool") {
         legacy_dirs = [ "tool/$target_name" ]
         legacy_targets = [
           {
+            _label = get_label_info(":$target_name", "label_with_toolchain")
+            _zircon_public = "tool"
             import = "//build/zircon/zircon_host_tool.gni"
             target_type = "zircon_host_tool"
             target_name = target_name
diff --git a/zircon/public/gn/banjo.gni b/zircon/public/gn/banjo.gni
index ef0a97d979e..7644cfedd1c 100644
--- a/zircon/public/gn/banjo.gni
+++ b/zircon/public/gn/banjo.gni
@@ -142,6 +142,8 @@ template("banjo_library") {
         legacy_dirs = [ "banjo/$banjo_target" ]
         legacy_targets = [
           {
+            _label = get_label_info(":$target_name", "label_with_toolchain")
+            _zircon_public = "banjo"
             import = "//build/banjo/banjo.gni"
             target_name = banjo_target
             target_type = target_type
diff --git a/zircon/public/gn/fidl.gni b/zircon/public/gn/fidl.gni
index e0b26745b44..4dc434489a8 100644
--- a/zircon/public/gn/fidl.gni
+++ b/zircon/public/gn/fidl.gni
@@ -248,6 +248,8 @@ template("fidl_library") {
           legacy_dirs = [ "fidl/$fidl_target" ]
           legacy_targets = [
             {
+              _label = get_label_info(":$target_name", "label_with_toolchain")
+              _zircon_public = "fidl"
               import = "//build/fidl/fidl.gni"
               target_type = "fidl"
               target_name = fidl_target
diff --git a/zircon/system/ulib/zircon/BUILD.gn b/zircon/system/ulib/zircon/BUILD.gn
index 79a0cf8c71f..66f7bc58411 100644
--- a/zircon/system/ulib/zircon/BUILD.gn
+++ b/zircon/system/ulib/zircon/BUILD.gn
@@ -173,6 +173,8 @@ if (toolchain.environment != "user") {
       legacy_barrier = []
       legacy_targets = [
         {
+          _label = get_label_info(":$target_name", "label_with_toolchain")
+          _zircon_public = "lib"
           target_name = "zircon"
           libs = []
           libs = [ rebase_path(link_file, root_build_dir) ]
-- 
GitLab