| Index: tools/gn/filesystem_utils.h
|
| diff --git a/tools/gn/filesystem_utils.h b/tools/gn/filesystem_utils.h
|
| index aaa08babde9e306ff82a0aca6b459ff30e170ee8..f53f24a3eb154e57f5a505136c565906178c187d 100644
|
| --- a/tools/gn/filesystem_utils.h
|
| +++ b/tools/gn/filesystem_utils.h
|
| @@ -177,42 +177,85 @@ bool WriteFileIfChanged(const base::FilePath& file_path,
|
|
|
| // -----------------------------------------------------------------------------
|
|
|
| -// These functions return the various flavors of output and gen directories.
|
| -SourceDir GetToolchainOutputDir(const Settings* settings);
|
| -SourceDir GetToolchainOutputDir(const BuildSettings* build_settings,
|
| - const Label& label, bool is_default);
|
| -
|
| -SourceDir GetToolchainGenDir(const Settings* settings);
|
| -OutputFile GetToolchainGenDirAsOutputFile(const Settings* settings);
|
| -SourceDir GetToolchainGenDir(const BuildSettings* build_settings,
|
| - const Label& toolchain_label,
|
| - bool is_default);
|
| -
|
| -SourceDir GetOutputDirForSourceDir(const Settings* settings,
|
| - const SourceDir& source_dir);
|
| -SourceDir GetOutputDirForSourceDir(const BuildSettings* build_settings,
|
| - const SourceDir& source_dir,
|
| - const Label& toolchain_label,
|
| - bool is_default_toolchain);
|
| -OutputFile GetOutputDirForSourceDirAsOutputFile(
|
| - const BuildSettings* build_settings,
|
| - const SourceDir& source_dir,
|
| - const Label& toolchain_label,
|
| - bool is_default_toolchain);
|
| -OutputFile GetOutputDirForSourceDirAsOutputFile(const Settings* settings,
|
| - const SourceDir& source_dir);
|
| -
|
| -SourceDir GetGenDirForSourceDir(const Settings* settings,
|
| - const SourceDir& source_dir);
|
| -OutputFile GetGenDirForSourceDirAsOutputFile(const Settings* settings,
|
| - const SourceDir& source_dir);
|
| -
|
| -SourceDir GetTargetOutputDir(const Target* target);
|
| -OutputFile GetTargetOutputDirAsOutputFile(const Target* target);
|
| -SourceDir GetTargetGenDir(const Target* target);
|
| -OutputFile GetTargetGenDirAsOutputFile(const Target* target);
|
| -
|
| -SourceDir GetCurrentOutputDir(const Scope* scope);
|
| -SourceDir GetCurrentGenDir(const Scope* scope);
|
| +enum class BuildDirType {
|
| + // Returns the root toolchain dir rather than the generated or output
|
| + // subdirectories. This is valid only for the toolchain directory getters.
|
| + // Asking for this for a target or source dir makes no sense.
|
| + TOOLCHAIN_ROOT,
|
| +
|
| + // Generated file directory.
|
| + GEN,
|
| +
|
| + // Output file directory.
|
| + OBJ,
|
| +};
|
| +
|
| +// In different contexts, different information is known about the toolchain in
|
| +// question. If you have a Target or settings object, everything can be
|
| +// extracted from there. But when querying label information on something in
|
| +// another toolchain, for example, the only thing known (it may not even exist)
|
| +// is the toolchain label string and whether it matches the default toolchain.
|
| +//
|
| +// This object extracts the relevant information from a variety of input
|
| +// types for the convenience of the caller.
|
| +class BuildDirContext {
|
| + public:
|
| + // Extracts toolchain information associated with the given target.
|
| + explicit BuildDirContext(const Target* target);
|
| +
|
| + // Extracts toolchain information associated with the given settings object.
|
| + explicit BuildDirContext(const Settings* settings);
|
| +
|
| + // Extrats toolchain information from the current toolchain of the scope.
|
| + explicit BuildDirContext(const Scope* execution_scope);
|
| +
|
| + // Extracts the default toolchain information from the given execution
|
| + // scope. The toolchain you want to query must be passed in. This doesn't
|
| + // use the settings object from the Scope so one can query other toolchains.
|
| + // If you want to use the scope's current toolchain, use the version above.
|
| + BuildDirContext(const Scope* execution_scope, const Label& toolchain_label);
|
| +
|
| + // Specify all information manually.
|
| + BuildDirContext(const BuildSettings* build_settings,
|
| + const Label& toolchain_label,
|
| + bool is_default_toolchain);
|
| +
|
| + const BuildSettings* build_settings;
|
| + const Label& toolchain_label;
|
| + bool is_default_toolchain;
|
| +};
|
| +
|
| +// Returns the root, object, or generated file directory for the toolchain.
|
| +//
|
| +// The toolchain object file root is never exposed in GN (there is no
|
| +// root_obj_dir variable) so BuildDirType::OBJ would normally never be passed
|
| +// to this function except when it's called by one of the variants below that
|
| +// append paths to it.
|
| +SourceDir GetBuildDirAsSourceDir(const BuildDirContext& context,
|
| + BuildDirType type);
|
| +OutputFile GetBuildDirAsOutputFile(const BuildDirContext& context,
|
| + BuildDirType type);
|
| +
|
| +// Returns the output or generated file directory corresponding to the given
|
| +// source directory.
|
| +SourceDir GetSubBuildDirAsSourceDir(const BuildDirContext& context,
|
| + const SourceDir& source_dir,
|
| + BuildDirType type);
|
| +OutputFile GetSubBuildDirAsOutputFile(const BuildDirContext& context,
|
| + const SourceDir& source_dir,
|
| + BuildDirType type);
|
| +
|
| +// Returns the output or generated file directory corresponding to the given
|
| +// target.
|
| +SourceDir GetBuildDirForTargetAsSourceDir(const Target* target,
|
| + BuildDirType type);
|
| +OutputFile GetBuildDirForTargetAsOutputFile(const Target* target,
|
| + BuildDirType type);
|
| +
|
| +// Returns the scope's current directory.
|
| +SourceDir GetScopeCurrentBuildDirAsSourceDir(const Scope* scope,
|
| + BuildDirType type);
|
| +// Lack of OutputDir version is due only to it not currently being needed,
|
| +// please add one if you need it.
|
|
|
| #endif // TOOLS_GN_FILESYSTEM_UTILS_H_
|
|
|