Index: tools/gn/docs/reference.md |
diff --git a/tools/gn/docs/reference.md b/tools/gn/docs/reference.md |
index 657796abc8fb4e71a7561473fc03874a46ec3e5e..a3bb57b4065b0f104cf12c904c702a39eb6546a0 100644 |
--- a/tools/gn/docs/reference.md |
+++ b/tools/gn/docs/reference.md |
@@ -455,8 +455,8 @@ |
Tree output can not be used with the filtering or output flags: |
--as, --type, --testonly. |
- --type=(action|copy|executable|group|shared_library|source_set| |
- static_library) |
+ --type=(action|copy|executable|group|loadable_module|shared_library| |
+ source_set|static_library) |
Restrict outputs to targets matching the given type. If |
unspecified, no filtering will be performed. |
@@ -594,8 +594,8 @@ |
accordingly. When unspecified, the target's testonly flags are |
ignored. |
- --type=(action|copy|executable|group|shared_library|source_set| |
- static_library) |
+ --type=(action|copy|executable|group|loadable_module|shared_library| |
+ source_set|static_library) |
Restrict outputs to targets matching the given type. If |
unspecified, no filtering will be performed. |
@@ -740,8 +740,8 @@ |
Tree output can not be used with the filtering or output flags: |
--as, --type, --testonly. |
- --type=(action|copy|executable|group|shared_library|source_set| |
- static_library) |
+ --type=(action|copy|executable|group|loadable_module|shared_library| |
+ source_set|static_library) |
Restrict outputs to targets matching the given type. If |
unspecified, no filtering will be performed. |
@@ -1025,7 +1025,7 @@ |
### **Variables valid in a config definition**: |
``` |
Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, |
- defines, include_dirs, ldflags, lib_dirs, libs, |
+ asmflags, defines, include_dirs, ldflags, lib_dirs, libs, |
precompiled_header, precompiled_source |
``` |
@@ -1103,9 +1103,48 @@ |
See also "gn help buildargs" for an overview. |
+ The precise behavior of declare args is: |
+ |
+ 1. The declare_arg block executes. Any variables in the enclosing |
+ scope are available for reading. |
+ |
+ 2. At the end of executing the block, any variables set within that |
+ scope are saved globally as build arguments, with their current |
+ values being saved as the "default value" for that argument. |
+ |
+ 3. User-defined overrides are applied. Anything set in "gn args" |
+ now overrides any default values. The resulting set of variables |
+ is promoted to be readable from the following code in the file. |
+ |
+ This has some ramifications that may not be obvious: |
+ |
+ - You should not perform difficult work inside a declare_args block |
+ since this only sets a default value that may be discarded. In |
+ particular, don't use the result of exec_script() to set the |
+ default value. If you want to have a script-defined default, set |
+ some default "undefined" value like [], "", or -1, and after |
+ the declare_args block, call exec_script if the value is unset by |
+ the user. |
+ |
+ - Any code inside of the declare_args block will see the default |
+ values of previous variables defined in the block rather than |
+ the user-overridden value. This can be surprising because you will |
+ be used to seeing the overridden value. If you need to make the |
+ default value of one arg dependent on the possibly-overridden |
+ value of another, write two separate declare_args blocks: |
+ |
+ declare_args() { |
+ enable_foo = true |
+ } |
+ declare_args() { |
+ # Bar defaults to same user-overridden state as foo. |
+ enable_bar = enable_foo |
+ } |
+ |
``` |
-### **Example**: |
+### **Example** |
+ |
``` |
declare_args() { |
enable_teleporter = true |
@@ -1223,7 +1262,7 @@ |
``` |
Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, |
- defines, include_dirs, ldflags, lib_dirs, libs, |
+ asmflags, defines, include_dirs, ldflags, lib_dirs, libs, |
precompiled_header, precompiled_source |
Deps: data_deps, deps, public_deps |
Dependent configs: all_dependent_configs, public_configs |
@@ -1582,7 +1621,7 @@ |
specify configs that apply to their dependents. |
Depending on a group is exactly like depending directly on that |
- group's deps. |
+ group's deps. |
``` |
@@ -1645,6 +1684,32 @@ |
``` |
+## **loadable_module**: Declare a loadable module target. |
+ |
+``` |
+ This target type allows you to create an object file that is (and can |
+ only be) loaded and unloaded at runtime. |
+ |
+ A loadable module will be specified on the linker line for targets |
+ listing the loadable module in its "deps". If you don't want this |
+ (if you don't need to dynamically load the library at runtime), then |
+ you should use a "shared_library" target type instead. |
+ |
+``` |
+ |
+### **Variables** |
+ |
+``` |
+ Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, |
+ asmflags, defines, include_dirs, ldflags, lib_dirs, libs, |
+ precompiled_header, precompiled_source |
+ Deps: data_deps, deps, public_deps |
+ Dependent configs: all_dependent_configs, public_configs |
+ General: check_includes, configs, data, inputs, output_name, |
+ output_extension, public, sources, testonly, visibility |
+ |
+ |
+``` |
## **print**: Prints to the console. |
``` |
@@ -1988,7 +2053,8 @@ |
A shared library will be specified on the linker line for targets |
listing the shared library in its "deps". If you don't want this |
(say you dynamically load the library at runtime), then you should |
- depend on the shared library via "data_deps" instead. |
+ depend on the shared library via "data_deps" or, on Darwin |
+ platforms, use a "loadable_module" target type instead. |
``` |
@@ -1996,7 +2062,7 @@ |
``` |
Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, |
- defines, include_dirs, ldflags, lib_dirs, libs, |
+ asmflags, defines, include_dirs, ldflags, lib_dirs, libs, |
precompiled_header, precompiled_source |
Deps: data_deps, deps, public_deps |
Dependent configs: all_dependent_configs, public_configs |
@@ -2037,7 +2103,7 @@ |
``` |
Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, |
- defines, include_dirs, ldflags, lib_dirs, libs, |
+ asmflags, defines, include_dirs, ldflags, lib_dirs, libs, |
precompiled_header, precompiled_source |
Deps: data_deps, deps, public_deps |
Dependent configs: all_dependent_configs, public_configs |
@@ -2061,7 +2127,7 @@ |
``` |
Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, |
- defines, include_dirs, ldflags, lib_dirs, libs, |
+ asmflags, defines, include_dirs, ldflags, lib_dirs, libs, |
precompiled_header, precompiled_source |
Deps: data_deps, deps, public_deps |
Dependent configs: all_dependent_configs, public_configs |
@@ -2394,7 +2460,7 @@ |
depend_output [string with substitutions] |
Valid for: "solink" only (optional) |
- These two files specify whch of the outputs from the solink |
+ These two files specify which of the outputs from the solink |
tool should be used for linking and dependency tracking. These |
should match entries in the "outputs". If unspecified, the |
first item in the "outputs" array will be used for both. See |
@@ -2511,6 +2577,7 @@ |
along with a set of compiler-specific flags. The following expansions |
are available: |
+ {{asmflags}} |
{{cflags}} |
{{cflags_c}} |
{{cflags_cc}} |
@@ -3217,8 +3284,11 @@ |
and Objective C++ compilers. |
To target one of these variants individually, use "cflags_c", |
- "cflags_cc", "cflags_objc", and "cflags_objcc", respectively. |
- These variant-specific versions will be appended to the "cflags". |
+ "cflags_cc", "cflags_objc", and "cflags_objcc", |
+ respectively. |
+ |
+ These variant-specific versions of cflags* will be appended to the |
+ "cflags". |
``` |
@@ -3250,8 +3320,11 @@ |
and Objective C++ compilers. |
To target one of these variants individually, use "cflags_c", |
- "cflags_cc", "cflags_objc", and "cflags_objcc", respectively. |
- These variant-specific versions will be appended to the "cflags". |
+ "cflags_cc", "cflags_objc", and "cflags_objcc", |
+ respectively. |
+ |
+ These variant-specific versions of cflags* will be appended to the |
+ "cflags". |
``` |
@@ -3283,8 +3356,11 @@ |
and Objective C++ compilers. |
To target one of these variants individually, use "cflags_c", |
- "cflags_cc", "cflags_objc", and "cflags_objcc", respectively. |
- These variant-specific versions will be appended to the "cflags". |
+ "cflags_cc", "cflags_objc", and "cflags_objcc", |
+ respectively. |
+ |
+ These variant-specific versions of cflags* will be appended to the |
+ "cflags". |
``` |
@@ -3316,8 +3392,11 @@ |
and Objective C++ compilers. |
To target one of these variants individually, use "cflags_c", |
- "cflags_cc", "cflags_objc", and "cflags_objcc", respectively. |
- These variant-specific versions will be appended to the "cflags". |
+ "cflags_cc", "cflags_objc", and "cflags_objcc", |
+ respectively. |
+ |
+ These variant-specific versions of cflags* will be appended to the |
+ "cflags". |
``` |
@@ -3349,8 +3428,11 @@ |
and Objective C++ compilers. |
To target one of these variants individually, use "cflags_c", |
- "cflags_cc", "cflags_objc", and "cflags_objcc", respectively. |
- These variant-specific versions will be appended to the "cflags". |
+ "cflags_cc", "cflags_objc", and "cflags_objcc", |
+ respectively. |
+ |
+ These variant-specific versions of cflags* will be appended to the |
+ "cflags". |
``` |
@@ -3718,8 +3800,6 @@ |
``` |
- |
-``` |
## **include_dirs**: Additional include directories. |
``` |
@@ -4796,8 +4876,8 @@ |
To a first approximation, the runtime dependencies of a target are |
the set of "data" files, data directories, and the shared libraries |
- from all transitive dependencies. Executables and shared libraries are |
- considered runtime dependencies of themselves. |
+ from all transitive dependencies. Executables, shared libraries, and |
+ loadable modules are considered runtime dependencies of themselves. |
``` |