[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;
}