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 16 class BuildSettings; 17 class Settings; 18 class Target; 19 class Toolchain; 20 21 class NinjaToolchainWriter { 22 public: 23 // Takes the settings for the toolchain, as well as the list of all targets 24 // associated 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