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