// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "tools/gn/ninja_writer.h" #include "tools/gn/builder.h" #include "tools/gn/loader.h" #include "tools/gn/location.h" #include "tools/gn/ninja_build_writer.h" #include "tools/gn/ninja_toolchain_writer.h" #include "tools/gn/settings.h" #include "tools/gn/target.h" NinjaWriter::NinjaWriter(const Builder& builder) : builder_(builder) { } NinjaWriter::~NinjaWriter() = default; // static bool NinjaWriter::RunAndWriteFiles( const BuildSettings* build_settings, const Builder& builder, const PerToolchainRules& per_toolchain_rules, Err* err) { NinjaWriter writer(builder); if (!writer.WriteToolchains(per_toolchain_rules, err)) return false; return NinjaBuildWriter::RunAndWriteFile(build_settings, builder, err); } bool NinjaWriter::WriteToolchains(const PerToolchainRules& per_toolchain_rules, Err* err) { if (per_toolchain_rules.empty()) { Err(Location(), "No targets.", "I could not find any targets to write, so I'm doing nothing.") .PrintToStdout(); return false; } for (const auto& i : per_toolchain_rules) { const Toolchain* toolchain = i.first; const Settings* settings = builder_.loader()->GetToolchainSettings(toolchain->label()); if (!NinjaToolchainWriter::RunAndWriteFile(settings, toolchain, i.second)) { Err(Location(), "Couldn't open toolchain buildfile(s) for writing").PrintToStdout(); return false; } } return true; }