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

Unified Diff: tools/gn/functions_target.cc

Issue 26267003: Add the concept of a source set to GN. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 2 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/functions.cc ('k') | tools/gn/gn.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/functions_target.cc
diff --git a/tools/gn/functions_target.cc b/tools/gn/functions_target.cc
index 94a04e46fc6d79f772f1511aa219166159551882..fc968e58c217e73b29ee333f3aad8db85f5995bc 100644
--- a/tools/gn/functions_target.cc
+++ b/tools/gn/functions_target.cc
@@ -58,18 +58,19 @@ const char kComponent[] = "component";
const char kComponent_Help[] =
"component: Declare a component target.\n"
"\n"
- " A component is either a shared library or a static library depending\n"
- " on the component mode. This allows a project to separate out a build\n"
- " into shared libraries for faster devlopment (link time is reduced)\n"
- " but to switch to a static build for releases (for better performance).\n"
+ " A component is a shared library, static library, or source set\n"
+ " depending on the component mode. This allows a project to separate\n"
+ " out a build into shared libraries for faster devlopment (link time is\n"
+ " reduced) but to switch to a static build for releases (for better\n"
+ " performance).\n"
"\n"
" To use this function you must set the value of the \"component_mode\n"
- " variable to the string \"shared_library\" or \"static_library\". It is\n"
- " an error to call \"component\" without defining the mode (typically\n"
- " this is done in the master build configuration file).\n"
- "\n"
- " See \"gn help shared_library\" and \"gn help static_library\" for\n"
- " more details.\n";
+ " variable to one of the following strings:\n"
+ " - \"shared_library\"\n"
+ " - \"static_library\"\n"
+ " - \"source_set\"\n"
+ " It is an error to call \"component\" without defining the mode\n"
+ " (typically this is done in the master build configuration file).\n";
Value RunComponent(Scope* scope,
const FunctionCallNode* function,
@@ -90,7 +91,8 @@ Value RunComponent(Scope* scope,
}
if (component_mode_value->type() != Value::STRING ||
(component_mode_value->string_value() != functions::kSharedLibrary &&
- component_mode_value->string_value() != functions::kStaticLibrary)) {
+ component_mode_value->string_value() != functions::kStaticLibrary &&
+ component_mode_value->string_value() != functions::kSourceSet)) {
*err = Err(function->function(), "Invalid component mode set.", helptext);
return Value();
}
@@ -339,12 +341,63 @@ Value RunSharedLibrary(Scope* scope,
block, err);
}
+// source_set ------------------------------------------------------------------
+
+extern const char kSourceSet[] = "source_set";
+extern const char kSourceSet_Help[] =
+ "source_set: Declare a source set target.\n"
+ "\n"
+ " A source set is a collection of sources that get compiled, but are not\n"
+ " linked to produce any kind of library. Instead, the resulting object\n"
+ " files are implicitly added to the linker line of all targets that\n"
+ " depend on the source set.\n"
+ "\n"
+ " In most cases, a source set will behave like a static library, except\n"
+ " no actual library file will be produced. This will make the build go\n"
+ " a little faster by skipping creation of a large static library, while\n"
+ " maintaining the organizational benefits of focused build targets.\n"
+ "\n"
+ " The main difference between a source set and a static library is\n"
+ " around handling of exported symbols. Most linkers assume declaring\n"
+ " a function exported means exported from the static library. The linker\n"
+ " can then do dead code elimination to delete code not reachable from\n"
+ " exported functions.\n"
+ "\n"
+ " A source set will not do this code elimination since there is no link\n"
+ " step. This allows you to link many sources sets into a shared library\n"
+ " and have the \"exported symbol\" notation indicate \"export from the\n"
+ " final shared library and not from the intermediate targets.\" There is\n"
+ " no way to express this concept when linking multiple static libraries\n"
+ " into a shared library.\n"
+ "\n"
+ "Variables\n"
+ "\n"
+ CONFIG_VALUES_VARS_HELP
+ DEPS_VARS
+ DEPENDENT_CONFIG_VARS
+ GENERAL_TARGET_VARS;
+
+Value RunSourceSet(Scope* scope,
+ const FunctionCallNode* function,
+ const std::vector<Value>& args,
+ BlockNode* block,
+ Err* err) {
+ return ExecuteGenericTarget(functions::kSourceSet, scope, function, args,
+ block, err);
+}
+
// static_library --------------------------------------------------------------
const char kStaticLibrary[] = "static_library";
const char kStaticLibrary_Help[] =
"static_library: Declare a static library target.\n"
"\n"
+ " Make a \".a\" / \".lib\" file.\n"
+ "\n"
+ " If you only need the static library for intermediate results in the\n"
+ " build, you should consider a source_set instead since it will skip\n"
+ " the (potentially slow) step of creating the intermediate library file.\n"
+ "\n"
"Variables\n"
"\n"
CONFIG_VALUES_VARS_HELP
« no previous file with comments | « tools/gn/functions.cc ('k') | tools/gn/gn.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698