Index: blimp/docs/args.md |
diff --git a/blimp/docs/args.md b/blimp/docs/args.md |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3ab76c0facd511fd0bbe275c5b3c791712033763 |
--- /dev/null |
+++ b/blimp/docs/args.md |
@@ -0,0 +1,77 @@ |
+# Build Arguments |
nyquist
2016/03/08 22:42:35
Should this page be linked to from somewhere?
Jess
2016/03/09 00:39:32
Done.
|
+ |
+[Build arguments](../../tools/gn/docs/language.md#Build-arguments) |
+can be passed via the command line or an args.gn file to control the build. |
nyquist
2016/03/08 22:42:35
Nit: could you do `args.gn`?
Jess
2016/03/09 00:39:32
Done.
|
+ |
+This document addresses the creation of new build arguments for Blimp. See |
+[building](build.md) for developer GN args setup. |
+ |
+## Best Practices |
+ |
+### Scope |
+ |
+Build arguments should be scoped to a unit of behavior, e.g. enabling a feature. |
+There are historic examples in core code that do not conform (e.g. target_os), |
+but the build team recommends this convention for all new arguments. |
+ |
+Typically an argument would be declared in an imported file to share it with |
+the subset of the build that could make use of it. |
+ |
+### Type |
+ |
+Arguments support all the |
+[GN language types](../../tools/gn/docs/language.md#Language). |
+ |
+In the vast majority of cases boolean is the preferred type, since most |
+arguments are enabling or disabling features or includes. |
+ |
+String are typically used for filepaths. They are also used for enumerated |
nyquist
2016/03/08 22:42:35
Nit: Could you add ` around String to make it clea
Jess
2016/03/09 00:39:32
Done.
|
+options though integers and even sets of booleans are often used instead. |
+ |
+### Naming conventions |
+ |
+While there are no hard and fast rules around argument naming there are |
+many common conventions. If you ever want to see the current list of argument |
+names and default values for your current checkout use |
+`gn args out/Debug --list --short`. |
+ |
+`use_foo` - indicates dependencies or major codepaths to include (e.g. |
+`use_open_ssl`, `use_ozone`, `use_cups`) |
+ |
+`enable_foo` - indicates feature or tools to be enabled (e.g. |
+`enable_google_now`, `enable_nacl`, `enable_remoting`, `enable_pdf`) |
+ |
+`disable_foo` - _NOT_ recommended, use `enable_foo` instead with swapped default |
+value |
+ |
+`is_foo` - usually a global state descriptor (e.g. `is_chrome_branded`, |
+`is_desktop_linux`); poor choice for non-globals |
+ |
+`foo_use_bar` - prefixes can be used to indicate a limited scope for an argument |
+(e.g. `rtc_use_h264`, `v8_use_snapshot`) |
+ |
+## Declaring Build Args |
+ |
+You declare which arguments you accept and specify default values via |
+`declare_args`. See `gn help buildargs` for an overview of how this works. |
+See `gn help declare_args` for specifics on declaring them. |
+ |
+It is an error to declare a given argument more than once in a given scope, so |
+care should be used in scoping and naming arguments. |
+ |
+## Build Args for Behavior |
+ |
+While build args directly affect build behavior and values they can not be |
+directly referenced in code. This can be handled with an entry in the |
+[defines](../../tools/gn/docs/reference.md#defines_C-preprocessor-defines) |
+set that can then be used in code. |
+ |
+## Updating Args Templates |
+ |
+Blimp has default argument templates for the |
+[build/args/blimp_client.gn](../../build/args/blimp_client.gn) and |
nyquist
2016/03/08 22:42:35
Could you make these paths surrounded by quotes?
L
Jess
2016/03/09 00:39:32
Done.
|
+[build/args/blimp_engine.gn](../../build/args/blimp_engine.gn). |
nyquist
2016/03/08 22:42:35
Should we also describe here how to import them in
Jess
2016/03/09 00:39:32
Done.
|
+ |
+If you create a new argument where the default behavior for the rest of chrome |
+does not match the default behavior of typical blimp build, |
+you should update the respective blimp argument template(s). |