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_BUILD_WRITER_H_ 6#define TOOLS_GN_NINJA_BUILD_WRITER_H_ 7 8#include <iosfwd> 9#include <vector> 10 11#include "tools/gn/path_output.h" 12 13class BuildSettings; 14class Settings; 15class Target; 16class Toolchain; 17 18// Generates the toplevel "build.ninja" file. This references the individual 19// toolchain files and lists all input .gn files as dependencies of the 20// build itself. 21class NinjaBuildWriter { 22 public: 23 static bool RunAndWriteFile( 24 const BuildSettings* settings, 25 const std::vector<const Settings*>& all_settings, 26 const Toolchain* default_toolchain, 27 const std::vector<const Target*>& default_toolchain_targets); 28 29 private: 30 NinjaBuildWriter(const BuildSettings* settings, 31 const std::vector<const Settings*>& all_settings, 32 const Toolchain* default_toolchain, 33 const std::vector<const Target*>& default_toolchain_targets, 34 std::ostream& out, 35 std::ostream& dep_out); 36 ~NinjaBuildWriter(); 37 38 void Run(); 39 40 void WriteNinjaRules(); 41 void WriteLinkPool(); 42 void WriteSubninjas(); 43 void WritePhonyAndAllRules(); 44 45 void WritePhonyRule(const Target* target, const OutputFile& target_file, 46 const std::string& phony_name); 47 48 const BuildSettings* build_settings_; 49 std::vector<const Settings*> all_settings_; 50 const Toolchain* default_toolchain_; 51 std::vector<const Target*> default_toolchain_targets_; 52 std::ostream& out_; 53 std::ostream& dep_out_; 54 PathOutput path_output_; 55 56 DISALLOW_COPY_AND_ASSIGN(NinjaBuildWriter); 57}; 58 59#endif // TOOLS_GN_NINJA_BUILD_GENERATOR_H_ 60 61