• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "gn/ninja_writer.h"
6 
7 #include "gn/builder.h"
8 #include "gn/loader.h"
9 #include "gn/location.h"
10 #include "gn/ninja_build_writer.h"
11 #include "gn/ninja_toolchain_writer.h"
12 #include "gn/settings.h"
13 #include "gn/target.h"
14 
NinjaWriter(const Builder & builder)15 NinjaWriter::NinjaWriter(const Builder& builder) : builder_(builder) {}
16 
17 NinjaWriter::~NinjaWriter() = default;
18 
19 // static
RunAndWriteFiles(const BuildSettings * build_settings,const Builder & builder,const PerToolchainRules & per_toolchain_rules,Err * err)20 bool NinjaWriter::RunAndWriteFiles(const BuildSettings* build_settings,
21                                    const Builder& builder,
22                                    const PerToolchainRules& per_toolchain_rules,
23                                    Err* err) {
24   NinjaWriter writer(builder);
25 
26   if (!writer.WriteToolchains(per_toolchain_rules, err))
27     return false;
28   return NinjaBuildWriter::RunAndWriteFile(build_settings, builder, err);
29 }
30 
WriteToolchains(const PerToolchainRules & per_toolchain_rules,Err * err)31 bool NinjaWriter::WriteToolchains(const PerToolchainRules& per_toolchain_rules,
32                                   Err* err) {
33   if (per_toolchain_rules.empty()) {
34     *err = Err(Location(), "No targets.",
35                "I could not find any targets to write, so I'm doing nothing.");
36     return false;
37   }
38 
39   for (const auto& i : per_toolchain_rules) {
40     const Toolchain* toolchain = i.first;
41     const Settings* settings =
42         builder_.loader()->GetToolchainSettings(toolchain->label());
43     if (!NinjaToolchainWriter::RunAndWriteFile(settings, toolchain, i.second)) {
44       *err =
45           Err(Location(), "Couldn't open toolchain buildfile(s) for writing");
46       return false;
47     }
48   }
49 
50   return true;
51 }
52