[bundle] Use "phony" builtin tool for create_bundle targets Instead of using the "stamp" tool which creates files (and potentially slow down the build since this requires access to the filesystem), use the builtin "phony" tool. Bug: 194 Change-Id: Ie1af7020af4e7efc6c8848244c21dac549f179aa Reviewed-on: https://gn-review.googlesource.com/c/gn/+/16920 Reviewed-by: David Turner <digit@google.com> Commit-Queue: Sylvain Defresne <sdefresne@chromium.org>
diff --git a/src/gn/ninja_create_bundle_target_writer.cc b/src/gn/ninja_create_bundle_target_writer.cc index efa950e..2eacee4 100644 --- a/src/gn/ninja_create_bundle_target_writer.cc +++ b/src/gn/ninja_create_bundle_target_writer.cc
@@ -7,6 +7,7 @@ #include <iterator> #include "base/strings/string_util.h" +#include "gn/builtin_tool.h" #include "gn/filesystem_utils.h" #include "gn/general_tool.h" #include "gn/ninja_utils.h" @@ -36,15 +37,23 @@ tool_name + "\" tool.")); } +bool EnsureToolAvailable(const Target* target, const char* tool) { + if (!target->toolchain()->GetTool(tool)) { + FailWithMissingToolError(tool, target); + return false; + } + + return true; +} + bool EnsureAllToolsAvailable(const Target* target) { const char* kRequiredTools[] = { GeneralTool::kGeneralToolCopyBundleData, - GeneralTool::kGeneralToolStamp, + GeneralTool::kGeneralToolStamp, // To create empty partial Info.plist. }; - for (size_t i = 0; i < std::size(kRequiredTools); ++i) { - if (!target->toolchain()->GetTool(kRequiredTools[i])) { - FailWithMissingToolError(kRequiredTools[i], target); + for (const char* tool : kRequiredTools) { + if (!EnsureToolAvailable(target, tool)) { return false; } } @@ -52,10 +61,8 @@ // The compile_xcassets tool is only required if the target has asset // catalog resources to compile. if (TargetRequireAssetCatalogCompilation(target)) { - if (!target->toolchain()->GetTool( - GeneralTool::kGeneralToolCompileXCAssets)) { - FailWithMissingToolError(GeneralTool::kGeneralToolCompileXCAssets, - target); + if (!EnsureToolAvailable(target, + GeneralTool::kGeneralToolCompileXCAssets)) { return false; } } @@ -102,7 +109,8 @@ OutputFile(settings_->build_settings(), target_->bundle_data().GetBundleRootDirOutput(settings_))); - out_ << ": phony " << target_->dependency_output_file().value(); + out_ << ": " << BuiltinTool::kBuiltinToolPhony << " " + << target_->dependency_output_file().value(); out_ << std::endl; } @@ -291,8 +299,7 @@ out_ << "build "; WriteOutput(xcassets_input_stamp_file); - out_ << ": " << GetNinjaRulePrefixForToolchain(settings_) - << GeneralTool::kGeneralToolStamp; + out_ << ": " << BuiltinTool::kBuiltinToolPhony; for (const Target* target : dependencies) { out_ << " "; @@ -357,8 +364,7 @@ out_ << "build "; WriteOutput(code_signing_input_stamp_file); - out_ << ": " << GetNinjaRulePrefixForToolchain(settings_) - << GeneralTool::kGeneralToolStamp; + out_ << ": " << BuiltinTool::kBuiltinToolPhony; for (const SourceFile& source : code_signing_input_files) { out_ << " ";
diff --git a/src/gn/ninja_create_bundle_target_writer_unittest.cc b/src/gn/ninja_create_bundle_target_writer_unittest.cc index 997c058..a5fecca 100644 --- a/src/gn/ninja_create_bundle_target_writer_unittest.cc +++ b/src/gn/ninja_create_bundle_target_writer_unittest.cc
@@ -170,7 +170,7 @@ "baz/bar/bar_partial_info.plist || obj/foo/bar.stamp\n" "build bar.bundle: phony obj/baz/bar.stamp\n"; std::string out_str = out.str(); - EXPECT_EQ(expected, out_str); + EXPECT_EQ(expected, out_str) << expected << "----\n" << out_str; } // Tests multiple files from asset catalog. @@ -393,7 +393,7 @@ "../../foo/input1.txt || obj/baz/bar.inputdeps.stamp\n" "build bar.bundle/Contents/Resources/input2.txt: copy_bundle_data " "../../foo/input2.txt || obj/baz/bar.inputdeps.stamp\n" - "build obj/baz/bar.xcassets.inputdeps.stamp: stamp " + "build obj/baz/bar.xcassets.inputdeps.stamp: phony " "obj/foo/assets.stamp " "obj/quz/assets.stamp obj/biz/assets.stamp\n" "build bar.bundle/Contents/Resources/Assets.car | " @@ -411,7 +411,7 @@ "baz/bar/bar_partial_info.plist || obj/baz/bar.inputdeps.stamp\n" "build bar.bundle: phony obj/baz/bar.stamp\n"; std::string out_str = out.str(); - EXPECT_EQ(expected, out_str); + EXPECT_EQ(expected, out_str) << expected << "----\n" << out_str; } // Tests code signing steps. @@ -477,7 +477,7 @@ "../../foo/input1.txt || obj/baz/bar.inputdeps.stamp\n" "build bar.bundle/Contents/Resources/input2.txt: copy_bundle_data " "../../foo/input2.txt || obj/baz/bar.inputdeps.stamp\n" - "build obj/baz/bar.codesigning.inputdeps.stamp: stamp " + "build obj/baz/bar.codesigning.inputdeps.stamp: phony " "../../build/codesign.py " "quz " "bar.bundle/Contents/Resources/input1.txt " @@ -491,5 +491,5 @@ "bar.bundle/_CodeSignature/CodeResources || obj/baz/bar.inputdeps.stamp\n" "build bar.bundle: phony obj/baz/bar.stamp\n"; std::string out_str = out.str(); - EXPECT_EQ(expected, out_str); + EXPECT_EQ(expected, out_str) << expected << "----\n" << out_str; }