Clarify and update GN build flags docs.

Some of the documentation was unclear and out-of-date, and also didn't really list what to do instead.

Review URL: https://codereview.chromium.org/1125033004

Cr-Original-Commit-Position: refs/heads/master@{#330761}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: 8a05b7f011a620b2bb1046acacb4a5ac0f667603
This commit is contained in:
brettw 2015-05-20 10:32:06 -07:00 коммит произвёл Commit bot
Родитель 259d7019c3
Коммит 5a39ef9995
4 изменённых файлов: 75 добавлений и 25 удалений

Просмотреть файл

@ -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.
}
# =============================================================================

Просмотреть файл

@ -6,6 +6,10 @@
#
# TODO(brettw) this should probably be moved to src/crypto or somewhere, and
# the global build dependency on it should be removed.
#
# PLEASE TRY TO AVOID ADDING FLAGS TO THIS FILE in cases where grit isn't
# required. See the declare_args block of BUILDCONFIG.gn for advice on how
# to set up feature flags.
declare_args() {
# Use OpenSSL instead of NSS. This is used for Android, Mac, NaCl untrusted

Просмотреть файл

@ -2,14 +2,17 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# This file contains UI-related build flags. It should theoretically be in the
# src/ui directory and only things that depend on the ui module should get the
# definitions.
# This file contains Chrome-feature-related build flags (see ui.gni for
# UI-related ones). These should theoretically be moved to the build files of
# the features themselves.
#
# However, today we have many "bad" dependencies on some of these flags from,
# e.g. base, so they need to be global.
# e.g. base, so they need to be global to match the GYP configuration. Also,
# anything that needs a grit define must be in either this file or ui.gni.
#
# See also build/config/ui.gni
# PLEASE TRY TO AVOID ADDING FLAGS TO THIS FILE in cases where grit isn't
# required. See the declare_args block of BUILDCONFIG.gn for advice on how
# to set up feature flags.
import("//build/config/chrome_build.gni")
if (is_android) {

Просмотреть файл

@ -2,14 +2,17 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# This file contains UI-related build flags. It should theoretically be in the
# src/ui directory and only things that depend on the ui module should get the
# definitions.
# This file contains UI-related build flags (see features.gni for Chrome
# feature-related ones). These should theoretically be moved to the ui
# directory.
#
# However, today we have many "bad" dependencies on some of these flags from,
# e.g. base, so they need to be global.
# e.g. base, so they need to be global to match the GYP configuration. Also,
# anything that needs a grit define must be in either this file or features.gni.
#
# See also build/config/features.gni
# PLEASE TRY TO AVOID ADDING FLAGS TO THIS FILE in cases where grit isn't
# required. See the declare_args block of BUILDCONFIG.gn for advice on how
# to set up feature flags.
declare_args() {
# Indicates if Ash is enabled. Ash is the Aura Shell which provides a