| Index: tools/gn/substitution_writer.h
|
| diff --git a/tools/gn/substitution_writer.h b/tools/gn/substitution_writer.h
|
| index cd45566fdb988bf8d1088c81fcaf8b9d652e94cf..219f135635aee87eebb1cc7ea68b72b11931bbbf 100644
|
| --- a/tools/gn/substitution_writer.h
|
| +++ b/tools/gn/substitution_writer.h
|
| @@ -18,11 +18,35 @@ class SourceDir;
|
| class SourceFile;
|
| class SubstitutionList;
|
| class SubstitutionPattern;
|
| +class Target;
|
| +class Tool;
|
|
|
| // Help text for script source expansion.
|
| extern const char kSourceExpansion_Help[];
|
|
|
| // This class handles writing or applying substitution patterns to strings.
|
| +//
|
| +// There are several different uses:
|
| +//
|
| +// - Source substitutions: These are used to compute action_foreach
|
| +// outputs and arguments. Functions are provided to expand these in terms
|
| +// of both OutputFiles (for writing Ninja files) as well as SourceFiles
|
| +// (for computing lists used by code).
|
| +//
|
| +// - Target substitutions: These are specific to the target+tool combination
|
| +// and are shared between the compiler and linker ones. It includes things
|
| +// like the target_gen_dir.
|
| +//
|
| +// - Compiler substitutions: These are used to compute compiler outputs.
|
| +// It includes all source substitutions (since they depend on the various
|
| +// parts of the source file) as well as the target substitutions.
|
| +//
|
| +// - Linker substitutions: These are used to compute linker outputs. It
|
| +// includes the target substitutions.
|
| +//
|
| +// The compiler and linker specific substitutions do NOT include the various
|
| +// cflags, ldflags, libraries, etc. These are written by the ninja target
|
| +// writer since they depend on traversing the dependency tree.
|
| class SubstitutionWriter {
|
| public:
|
| enum OutputStyle {
|
| @@ -30,15 +54,20 @@ class SubstitutionWriter {
|
| OUTPUT_RELATIVE, // Dirs will be relative to a given directory.
|
| };
|
|
|
| - SubstitutionWriter();
|
| - ~SubstitutionWriter();
|
| + // Writes the pattern to the given stream with no special handling, and with
|
| + // Ninja variables replacing the patterns.
|
| + static void WriteWithNinjaVariables(
|
| + const SubstitutionPattern& pattern,
|
| + const EscapeOptions& escape_options,
|
| + std::ostream& out);
|
| +
|
| + // NOP substitutions ---------------------------------------------------------
|
|
|
| // Converts the given SubstitutionList to OutputFiles assuming there are
|
| // no substitutions (it will assert if there are). This is used for cases
|
| // like actions where the outputs are explicit, but the list is stored as
|
| // a SubstitutionList.
|
| static void GetListAsSourceFiles(
|
| - const Settings* settings,
|
| const SubstitutionList& list,
|
| std::vector<SourceFile>* output);
|
| static void GetListAsOutputFiles(
|
| @@ -46,6 +75,8 @@ class SubstitutionWriter {
|
| const SubstitutionList& list,
|
| std::vector<OutputFile>* output);
|
|
|
| + // Source substitutions -----------------------------------------------------
|
| +
|
| // Applies the substitution pattern to a source file, returning the result
|
| // as either a string, a SourceFile or an OutputFile. If the result is
|
| // expected to be a SourceFile or an OutputFile, this will CHECK if the
|
| @@ -115,13 +146,6 @@ class SubstitutionWriter {
|
| const EscapeOptions& escape_options,
|
| std::ostream& out);
|
|
|
| - // Writes the pattern to the given stream with no special handling, and with
|
| - // Ninja variables replacing the patterns.
|
| - static void WriteWithNinjaVariables(
|
| - const SubstitutionPattern& pattern,
|
| - const EscapeOptions& escape_options,
|
| - std::ostream& out);
|
| -
|
| // Extracts the given type of substitution related to a source file from the
|
| // given source file. If output_style is OUTPUT_RELATIVE, relative_to
|
| // indicates the directory that the relative directories should be relative
|
| @@ -132,6 +156,75 @@ class SubstitutionWriter {
|
| SubstitutionType type,
|
| OutputStyle output_style,
|
| const SourceDir& relative_to);
|
| +
|
| + // Target substitutions ------------------------------------------------------
|
| + //
|
| + // Handles the target substitutions that apply to both compiler and linker
|
| + // tools.
|
| + static OutputFile ApplyPatternToTargetAsOutputFile(
|
| + const Target* target,
|
| + const Tool* tool,
|
| + const SubstitutionPattern& pattern);
|
| + static void ApplyListToTargetAsOutputFile(
|
| + const Target* target,
|
| + const Tool* tool,
|
| + const SubstitutionList& list,
|
| + std::vector<OutputFile>* output);
|
| +
|
| + // This function is slightly different than the other substitution getters
|
| + // since it can handle failure (since it is designed to be used by the
|
| + // compiler and linker ones which will fall through if it's not a common tool
|
| + // one).
|
| + static bool GetTargetSubstitution(
|
| + const Target* target,
|
| + SubstitutionType type,
|
| + std::string* result);
|
| + static std::string GetTargetSubstitution(
|
| + const Target* target,
|
| + SubstitutionType type);
|
| +
|
| + // Compiler substitutions ----------------------------------------------------
|
| + //
|
| + // A compiler substitution allows both source and tool substitutions. These
|
| + // are used to compute output names for compiler tools.
|
| +
|
| + static OutputFile ApplyPatternToCompilerAsOutputFile(
|
| + const Target* target,
|
| + const SourceFile& source,
|
| + const SubstitutionPattern& pattern);
|
| + static void ApplyListToCompilerAsOutputFile(
|
| + const Target* target,
|
| + const SourceFile& source,
|
| + const SubstitutionList& list,
|
| + std::vector<OutputFile>* output);
|
| +
|
| + // Like GetSourceSubstitution but for strings based on the target or
|
| + // toolchain. This type of result will always be relative to the build
|
| + // directory.
|
| + static std::string GetCompilerSubstitution(
|
| + const Target* target,
|
| + const SourceFile& source,
|
| + SubstitutionType type);
|
| +
|
| + // Linker substitutions ------------------------------------------------------
|
| +
|
| + static OutputFile ApplyPatternToLinkerAsOutputFile(
|
| + const Target* target,
|
| + const Tool* tool,
|
| + const SubstitutionPattern& pattern);
|
| + static void ApplyListToLinkerAsOutputFile(
|
| + const Target* target,
|
| + const Tool* tool,
|
| + const SubstitutionList& list,
|
| + std::vector<OutputFile>* output);
|
| +
|
| + // Like GetSourceSubstitution but for strings based on the target or
|
| + // toolchain. This type of result will always be relative to the build
|
| + // directory.
|
| + static std::string GetLinkerSubstitution(
|
| + const Target* target,
|
| + const Tool* tool,
|
| + SubstitutionType type);
|
| };
|
|
|
| #endif // TOOLS_GN_SUBSTITUTION_WRITER_H_
|
|
|