Home | History | Annotate | Download | only in gn
      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   // Returns the string to be appended to source rules that encodes the
     33   // order-only dependencies for the current target. This will include the
     34   // "|" character so can just be appended to the source rules. If there are no
     35   // implicit dependencies, returns the empty string.
     36   std::string GetSourcesImplicitDeps() const;
     37 
     38   // Returns the FileTemplate constructed from the outputs variable. This is
     39   // like FileTemplate::GetForTargetOutputs except this additionally trims the
     40   // build directory from the front so we can just write the names without
     41   // further processing.
     42   FileTemplate GetOutputTemplate() const;
     43 
     44   const Settings* settings_;  // Non-owning.
     45   const Target* target_;  // Non-owning.
     46   const Toolchain* toolchain_;  // Non-owning.
     47   std::ostream& out_;
     48   PathOutput path_output_;
     49 
     50   NinjaHelper helper_;
     51 
     52  private:
     53   void WriteCopyRules();
     54 
     55   DISALLOW_COPY_AND_ASSIGN(NinjaTargetWriter);
     56 };
     57 
     58 #endif  // TOOLS_GN_NINJA_TARGET_WRITER_H_
     59