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

Unified Diff: tools/gn/target_generator.cc

Issue 56433003: GN threading refactor (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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/target_generator.h ('k') | tools/gn/target_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/target_generator.cc
diff --git a/tools/gn/target_generator.cc b/tools/gn/target_generator.cc
index 3bb51eb9863c6c9855ef8ff0a9241d5c46cb44de..81c4394e0e2006de6f842f4bd7dcf90e008f65c0 100644
--- a/tools/gn/target_generator.cc
+++ b/tools/gn/target_generator.cc
@@ -12,12 +12,10 @@
#include "tools/gn/filesystem_utils.h"
#include "tools/gn/functions.h"
#include "tools/gn/group_target_generator.h"
-#include "tools/gn/item_node.h"
#include "tools/gn/parse_tree.h"
#include "tools/gn/scheduler.h"
#include "tools/gn/scope.h"
#include "tools/gn/script_target_generator.h"
-#include "tools/gn/target_manager.h"
#include "tools/gn/token.h"
#include "tools/gn/value.h"
#include "tools/gn/value_extractors.h"
@@ -25,11 +23,11 @@
TargetGenerator::TargetGenerator(Target* target,
Scope* scope,
- const Token& function_token,
+ const FunctionCallNode* function_call,
Err* err)
: target_(target),
scope_(scope),
- function_token_(function_token),
+ function_call_(function_call),
err_(err) {
}
@@ -43,26 +41,19 @@ void TargetGenerator::Run() {
FillDependencies();
FillGypFile();
- // To type-specific generation.
+ // Do type-specific generation.
DoRun();
-
- // Mark the target as complete.
- if (!err_->has_error()) {
- target_->SetGenerated(&function_token_);
- GetBuildSettings()->target_manager().TargetGenerationComplete(
- target_->label(), err_);
- }
}
// static
void TargetGenerator::GenerateTarget(Scope* scope,
- const Token& function_token,
+ const FunctionCallNode* function_call,
const std::vector<Value>& args,
const std::string& output_type,
Err* err) {
// Name is the argument to the function.
if (args.size() != 1u || args[0].type() != Value::STRING) {
- *err = Err(function_token,
+ *err = Err(function_call,
"Target generator requires one string argument.",
"Otherwise I'm not sure what to call this target.");
return;
@@ -75,44 +66,44 @@ void TargetGenerator::GenerateTarget(Scope* scope,
toolchain_label.dir(), toolchain_label.name());
if (g_scheduler->verbose_logging())
- g_scheduler->Log("Generating target", label.GetUserVisibleName(true));
+ g_scheduler->Log("Defining target", label.GetUserVisibleName(true));
- Target* target =
- scope->settings()->build_settings()->target_manager().GetTarget(
- label, function_token.range(), NULL, err);
- if (err->has_error())
- return;
+ scoped_ptr<Target> target(new Target(scope->settings(), label));
+ target->set_defined_from(function_call);
// Create and call out to the proper generator.
if (output_type == functions::kCopy) {
- CopyTargetGenerator generator(target, scope, function_token, err);
+ CopyTargetGenerator generator(target.get(), scope, function_call, err);
generator.Run();
} else if (output_type == functions::kCustom) {
- ScriptTargetGenerator generator(target, scope, function_token, err);
+ ScriptTargetGenerator generator(target.get(), scope, function_call, err);
generator.Run();
} else if (output_type == functions::kExecutable) {
- BinaryTargetGenerator generator(target, scope, function_token,
+ BinaryTargetGenerator generator(target.get(), scope, function_call,
Target::EXECUTABLE, err);
generator.Run();
} else if (output_type == functions::kGroup) {
- GroupTargetGenerator generator(target, scope, function_token, err);
+ GroupTargetGenerator generator(target.get(), scope, function_call, err);
generator.Run();
} else if (output_type == functions::kSharedLibrary) {
- BinaryTargetGenerator generator(target, scope, function_token,
+ BinaryTargetGenerator generator(target.get(), scope, function_call,
Target::SHARED_LIBRARY, err);
generator.Run();
} else if (output_type == functions::kSourceSet) {
- BinaryTargetGenerator generator(target, scope, function_token,
+ BinaryTargetGenerator generator(target.get(), scope, function_call,
Target::SOURCE_SET, err);
generator.Run();
} else if (output_type == functions::kStaticLibrary) {
- BinaryTargetGenerator generator(target, scope, function_token,
+ BinaryTargetGenerator generator(target.get(), scope, function_call,
Target::STATIC_LIBRARY, err);
generator.Run();
} else {
- *err = Err(function_token, "Not a known output type",
+ *err = Err(function_call, "Not a known output type",
"I am very confused.");
}
+
+ if (!err->has_error())
+ scope->settings()->build_settings()->ItemDefined(target.PassAs<Item>());
}
const BuildSettings* TargetGenerator::GetBuildSettings() const {
@@ -155,8 +146,6 @@ void TargetGenerator::FillDependentConfigs() {
}
void TargetGenerator::FillData() {
- // TODO(brettW) hook this up to the constant when we have cleaned up
- // how data files are used.
const Value* value = scope_->GetValue(variables::kData, true);
if (!value)
return;
@@ -229,88 +218,30 @@ void TargetGenerator::FillOutputs() {
target_->script_values().outputs().swap(outputs);
}
-void TargetGenerator::SetToolchainDependency() {
- // TODO(brettw) currently we lock separately for each config, dep, and
- // toolchain we add which is bad! Do this in one lock.
- ItemTree* tree = &GetBuildSettings()->item_tree();
- base::AutoLock lock(tree->lock());
- ItemNode* tc_node =
- tree->GetExistingNodeLocked(ToolchainLabelForScope(scope_));
- target_->item_node()->AddDependency(
- GetBuildSettings(), function_token_.range(), tc_node, err_);
-}
-
void TargetGenerator::FillGenericConfigs(const char* var_name,
LabelConfigVector* dest) {
const Value* value = scope_->GetValue(var_name, true);
- if (!value)
- return;
- if (!ExtractListOfLabels(*value, scope_->GetSourceDir(),
- ToolchainLabelForScope(scope_), dest, err_))
- return;
-
- for (size_t i = 0; i < dest->size(); i++) {
- LabelConfigPair& cur = (*dest)[i];
- cur.ptr = Config::GetConfig(scope_->settings(),
- value->list_value()[i].origin()->GetRange(),
- cur.label, target_, err_);
- if (err_->has_error())
- return;
+ if (value) {
+ ExtractListOfLabels(*value, scope_->GetSourceDir(),
+ ToolchainLabelForScope(scope_), dest, err_);
}
}
void TargetGenerator::FillGenericDeps(const char* var_name,
LabelTargetVector* dest) {
const Value* value = scope_->GetValue(var_name, true);
- if (!value)
- return;
- if (!ExtractListOfLabels(*value, scope_->GetSourceDir(),
- ToolchainLabelForScope(scope_), dest, err_))
- return;
-
- for (size_t i = 0; i < dest->size(); i++) {
- LabelTargetPair& cur = (*dest)[i];
- cur.ptr = GetBuildSettings()->target_manager().GetTarget(
- cur.label, value->list_value()[i].origin()->GetRange(), target_, err_);
- if (err_->has_error())
- return;
+ if (value) {
+ ExtractListOfLabels(*value, scope_->GetSourceDir(),
+ ToolchainLabelForScope(scope_), dest, err_);
}
}
void TargetGenerator::FillForwardDependentConfigs() {
const Value* value = scope_->GetValue(
variables::kForwardDependentConfigsFrom, true);
- if (!value)
- return;
-
- LabelTargetVector& dest = target_->forward_dependent_configs();
- if (!ExtractListOfLabels(*value, scope_->GetSourceDir(),
- ToolchainLabelForScope(scope_), &dest, err_))
- return;
-
- // We currently assume that the list is very small and do a brute-force
- // search in the deps for the labeled target. This could be optimized.
- const LabelTargetVector& deps = target_->deps();
- std::vector<const Target*> forward_from_list;
- for (size_t dest_index = 0; dest_index < dest.size(); dest_index++) {
- LabelTargetPair& cur_dest = dest[dest_index];
- for (size_t dep_index = 0; dep_index < deps.size(); dep_index++) {
- if (deps[dep_index].label == cur_dest.label) {
- cur_dest.ptr = deps[dep_index].ptr;
- break;
- }
- }
- if (!cur_dest.ptr) {
- *err_ = Err(cur_dest.origin,
- "Can't forward from this target.",
- "forward_dependent_configs_from must contain a list of labels that\n"
- "must all appear in the deps of the same target.");
- return;
- }
+ if (value) {
+ ExtractListOfLabels(*value, scope_->GetSourceDir(),
+ ToolchainLabelForScope(scope_),
+ &target_->forward_dependent_configs(), err_);
}
}
-
-
-
-
-
« no previous file with comments | « tools/gn/target_generator.h ('k') | tools/gn/target_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698