Add the ability to code generated prepopulated static nested structs
[chromium-blink-merge.git] / tools / gn / ninja_target_writer.h
blobf67eba533c86e5b28774a465cf0d141448d9d3a4
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.
5 #ifndef TOOLS_GN_NINJA_TARGET_WRITER_H_
6 #define TOOLS_GN_NINJA_TARGET_WRITER_H_
8 #include <iosfwd>
10 #include "base/basictypes.h"
11 #include "tools/gn/path_output.h"
12 #include "tools/gn/substitution_type.h"
14 class FileTemplate;
15 class OutputFile;
16 class Settings;
17 class Target;
19 // Generates one target's ".ninja" file. The toplevel "build.ninja" file is
20 // generated by the NinjaBuildWriter.
21 class NinjaTargetWriter {
22 public:
23 NinjaTargetWriter(const Target* target, std::ostream& out);
24 virtual ~NinjaTargetWriter();
26 static void RunAndWriteFile(const Target* target);
28 virtual void Run() = 0;
30 protected:
31 // Writes out the substitution values that are shared between the different
32 // types of tools (target gen dir, target label, etc.). Only the substitutions
33 // identified by the given bits will be written.
34 void WriteSharedVars(const SubstitutionBits& bits);
36 // Writes to the output stream a stamp rule for input dependencies, and
37 // returns the file to be appended to source rules that encodes the
38 // order-only dependencies for the current target. The returned OutputFile
39 // will be empty if there are no implicit dependencies and no extra target
40 // dependencies passed in.
41 OutputFile WriteInputDepsStampAndGetDep(
42 const std::vector<const Target*>& extra_hard_deps) const;
44 // Writes to the output file a final stamp rule for the target that stamps
45 // the given list of files. This function assumes the stamp is for the target
46 // as a whole so the stamp file is set as the target's dependency output.
47 void WriteStampForTarget(const std::vector<OutputFile>& deps,
48 const std::vector<OutputFile>& order_only_deps);
50 const Settings* settings_; // Non-owning.
51 const Target* target_; // Non-owning.
52 std::ostream& out_;
53 PathOutput path_output_;
55 private:
56 void WriteCopyRules();
58 DISALLOW_COPY_AND_ASSIGN(NinjaTargetWriter);
61 #endif // TOOLS_GN_NINJA_TARGET_WRITER_H_