Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1231)

Unified Diff: tools/gn/target.h

Issue 440333002: Support more configurability in GN toolchains (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: unsigned check Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/gn/substitution_writer_unittest.cc ('k') | tools/gn/target.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/target.h
diff --git a/tools/gn/target.h b/tools/gn/target.h
index f0301e9f1c4e8d01088198a9458353d3133254bf..9b7ff6d10201778c13e88dbe0b4c14bd1f0d4775 100644
--- a/tools/gn/target.h
+++ b/tools/gn/target.h
@@ -19,12 +19,14 @@
#include "tools/gn/item.h"
#include "tools/gn/label_ptr.h"
#include "tools/gn/ordered_set.h"
+#include "tools/gn/output_file.h"
#include "tools/gn/source_file.h"
#include "tools/gn/unique_vector.h"
class InputFile;
class Settings;
class Token;
+class Toolchain;
class Target : public Item {
public:
@@ -59,9 +61,18 @@ class Target : public Item {
bool IsLinkable() const;
// Will be the empty string to use the target label as the output name.
+ // See GetComputedOutputName().
const std::string& output_name() const { return output_name_; }
void set_output_name(const std::string& name) { output_name_ = name; }
+ // Returns the output name for this target, which is the output_name if
+ // specified, or the target label if not. If the flag is set, it will also
+ // include any output prefix specified on the tool (often "lib" on Linux).
+ //
+ // Because this depends on the tool for this target, the toolchain must
+ // have been set before calling.
+ std::string GetComputedOutputName(bool include_prefix) const;
+
const std::string& output_extension() const { return output_extension_; }
void set_output_extension(const std::string& extension) {
output_extension_ = extension;
@@ -155,6 +166,37 @@ class Target : public Item {
return recursive_hard_deps_;
}
+ // The toolchain is only known once this target is resolved (all if its
+ // dependencies are known). They will be null until then. Generally, this can
+ // only be used during target writing.
+ const Toolchain* toolchain() const { return toolchain_; }
+
+ // Sets the toolchain. The toolchain must include a tool for this target
+ // or the error will be set and the function will return false. Unusually,
+ // this function's "err" output is optional since this is commonly used
+ // frequently by unit tests which become needlessly verbose.
+ bool SetToolchain(const Toolchain* toolchain, Err* err = NULL);
+
+ // Returns outputs from this target. The link output file is the one that
+ // other targets link to when they depend on this target. This will only be
+ // valid for libraries and will be empty for all other target types.
+ //
+ // The dependency output file is the file that should be used to express
+ // a dependency on this one. It could be the same as the link output file
+ // (this will be the case for static libraries). For shared libraries it
+ // could be the same or different than the link output file, depending on the
+ // system. For actions this will be the stamp file.
+ //
+ // These are only known once the target is resolved and will be empty before
+ // that. This is a cache of the files to prevent every target that depends on
+ // a given library from recomputing the same pattern.
+ const OutputFile& link_output_file() const {
+ return link_output_file_;
+ }
+ const OutputFile& dependency_output_file() const {
+ return dependency_output_file_;
+ }
+
private:
// Pulls necessary information from dependencies to this one when all
// dependencies have been resolved.
@@ -165,6 +207,9 @@ class Target : public Item {
void PullForwardedDependentConfigs();
void PullRecursiveHardDeps();
+ // Fills the link and dependency output files when a target is resolved.
+ void FillOutputFiles();
+
OutputType output_type_;
std::string output_name_;
std::string output_extension_;
@@ -217,6 +262,13 @@ class Target : public Item {
ConfigValues config_values_; // Used for all binary targets.
ActionValues action_values_; // Used for action[_foreach] targets.
+ // Toolchain used by this target. Null until target is resolved.
+ const Toolchain* toolchain_;
+
+ // Output files. Null until the target is resolved.
+ OutputFile link_output_file_;
+ OutputFile dependency_output_file_;
+
DISALLOW_COPY_AND_ASSIGN(Target);
};
« no previous file with comments | « tools/gn/substitution_writer_unittest.cc ('k') | tools/gn/target.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698