Revert "GN: do not make indirect dependency to direct dependency"
This reverts commit e8a3ce9119189ad6ba5ecaa62bb0b53b07c895f4.
Reason for revert: Looks to have broken the mac build; see crbug.com/843351 .
Original change's description:
> GN: do not make indirect dependency to direct dependency
>
> If a target is hard dep, there is no need to have the action targets's
> recursive deps as direct dependency, because such dependency is
> transitive.
>
> This is found by pcc in gn-dev
> https://groups.google.com/a/chromium.org/forum/#!topic/gn-dev/BcrSfPQE84E
>
> With this change, generated android's toolchain.ninja size is reduced
> from 262MB to 31MB. And ninja's startup time reduced from 4.9~5.1s to
> 2.6s.
> I used args.gn same with android_n5x_swarming_rel bot.
>
> Also this patch reduced the time of `gn gen` from 9.5~10.3s to 6.8~7.2s
> on my machine.
>
> Change-Id: I0f0214d3abe74143516b263da839e98b3987fb64
> Reviewed-on: https://chromium-review.googlesource.com/1041506
> Reviewed-by: Brett Wilson <brettw@chromium.org>
> Reviewed-by: Dirk Pranke <dpranke@chromium.org>
> Commit-Queue: Takuto Ikuta <tikuta@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#557365}
TBR=brettw@chromium.org,dpranke@chromium.org,pcc@chromium.org,tikuta@chromium.org
# Not skipping CQ checks because original CL landed > 1 day ago.
Change-Id: Id2bbb6fe1c8a0b10ee4b8d77de6ba83124519b68
Reviewed-on: https://chromium-review.googlesource.com/1060673
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Commit-Queue: Dirk Pranke <dpranke@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#558946}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: fa3fcf6849130fdeded2358d652faee1873b77b9
diff --git a/tools/gn/ninja_action_target_writer_unittest.cc b/tools/gn/ninja_action_target_writer_unittest.cc
index 445a31a..1b2ddc8 100644
--- a/tools/gn/ninja_action_target_writer_unittest.cc
+++ b/tools/gn/ninja_action_target_writer_unittest.cc
@@ -409,77 +409,3 @@
"build obj/foo/bar.stamp: stamp input1.out\n";
EXPECT_EQ(expected_linux, out.str());
}
-
-TEST(NinjaActionTargetWriter, NoTransitiveHardDeps) {
- Err err;
- TestWithScope setup;
-
- setup.build_settings()->set_python_path(
- base::FilePath(FILE_PATH_LITERAL("/usr/bin/python")));
-
- Target dep(setup.settings(), Label(SourceDir("//foo/"), "dep"));
- dep.set_output_type(Target::ACTION);
- dep.visibility().SetPublic();
- dep.SetToolchain(setup.toolchain());
- ASSERT_TRUE(dep.OnResolved(&err));
-
- Target foo(setup.settings(), Label(SourceDir("//foo/"), "foo"));
- foo.set_output_type(Target::ACTION);
- foo.visibility().SetPublic();
- foo.sources().push_back(SourceFile("//foo/input1.txt"));
- foo.action_values().set_script(SourceFile("//foo/script.py"));
- foo.private_deps().push_back(LabelTargetPair(&dep));
- foo.SetToolchain(setup.toolchain());
- foo.action_values().outputs() =
- SubstitutionList::MakeForTest("//out/Debug/foo.out");
- ASSERT_TRUE(foo.OnResolved(&err));
-
- {
- std::ostringstream out;
- NinjaActionTargetWriter writer(&foo, out);
- writer.Run();
-
- const char expected_linux[] =
- "rule __foo_foo___rule\n"
- // These come from the args.
- " command = /usr/bin/python ../../foo/script.py\n"
- " description = ACTION //foo:foo()\n"
- " restat = 1\n"
- "\n"
- "build foo.out: __foo_foo___rule | ../../foo/script.py"
- " ../../foo/input1.txt obj/foo/dep.stamp\n"
- "\n"
- "build obj/foo/foo.stamp: stamp foo.out\n";
- EXPECT_EQ(expected_linux, out.str());
- }
-
- Target bar(setup.settings(), Label(SourceDir("//bar/"), "bar"));
- bar.set_output_type(Target::ACTION);
- bar.sources().push_back(SourceFile("//bar/input1.txt"));
- bar.action_values().set_script(SourceFile("//bar/script.py"));
- bar.private_deps().push_back(LabelTargetPair(&foo));
- bar.SetToolchain(setup.toolchain());
- bar.action_values().outputs() =
- SubstitutionList::MakeForTest("//out/Debug/bar.out");
- ASSERT_TRUE(bar.OnResolved(&err)) << err.message();
-
- {
- std::ostringstream out;
- NinjaActionTargetWriter writer(&bar, out);
- writer.Run();
-
- const char expected_linux[] =
- "rule __bar_bar___rule\n"
- // These come from the args.
- " command = /usr/bin/python ../../bar/script.py\n"
- " description = ACTION //bar:bar()\n"
- " restat = 1\n"
- "\n"
- // Do not have obj/foo/dep.stamp as dependency.
- "build bar.out: __bar_bar___rule | ../../bar/script.py"
- " ../../bar/input1.txt obj/foo/foo.stamp\n"
- "\n"
- "build obj/bar/bar.stamp: stamp bar.out\n";
- EXPECT_EQ(expected_linux, out.str());
- }
-}
diff --git a/tools/gn/ninja_target_writer_unittest.cc b/tools/gn/ninja_target_writer_unittest.cc
index 2bcbc89..68a59c8 100644
--- a/tools/gn/ninja_target_writer_unittest.cc
+++ b/tools/gn/ninja_target_writer_unittest.cc
@@ -5,7 +5,6 @@
#include <sstream>
#include "testing/gtest/include/gtest/gtest.h"
-#include "tools/gn/ninja_action_target_writer.h"
#include "tools/gn/ninja_target_writer.h"
#include "tools/gn/target.h"
#include "tools/gn/test_with_scope.h"
@@ -95,23 +94,6 @@
EXPECT_EQ("obj/foo/base.stamp", dep[0].value());
}
- {
- std::ostringstream stream;
- NinjaActionTargetWriter writer(&action, stream);
- writer.Run();
- EXPECT_EQ(
- "rule __foo_action___rule\n"
- " command = ../../foo/script.py\n"
- " description = ACTION //foo:action()\n"
- " restat = 1\n"
- "\n"
- "build: __foo_action___rule | ../../foo/script.py"
- " ../../foo/action_source.txt ./target\n"
- "\n"
- "build obj/foo/action.stamp: stamp\n",
- stream.str());
- }
-
// Input deps for action which should depend on the base since its a hard dep
// that is a (indirect) dependency, as well as the the action source.
{
@@ -122,10 +104,9 @@
ASSERT_EQ(1u, dep.size());
EXPECT_EQ("obj/foo/action.inputdeps.stamp", dep[0].value());
- EXPECT_EQ(
- "build obj/foo/action.inputdeps.stamp: stamp ../../foo/script.py "
- "../../foo/action_source.txt\n",
- stream.str());
+ EXPECT_EQ("build obj/foo/action.inputdeps.stamp: stamp ../../foo/script.py "
+ "../../foo/action_source.txt obj/foo/base.stamp\n",
+ stream.str());
}
}
diff --git a/tools/gn/target.cc b/tools/gn/target.cc
index e6013e4..15df27f 100644
--- a/tools/gn/target.cc
+++ b/tools/gn/target.cc
@@ -372,13 +372,7 @@
PullRecursiveBundleData();
PullDependentTargetLibs();
-
- if (!hard_dep()) {
- // If this target is not hard_dep type, we need to pull hard dependency from
- // dependent target, because it may not transitive for compiling tasks.
- PullRecursiveHardDeps();
- }
-
+ PullRecursiveHardDeps();
if (!ResolvePrecompiledHeaders(err))
return false;