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

Unified Diff: tools/gn/function_toolchain.cc

Issue 2219083002: Update GN toolchain_args to be a variable. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge remote-tracking branch 'origin/master' into toolchain_args Created 4 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/function_forward_variables_from_unittest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/function_toolchain.cc
diff --git a/tools/gn/function_toolchain.cc b/tools/gn/function_toolchain.cc
index faa190e66e46c30c8719b3acd56bcaf632f1f440..852d25a5f6f57f4efe56f28fe7312aab0fc5b205 100644
--- a/tools/gn/function_toolchain.cc
+++ b/tools/gn/function_toolchain.cc
@@ -314,10 +314,26 @@ const char kToolchain_Help[] =
" The tool() function call specifies the commands commands to run for\n"
" a given step. See \"gn help tool\".\n"
"\n"
- " toolchain_args()\n"
- " List of arguments to pass to the toolchain when invoking this\n"
- " toolchain. This applies only to non-default toolchains. See\n"
- " \"gn help toolchain_args\" for more.\n"
+ " toolchain_args\n"
+ " Overrides for build arguments to pass to the toolchain when invoking\n"
+ " it. This is a variable of type \"scope\" where the variable names\n"
+ " correspond to varibles in declare_args() blocks.\n"
+ "\n"
+ " When you specify a target using an alternate toolchain, the master\n"
+ " build configuration file is re-interpreted in the context of that\n"
+ " toolchain (see \"gn help toolchain\"). The toolchain_args allows you\n"
+ " to control the arguments passed into this alternate invocation of\n"
+ " the build.\n"
+ "\n"
+ " Any default system arguments or arguments passed in via \"gn args\"\n"
+ " will also be passed to the alternate invocation unless explicitly\n"
+ " overridden by toolchain_args.\n"
+ "\n"
+ " The toolchain_args will be ignored when the toolchain being defined\n"
+ " is the default. In this case, it's expected you want the default\n"
+ " argument values.\n"
+ "\n"
+ " See also \"gn help buildargs\" for an overview of these arguments.\n"
"\n"
" deps\n"
" Dependencies of this toolchain. These dependencies will be resolved\n"
@@ -350,18 +366,19 @@ const char kToolchain_Help[] =
" by the toolchain label).\n"
" 2. Re-runs the master build configuration file, applying the\n"
" arguments specified by the toolchain_args section of the toolchain\n"
- " definition (see \"gn help toolchain_args\").\n"
+ " definition.\n"
" 3. Loads the destination build file in the context of the\n"
" configuration file in the previous step.\n"
"\n"
- "Example:\n"
+ "Example\n"
+ "\n"
" toolchain(\"plugin_toolchain\") {\n"
" tool(\"cc\") {\n"
" command = \"gcc {{source}}\"\n"
" ...\n"
" }\n"
"\n"
- " toolchain_args() {\n"
+ " toolchain_args = {\n"
" is_plugin = true\n"
" is_32bit = true\n"
" is_64bit = false\n"
@@ -412,6 +429,17 @@ Value RunToolchain(Scope* scope,
return Value();
}
+ // Read toolchain args (if any).
+ const Value* toolchain_args = block_scope.GetValue("toolchain_args", true);
+ if (toolchain_args) {
+ if (!toolchain_args->VerifyTypeIs(Value::SCOPE, err))
+ return Value();
+
+ Scope::KeyValueMap values;
+ toolchain_args->scope_value()->GetCurrentScopeValues(&values);
+ toolchain->args() = values;
+ }
+
if (!block_scope.CheckForUnusedVars(err))
return Value();
@@ -1015,79 +1043,45 @@ Value RunTool(Scope* scope,
return Value();
}
-// toolchain_args --------------------------------------------------------------
-
extern const char kToolchainArgs[] = "toolchain_args";
extern const char kToolchainArgs_HelpShort[] =
"toolchain_args: Set build arguments for toolchain build setup.";
extern const char kToolchainArgs_Help[] =
"toolchain_args: Set build arguments for toolchain build setup.\n"
"\n"
- " Used inside a toolchain definition to pass arguments to an alternate\n"
- " toolchain's invocation of the build.\n"
- "\n"
- " When you specify a target using an alternate toolchain, the master\n"
- " build configuration file is re-interpreted in the context of that\n"
- " toolchain (see \"gn help toolchain\"). The toolchain_args function\n"
- " allows you to control the arguments passed into this alternate\n"
- " invocation of the build.\n"
- "\n"
- " Any default system arguments or arguments passed in on the command-\n"
- " line will also be passed to the alternate invocation unless explicitly\n"
- " overridden by toolchain_args.\n"
- "\n"
- " The toolchain_args will be ignored when the toolchain being defined\n"
- " is the default. In this case, it's expected you want the default\n"
- " argument values.\n"
- "\n"
- " See also \"gn help buildargs\" for an overview of these arguments.\n"
+ " DEPRECATED. Instead use:\n"
+ " toolchain_args = { ... }\n"
"\n"
- "Example:\n"
- " toolchain(\"my_weird_toolchain\") {\n"
- " ...\n"
- " toolchain_args() {\n"
- " # Override the system values for a generic Posix system.\n"
- " is_win = false\n"
- " is_posix = true\n"
- "\n"
- " # Pass this new value for specific setup for my toolchain.\n"
- " is_my_weird_system = true\n"
- " }\n"
- " }\n";
+ " See \"gn help toolchain\" for documentation.\n";
Value RunToolchainArgs(Scope* scope,
const FunctionCallNode* function,
const std::vector<Value>& args,
BlockNode* block,
Err* err) {
- // Find the toolchain definition we're executing inside of. The toolchain
- // function will set a property pointing to it that we'll pick up.
- Toolchain* toolchain = reinterpret_cast<Toolchain*>(
- scope->GetProperty(&kToolchainPropertyKey, nullptr));
- if (!toolchain) {
- *err = Err(function->function(),
- "toolchain_args() called outside of toolchain().",
- "The toolchain_args() function can only be used inside a "
- "toolchain() definition.");
- return Value();
- }
-
+ // This is a backwards-compatible shim that converts the old form of:
+ // toolchain_args() {
+ // foo = bar
+ // }
+ // to the new form:
+ // toolchain_args = {
+ // foo = bar
+ // }
+ // It will be deleted when all users of toolchain_args as a function are
+ // deleted.
if (!args.empty()) {
*err = Err(function->function(), "This function takes no arguments.");
return Value();
}
- // This function makes a new scope with various variable sets on it, which
- // we then save on the toolchain to use when re-invoking the build.
- Scope block_scope(scope);
- block->Execute(&block_scope, err);
+ std::unique_ptr<Scope> block_scope(new Scope(scope));
+ block->Execute(block_scope.get(), err);
if (err->has_error())
return Value();
- Scope::KeyValueMap values;
- block_scope.GetCurrentScopeValues(&values);
- toolchain->args() = values;
-
+ block_scope->DetachFromContaining();
+ scope->SetValue("toolchain_args", Value(function, std::move(block_scope)),
+ function);
return Value();
}
« no previous file with comments | « tools/gn/function_forward_variables_from_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698