diff --git a/build/zircon/template.gn b/build/zircon/template.gn
index ff4016f4afbc59636e6d4526f6e4a2e050ee1bcf..a36cc836c048f0577cf4af1a1d268ad696978e0f 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 a287ce86a8ba4734f6948f7fae171ffa561b3066..710bbdd8e99bc075690eca6da33252cd2bbb18dc 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 ef0a97d979e228841ad62f95b66020b160616248..7644cfedd1c78548355acf6008c2866394ef0882 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 e0b26745b44f7aab2463437531a0f75787b3a2a0..4dc434489a89ff9c8a2c1244c730802be1090f1c 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 79a0cf8c71f8ccb6d0d56fa59eaa58e37da03fc4..66f7bc5841124eedd0811e6989266623dc725b7d 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) ]