OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "tools/gn/args.h" | 5 #include "tools/gn/args.h" |
6 | 6 |
7 #include "base/sys_info.h" | 7 #include "base/sys_info.h" |
8 #include "build/build_config.h" | 8 #include "build/build_config.h" |
9 #include "tools/gn/variables.h" | 9 #include "tools/gn/variables.h" |
10 | 10 |
11 const char kBuildArgs_Help[] = | 11 const char kBuildArgs_Help[] = |
12 R"(Build Arguments Overview | 12 R"(Build Arguments Overview |
13 | 13 |
14 Build arguments are variables passed in from outside of the build | 14 Build arguments are variables passed in from outside of the build that build |
15 that build files can query to determine how the build works. | 15 files can query to determine how the build works. |
16 | 16 |
17 How build arguments are set | 17 How build arguments are set |
18 | 18 |
19 First, system default arguments are set based on the current system. | 19 First, system default arguments are set based on the current system. The |
20 The built-in arguments are: | 20 built-in arguments are: |
21 - host_cpu | 21 - host_cpu |
22 - host_os | 22 - host_os |
23 - current_cpu | 23 - current_cpu |
24 - current_os | 24 - current_os |
25 - target_cpu | 25 - target_cpu |
26 - target_os | 26 - target_os |
27 | 27 |
28 If specified, arguments from the --args command line flag are used. If | 28 If specified, arguments from the --args command line flag are used. If that |
29 that flag is not specified, args from previous builds in the build | 29 flag is not specified, args from previous builds in the build directory will |
30 directory will be used (this is in the file args.gn in the build | 30 be used (this is in the file args.gn in the build directory). |
31 directory). | |
32 | 31 |
33 Last, for targets being compiled with a non-default toolchain, the | 32 Last, for targets being compiled with a non-default toolchain, the toolchain |
34 toolchain overrides are applied. These are specified in the | 33 overrides are applied. These are specified in the toolchain_args section of a |
35 toolchain_args section of a toolchain definition. The use-case for | 34 toolchain definition. The use-case for this is that a toolchain may be |
36 this is that a toolchain may be building code for a different | 35 building code for a different platform, and that it may want to always |
37 platform, and that it may want to always specify Posix, for example. | 36 specify Posix, for example. See "gn help toolchain" for more. |
38 See "gn help toolchain" for more. | |
39 | 37 |
40 If you specify an override for a build argument that never appears in | 38 If you specify an override for a build argument that never appears in a |
41 a "declare_args" call, a nonfatal error will be displayed. | 39 "declare_args" call, a nonfatal error will be displayed. |
42 | 40 |
43 Examples | 41 Examples |
44 | 42 |
45 gn args out/FooBar | 43 gn args out/FooBar |
46 Create the directory out/FooBar and open an editor. You would type | 44 Create the directory out/FooBar and open an editor. You would type |
47 something like this into that file: | 45 something like this into that file: |
48 enable_doom_melon=false | 46 enable_doom_melon=false |
49 os="android" | 47 os="android" |
50 | 48 |
51 gn gen out/FooBar --args="enable_doom_melon=true os=\"android\"" | 49 gn gen out/FooBar --args="enable_doom_melon=true os=\"android\"" |
52 This will overwrite the build directory with the given arguments. | 50 This will overwrite the build directory with the given arguments. (Note |
53 (Note that the quotes inside the args command will usually need to | 51 that the quotes inside the args command will usually need to be escaped |
54 be escaped for your shell to pass through strings values.) | 52 for your shell to pass through strings values.) |
55 | 53 |
56 How build arguments are used | 54 How build arguments are used |
57 | 55 |
58 If you want to use an argument, you use declare_args() and specify | 56 If you want to use an argument, you use declare_args() and specify default |
59 default values. These default values will apply if none of the steps | 57 values. These default values will apply if none of the steps listed in the |
60 listed in the "How build arguments are set" section above apply to | 58 "How build arguments are set" section above apply to the given argument, but |
61 the given argument, but the defaults will not override any of these. | 59 the defaults will not override any of these. |
62 | 60 |
63 Often, the root build config file will declare global arguments that | 61 Often, the root build config file will declare global arguments that will be |
64 will be passed to all buildfiles. Individual build files can also | 62 passed to all buildfiles. Individual build files can also specify arguments |
65 specify arguments that apply only to those files. It is also useful | 63 that apply only to those files. It is also useful to specify build args in an |
66 to specify build args in an "import"-ed file if you want such | 64 "import"-ed file if you want such arguments to apply to multiple buildfiles. |
67 arguments to apply to multiple buildfiles. | |
68 )"; | 65 )"; |
69 | 66 |
70 namespace { | 67 namespace { |
71 | 68 |
72 // Removes all entries in |overrides| that are in |declared_overrides|. | 69 // Removes all entries in |overrides| that are in |declared_overrides|. |
73 void RemoveDeclaredOverrides(const Scope::KeyValueMap& declared_arguments, | 70 void RemoveDeclaredOverrides(const Scope::KeyValueMap& declared_arguments, |
74 Scope::KeyValueMap* overrides) { | 71 Scope::KeyValueMap* overrides) { |
75 for (Scope::KeyValueMap::iterator override = overrides->begin(); | 72 for (Scope::KeyValueMap::iterator override = overrides->begin(); |
76 override != overrides->end();) { | 73 override != overrides->end();) { |
77 if (declared_arguments.find(override->first) == declared_arguments.end()) | 74 if (declared_arguments.find(override->first) == declared_arguments.end()) |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
355 Scope* scope) const { | 352 Scope* scope) const { |
356 lock_.AssertAcquired(); | 353 lock_.AssertAcquired(); |
357 return declared_arguments_per_toolchain_[scope->settings()]; | 354 return declared_arguments_per_toolchain_[scope->settings()]; |
358 } | 355 } |
359 | 356 |
360 Scope::KeyValueMap& Args::OverridesForToolchainLocked( | 357 Scope::KeyValueMap& Args::OverridesForToolchainLocked( |
361 Scope* scope) const { | 358 Scope* scope) const { |
362 lock_.AssertAcquired(); | 359 lock_.AssertAcquired(); |
363 return toolchain_overrides_[scope->settings()]; | 360 return toolchain_overrides_[scope->settings()]; |
364 } | 361 } |
OLD | NEW |