aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Albert <danalbert@google.com>2023-06-02 22:50:04 +0000
committerCole Faust <colecfaust@gmail.com>2023-06-21 12:49:33 -0700
commit532b343f4be96abf0dec4c6f2a4785d671a985df (patch)
tree49a34791a673a507a1b5c5ee0eff4e952b2cf957
parent5c48149b4db789ec5f571f01b871e3e4f8163e2b (diff)
downloadkati-532b343f4be96abf0dec4c6f2a4785d671a985df.tar.gz
Add arbitrary metadata "tag" tracking.
Allows makefiles to set the `.KATI_TAGS` target specific variable to annotate arbitrary metadata for the build step for use in profiling. Bug: http://b/259130368 Test: end-to-end test tracing the time spent running cp for dist Change-Id: I930a828cc09add1ce13f7e23142e208c9a7ca5fc
-rw-r--r--src/dep.cc9
-rw-r--r--src/dep.h1
-rw-r--r--src/ninja.cc7
3 files changed, 15 insertions, 2 deletions
diff --git a/src/dep.cc b/src/dep.cc
index 0391cb7..e033711 100644
--- a/src/dep.cc
+++ b/src/dep.cc
@@ -286,7 +286,8 @@ DepNode::DepNode(Symbol o, bool p, bool r)
is_restat(r),
rule_vars(NULL),
depfile_var(NULL),
- ninja_pool_var(NULL) {}
+ ninja_pool_var(NULL),
+ tags_var(NULL) {}
class DepBuilder {
public:
@@ -300,7 +301,8 @@ class DepBuilder {
implicit_outputs_var_name_(Intern(".KATI_IMPLICIT_OUTPUTS")),
symlink_outputs_var_name_(Intern(".KATI_SYMLINK_OUTPUTS")),
ninja_pool_var_name_(Intern(".KATI_NINJA_POOL")),
- validations_var_name_(Intern(".KATI_VALIDATIONS")) {
+ validations_var_name_(Intern(".KATI_VALIDATIONS")),
+ tags_var_name_(Intern(".KATI_TAGS")) {
ScopedTimeReporter tr("make dep (populate)");
PopulateRules(rules);
// TODO?
@@ -735,6 +737,8 @@ class DepBuilder {
} else if (name == validations_var_name_) {
} else if (name == ninja_pool_var_name_) {
n->ninja_pool_var = new_var;
+ } else if (name == tags_var_name_) {
+ n->tags_var = new_var;
} else {
sv.emplace_back(new ScopedVar(cur_rule_vars_.get(), name, new_var));
}
@@ -941,6 +945,7 @@ class DepBuilder {
Symbol symlink_outputs_var_name_;
Symbol ninja_pool_var_name_;
Symbol validations_var_name_;
+ Symbol tags_var_name_;
};
void MakeDep(Evaluator* ev,
diff --git a/src/dep.h b/src/dep.h
index f801ef2..a3a365b 100644
--- a/src/dep.h
+++ b/src/dep.h
@@ -53,6 +53,7 @@ struct DepNode {
Vars* rule_vars;
Var* depfile_var;
Var* ninja_pool_var;
+ Var* tags_var;
Symbol output_pattern;
Loc loc;
};
diff --git a/src/ninja.cc b/src/ninja.cc
index 469c89c..ff3582a 100644
--- a/src/ninja.cc
+++ b/src/ninja.cc
@@ -604,6 +604,13 @@ class NinjaGenerator {
if (node->is_phony && g_flags.use_ninja_phony_output) {
out << " phony_output = true\n";
}
+ if (node->tags_var) {
+ std::string tags;
+ node->tags_var->Eval(ev_, &tags);
+ if (!tags.empty()) {
+ out << " tags = " << tags << "\n";
+ }
+ }
if (node->is_default_target) {
std::unique_lock<std::mutex> lock(mu_);
default_target_ = node;