diff --git a/tools/gn/ninja_build_writer.cc b/tools/gn/ninja_build_writer.cc
index f26c9a7..56d6c5f 100644
--- a/tools/gn/ninja_build_writer.cc
+++ b/tools/gn/ninja_build_writer.cc
@@ -163,12 +163,14 @@
     const BuildSettings* build_settings,
     const std::unordered_map<const Settings*, const Toolchain*>&
         used_toolchains,
+    const std::vector<const Target*>& all_targets,
     const Toolchain* default_toolchain,
     const std::vector<const Target*>& default_toolchain_targets,
     std::ostream& out,
     std::ostream& dep_out)
     : build_settings_(build_settings),
       used_toolchains_(used_toolchains),
+      all_targets_(all_targets),
       default_toolchain_(default_toolchain),
       default_toolchain_targets_(default_toolchain_targets),
       out_(out),
@@ -221,8 +223,9 @@
 
   std::stringstream file;
   std::stringstream depfile;
-  NinjaBuildWriter gen(build_settings, used_toolchains, default_toolchain,
-                       default_toolchain_targets, file, depfile);
+  NinjaBuildWriter gen(build_settings, used_toolchains, all_targets,
+                       default_toolchain, default_toolchain_targets,
+                       file, depfile);
   if (!gen.Run(err))
     return false;
 
@@ -301,7 +304,7 @@
     }
   }
 
-  for (const Target* target : default_toolchain_targets_) {
+  for (const Target* target : all_targets_) {
     if (target->output_type() == Target::ACTION) {
       const LabelPtrPair<Pool>& pool = target->action_values().pool();
       if (pool.ptr)
diff --git a/tools/gn/ninja_build_writer.h b/tools/gn/ninja_build_writer.h
index eee3a6e..9d2ac4c 100644
--- a/tools/gn/ninja_build_writer.h
+++ b/tools/gn/ninja_build_writer.h
@@ -28,6 +28,7 @@
   NinjaBuildWriter(const BuildSettings* settings,
                    const std::unordered_map<const Settings*, const Toolchain*>&
                        used_toolchains,
+                   const std::vector<const Target*>& all_targets,
                    const Toolchain* default_toolchain,
                    const std::vector<const Target*>& default_toolchain_targets,
                    std::ostream& out,
@@ -56,6 +57,7 @@
   const BuildSettings* build_settings_;
 
   const std::unordered_map<const Settings*, const Toolchain*>& used_toolchains_;
+  const std::vector<const Target*>& all_targets_;
   const Toolchain* default_toolchain_;
   const std::vector<const Target*>& default_toolchain_targets_;
 
diff --git a/tools/gn/ninja_build_writer_unittest.cc b/tools/gn/ninja_build_writer_unittest.cc
index bd93d36..5e19df2 100644
--- a/tools/gn/ninja_build_writer_unittest.cc
+++ b/tools/gn/ninja_build_writer_unittest.cc
@@ -47,6 +47,23 @@
   other_toolchain.GetTool(Toolchain::TYPE_LINK)
       ->set_pool(LabelPtrPair<Pool>(&other_regular_pool));
 
+  // Make another target that uses its own pool
+
+  Pool another_regular_pool(
+      setup.settings(),
+      Label(SourceDir("//another/"), "depth_pool", other_toolchain_label.dir(),
+            other_toolchain_label.name()));
+  another_regular_pool.set_depth(7);
+
+  Target target_baz(setup.settings(), Label(SourceDir("//baz/"), "baz"));
+  target_baz.set_output_type(Target::ACTION);
+  target_baz.action_values().set_script(SourceFile("//baz/script.py"));
+  target_baz.action_values().outputs() = SubstitutionList::MakeForTest(
+      "//out/Debug/out5.out", "//out/Debug/out6.out");
+  target_baz.SetToolchain(&other_toolchain);
+  target_baz.action_values().set_pool(LabelPtrPair<Pool>(&another_regular_pool));
+  ASSERT_TRUE(target_baz.OnResolved(&err));
+
   // The console pool must be in the default toolchain.
   Pool console_pool(setup.settings(), Label(SourceDir("//"), "console",
                                             setup.toolchain()->label().dir(),
@@ -63,12 +80,12 @@
   used_toolchains[setup.settings()] = setup.toolchain();
   used_toolchains[&other_settings] = &other_toolchain;
 
-  std::vector<const Target*> targets = {&target_foo, &target_bar};
+  std::vector<const Target*> targets = {&target_foo, &target_bar, &target_baz};
 
   std::ostringstream ninja_out;
   std::ostringstream depfile_out;
 
-  NinjaBuildWriter writer(setup.build_settings(), used_toolchains,
+  NinjaBuildWriter writer(setup.build_settings(), used_toolchains, targets,
                           setup.toolchain(), targets, ninja_out, depfile_out);
   ASSERT_TRUE(writer.Run(&err));
 
@@ -78,17 +95,23 @@
       "  generator = 1\n"
       "  depfile = build.ninja.d\n";
   const char expected_other_pool[] =
+      "pool other_toolchain_another_depth_pool\n"
+      "  depth = 7\n"
+      "\n"
       "pool other_toolchain_other_depth_pool\n"
       "  depth = 42\n";
   const char expected_toolchain[] = "subninja toolchain.ninja\n";
   const char expected_targets[] =
       "build bar: phony obj/bar/bar.stamp\n"
+      "build baz: phony obj/baz/baz.stamp\n"
       "build foo$:bar: phony obj/foo/bar.stamp\n"
-      "build bar$:bar: phony obj/bar/bar.stamp\n";
+      "build bar$:bar: phony obj/bar/bar.stamp\n"
+      "build baz$:baz: phony obj/baz/baz.stamp\n";
   const char expected_root_target[] =
       "build all: phony $\n"
       "    obj/foo/bar.stamp $\n"
-      "    obj/bar/bar.stamp\n";
+      "    obj/bar/bar.stamp $\n"
+      "    obj/baz/baz.stamp\n";
   const char expected_default[] = "default all\n";
   std::string out_str = ninja_out.str();
 #define EXPECT_SNIPPET(expected)                       \
@@ -133,7 +156,7 @@
   std::vector<const Target*> targets = {&target_foo, &target_bar};
   std::ostringstream ninja_out;
   std::ostringstream depfile_out;
-  NinjaBuildWriter writer(setup.build_settings(), used_toolchains,
+  NinjaBuildWriter writer(setup.build_settings(), used_toolchains, targets,
                           setup.toolchain(), targets, ninja_out, depfile_out);
   ASSERT_FALSE(writer.Run(&err));
 
