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#ifndef TOOLS_GN_NINJA_WRITER_H_
6#define TOOLS_GN_NINJA_WRITER_H_
7
8#include <set>
9#include <string>
10#include <vector>
11
12#include "base/basictypes.h"
13
14class Builder;
15class BuildSettings;
16class Settings;
17class Target;
18
19class NinjaWriter {
20 public:
21  // On failure will print an error and will return false.
22  static bool RunAndWriteFiles(const BuildSettings* build_settings,
23                               Builder* builder);
24
25  // Writes only the toolchain.ninja files, skipping the root buildfile. The
26  // settings for the files written will be added to the vector.
27  static bool RunAndWriteToolchainFiles(
28      const BuildSettings* build_settings,
29      Builder* builder,
30      std::vector<const Settings*>* all_settings);
31
32 private:
33  NinjaWriter(const BuildSettings* build_settings, Builder* builder);
34  ~NinjaWriter();
35
36  bool WriteToolchains(
37      std::vector<const Settings*>* all_settings,
38      std::vector<const Target*>* default_targets);
39  bool WriteRootBuildfiles(const std::vector<const Settings*>& all_settings,
40                           const std::vector<const Target*>& default_targets);
41
42  const BuildSettings* build_settings_;
43  Builder* builder_;
44
45  DISALLOW_COPY_AND_ASSIGN(NinjaWriter);
46};
47
48#endif  // TOOLS_GN_NINJA_WRITER_H_
49