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_
10 #include "base/macros.h"
11 #include "tools/gn/path_output.h"
17 struct SubstitutionBits
;
19 // Generates one target's ".ninja" file. The toplevel "build.ninja" file is
20 // generated by the NinjaBuildWriter.
21 class NinjaTargetWriter
{
23 NinjaTargetWriter(const Target
* target
, std::ostream
& out
);
24 virtual ~NinjaTargetWriter();
26 static void RunAndWriteFile(const Target
* target
);
28 virtual void Run() = 0;
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.
53 PathOutput path_output_
;
56 void WriteCopyRules();
58 DISALLOW_COPY_AND_ASSIGN(NinjaTargetWriter
);
61 #endif // TOOLS_GN_NINJA_TARGET_WRITER_H_