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_TARGET_WRITER_H_ 6 #define TOOLS_GN_NINJA_TARGET_WRITER_H_ 7 8 #include <iosfwd> 9 10 #include "base/basictypes.h" 11 #include "tools/gn/ninja_helper.h" 12 #include "tools/gn/path_output.h" 13 14 class FileTemplate; 15 class Settings; 16 class Target; 17 18 // Generates one target's ".ninja" file. The toplevel "build.ninja" file is 19 // generated by the NinjaBuildWriter. 20 class NinjaTargetWriter { 21 public: 22 NinjaTargetWriter(const Target* target, 23 const Toolchain* toolchain, 24 std::ostream& out); 25 virtual ~NinjaTargetWriter(); 26 27 static void RunAndWriteFile(const Target* target, const Toolchain* toolchain); 28 29 virtual void Run() = 0; 30 31 protected: 32 // Writes to the output stream a stamp rule for input dependencies, and 33 // returns the string to be appended to source rules that encodes the 34 // order-only dependencies for the current target. This will include the "|" 35 // character so can just be appended to the source rules. If there are no 36 // implicit dependencies and no extra target dependencies passed in, returns 37 // the empty string. 38 std::string WriteInputDepsStampAndGetDep( 39 const std::vector<const Target*>& extra_hard_deps) const; 40 41 // Returns the FileTemplate constructed from the outputs variable. This is 42 // like FileTemplate::GetForTargetOutputs except this additionally trims the 43 // build directory from the front so we can just write the names without 44 // further processing. 45 FileTemplate GetOutputTemplate() const; 46 47 const Settings* settings_; // Non-owning. 48 const Target* target_; // Non-owning. 49 const Toolchain* toolchain_; // Non-owning. 50 std::ostream& out_; 51 PathOutput path_output_; 52 53 NinjaHelper helper_; 54 55 private: 56 void WriteCopyRules(); 57 58 DISALLOW_COPY_AND_ASSIGN(NinjaTargetWriter); 59 }; 60 61 #endif // TOOLS_GN_NINJA_TARGET_WRITER_H_ 62