Index: build/config/BUILDCONFIG.gn |
diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn |
index ee32088dfcdee63f409cff05760d4a8261d92680..a78f994f124352bb86a1f60153ceb6292ba92898 100644 |
--- a/build/config/BUILDCONFIG.gn |
+++ b/build/config/BUILDCONFIG.gn |
@@ -2,21 +2,6 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
-# ============================================================================= |
-# BUILD FLAGS |
-# ============================================================================= |
-# |
-# This block lists input arguments to the build, along with their default |
-# values. GN requires listing them explicitly so it can validate input and have |
-# a central place to manage the build flags. |
-# |
-# If a value is specified on the command line, it will overwrite the defaults |
-# given here, otherwise the default will be injected into the root scope. |
-# |
-# KEEP IN ALPHABETICAL ORDER and write a good description for everything. |
-# Use "is_*" names for intrinsic platform descriptions and build modes, and |
-# "use_*" names for optional features libraries, and configurations. |
- |
if (target_os == "") { |
target_os = host_os |
} |
@@ -40,6 +25,59 @@ if (current_os == "") { |
current_os = target_os |
} |
+# ============================================================================= |
+# BUILD FLAGS |
+# ============================================================================= |
+# |
+# This block lists input arguments to the build, along with their default |
+# values. |
+# |
+# If a value is specified on the command line, it will overwrite the defaults |
+# given in a declare_args block, otherwise the default will be used. |
+# |
+# YOU SHOULD ALMOST NEVER NEED TO ADD FLAGS TO THIS FILE. GN allows any file in |
+# the build to declare build flags. If you need a flag for a single component, |
+# you can just declare it in the corresponding BUILD.gn file. If you need a |
+# flag in multiple components, there are a few options: |
+# |
+# - If your feature is a single target, say //components/foo, and the targets |
+# depending on foo need to have some define set if foo is enabled: (1) Write |
+# a declare_args block in foo's BUILD.gn file listing your enable_foo build |
+# flag. (2) Write a config in that file listing the define, and list that |
+# config in foo's public_configs. This will propagate that define to all the |
+# targets depending on foo. (3) When foo is not enabled, just make it expand |
+# to an empty group (or whatever's appropriate for the "off" state of your |
+# feature. |
+# |
+# - If a semi-random set of targets need to know about a define: (1) In the |
+# lowest level of the build that knows about this feature, add a declare_args |
+# block in the build file for your enable flag. (2) Write a config that adds |
+# a define conditionally based on that build flags. (3) Manually add that |
+# config to the "configs" applying to the targets that need the define. |
+# |
+# - If a semi-random set of targets need to know about the build flag (to do |
+# file inclusion or exclusion, more than just defines): (1) Write a .gni file |
+# in the lowest-level directory that knows about the feature. (2) Put the |
+# declare_args block with your build flag in that .gni file. (3) Import that |
+# .gni file from the BUILD.gn files that need the flag. |
+# |
+# Other advice: |
+# |
+# - Use boolean values when possible. If you need a default value that expands |
+# to some complex thing in the default case (like the location of the |
+# compiler which would be computed by a script), use a default value of -1 or |
+# the empty string. Outside of the declare_args block, conditionally expand |
+# the default value as necessary. |
+# |
+# - Use a name like "use_foo" or "is_foo" (whatever is more appropriate for |
+# your feature) rather than just "foo". |
+# |
+# - Write good comments directly above the declaration with no blank line. |
+# These comments will appear as documentation in "gn args --list". |
+# |
+# - Don't call exec_script inside declare_args. This will execute the script |
+# even if the value is overridden, which is wasteful. See first bullet. |
+ |
declare_args() { |
# How many symbols to include in the build. This affects the performance of |
# the build since the symbols are large and dealing with them is slow. |
@@ -93,6 +131,8 @@ declare_args() { |
# toolchains. |
cros_use_custom_toolchain = false |
} |
+ |
+ # DON'T ADD MORE FLAGS HERE. Read the comment above. |
} |
# ============================================================================= |