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_TOOLCHAIN_WRITER_H_ 6#define TOOLS_GN_NINJA_TOOLCHAIN_WRITER_H_ 7 8#include <iosfwd> 9#include <set> 10#include <string> 11#include <vector> 12 13#include "tools/gn/ninja_helper.h" 14#include "tools/gn/path_output.h" 15 16class BuildSettings; 17class Settings; 18class Target; 19class Toolchain; 20 21class NinjaToolchainWriter { 22 public: 23 // Takes the settings for the toolchain, as well as the list of all targets 24 // assicoated with the toolchain. 25 static bool RunAndWriteFile(const Settings* settings, 26 const Toolchain* toolchain, 27 const std::vector<const Target*>& targets); 28 29 private: 30 NinjaToolchainWriter(const Settings* settings, 31 const Toolchain* toolchain, 32 const std::vector<const Target*>& targets, 33 std::ostream& out); 34 ~NinjaToolchainWriter(); 35 36 void Run(); 37 38 void WriteRules(); 39 void WriteSubninjas(); 40 41 const Settings* settings_; 42 const Toolchain* toolchain_; 43 std::vector<const Target*> targets_; 44 std::ostream& out_; 45 PathOutput path_output_; 46 47 NinjaHelper helper_; 48 49 DISALLOW_COPY_AND_ASSIGN(NinjaToolchainWriter); 50}; 51 52#endif // TOOLS_GN_NINJA_TOOLCHAIN_WRITER_H_ 53