Always generate a .toolchain file even if it is empty.
This removes a regression that was introduced in [1],
where a GN toolchain that only has empty group() targets
would not generate a .toolchain file anymore. This would
result a Ninja failure when the top-level build.ninja
file would try to load it. E.g.:
```
2.56s Error: failed to load build.ninja: open clang_x86/toolchain.ninja: no such file or directory
```
See [2] for complete example.
[1] https://gn-review.googlesource.com/c/gn/+/18280
[2] https://ci.chromium.org/ui/p/chromium/builders/ci/android-archive-rel/53404/overview
Change-Id: I5c380c426b823103a3ff7f79d6d806ed7026b21e
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/18320
Commit-Queue: David Turner <digit@google.com>
Reviewed-by: Takuto Ikuta <tikuta@google.com>
diff --git a/src/gn/command_gen.cc b/src/gn/command_gen.cc
index f997086..e373c89 100644
--- a/src/gn/command_gen.cc
+++ b/src/gn/command_gen.cc
@@ -111,10 +111,12 @@
{
std::lock_guard<std::mutex> lock(write_info->lock);
- if (!rule.empty()) {
- write_info->rules[target->toolchain()].emplace_back(target,
- std::move(rule));
- }
+ // Even if rule is empty, add it to the map to ensure a corresponding
+ // .toolchain file will be generated, otherwise Ninja will complain
+ // when the build.ninja file tries to load a non-existent .toolchain
+ // file.
+ write_info->rules[target->toolchain()].emplace_back(target,
+ std::move(rule));
if (write_info->want_ninja_outputs) {
write_info->ninja_outputs_map.emplace(target,