Default AddressSanitizer options (before the ASAN_OPTIONS
environment variable is read at runtime). This can be set as a build argument to affect most “asan” variants in $variants (which see), or overridden in $toolchain_args in one of those variants. Note that setting this nonempty may conflict with programs that define their own __asan_default_options
C function.
Current value (from the default): ""
From //public/gn/config/instrumentation/BUILD.gn:15
Controls which asserts are enabled.
ZX_ASSERT
is always enabled.
assert()
and ZX_DEBUG_ASSERT
.ZX_DEBUG_ASSERT
. Standard C assert()
remains enabled.Current value (from the default): 2
From //public/gn/config/levels.gni:13
Directory to populate with xx/yyy
and xx/yyy.debug
links to ELF files. For every ELF binary built, with build ID xxyyy
(lowercase hexadecimal of any length), xx/yyy
is a hard link to the stripped file and xx/yyy.debug
is a hard link to the unstripped file. Symbolization tools and debuggers find symbolic information this way.
Current value (from the default): "/b/s/w/ir/k/root_build_dir.zircon/.build-id"
From //public/gn/toolchain/c_toolchain.gni:18
Build ID algorithm to use for Fuchsia-target code. This does not apply to host or guest code. The value is the argument to the linker‘s --build-id=...
switch. If left empty (the default), the linker’s default format is used.
Current value (from the default): ""
From //public/gn/config/BUILD.gn:24
Directory where the Clang toolchain binaries (“clang”, “llvm-nm”, etc.) are found. If this is "", then the behavior depends on $use_prebuilt_clang. This toolchain is expected to support both Fuchsia targets and the host.
Current value (from the default): ""
From //public/gn/toolchain/clang.gni:16
Clang crash reports directory path. Use empty path to disable altogether.
Current value (from the default): "/b/s/w/ir/k/root_build_dir.zircon/clang-crashreports"
From //public/gn/config/BUILD.gn:12
Current value (from the default): ""
Current value (from the default): ""
Defines the //:default
target: what ninja
with no arguments does. TODO(BLD-353): This must be set by the controlling Fuchsia GN build.
Current value for target_cpu =
: ["//:legacy-x64", "//:legacy_host_targets-linux-x64", "//:legacy_unification-x64", "//tools:all-hosts"]
From /b/s/w/ir/k/root_build_dir.zircon/args.gn:5
Overridden from the default: false
From //BUILD.gn:17
Log levels to be printed when logs are enabled. Default is ERROR, WARNING, & INFO. Refer to zircon/system/public/zircon/syscalls/log.h for levels.
Current value (from the default): "0x7"
From //system/dev/lib/fake_ddk/BUILD.gn:11
Enable debug output in the ACPI library (used by the ACPI bus driver).
Current value (from the default): false
From //third_party/lib/acpica/BUILD.gn:9
Enable printing of in driver logs in unittests.
Current value (from the default): true
From //system/dev/lib/fake_ddk/BUILD.gn:7
Enable kernel lock dependency tracking.
Current value (from the default): false
From //kernel/params.gni:28
Enable kernel lock dependency tracking tests. By default this is enabled when tracking is enabled, but can also be eanbled independently to assess whether the tests build and fail correctly when lockdep is disabled.
Current value (from the default): false
From //kernel/params.gni:67
Enable userspace PCI and disable kernel PCI.
Current value (from the default): false
From //kernel/params.gni:40
List of clauses to apply other GN build arguments to specific compilation environments. Each clause specifies matching criteria and arguments to set in such environments. Each matching clause is applied in order; each argument it sets overrides any setting of that same argument in an earlier matching clause or in the environment() declaration. Note that if the variant selected for a target via variants
(which see) has a toolchain_args
setting, each argument therein will override the settings here in environment_args
clauses (within that variant toolchain).
Each clause is a scope. The several parameters listed below are the matching criteria. All other parameters in a clause are the build arguments set when that clause matches. Note that these form a subset of the matching criteria supported by variants
selectors, except for tags
and exclude_tags
. The semantics of each criterion are exactly the same here and there.
For example:
environment_args = [ { kernel = true assert_level = 0 } ]
sets assert_level = 0
everywhere where is_kernel == true
, while:
environment_args = [ { kernel = false assert_level = 0 }, { kernel = true assert_level = 1 }, { environment = [ "efi" ] assert_level = 2 opt_level = 0 }, ]
sets assert_level = 0
everywhere where is_kernel == false
, sets assert_level = 1
most places where is_kernel == true
, but sets assert_level = 2
and opt_level = 0
in the “efi” environment (where is_kernel == true
also holds, but the later clause overrides the preceding assert_level = 1
).
Clause scope parameters
cpu
os
host
kernel
environment
.
if it has one. For example, “host” would match both “host” and “host.fuzz”.tags
tags
parameter to environment() for that environment to match.exclude_tags
tags
parameter to environment() for that environment to match.Current value (from the default): []
From //public/gn/toolchain/environment.gni:108
If true, excludes syscalls with the [testonly] attribute.
Current value (from the default): false
From //vdso/vdso.gni:7
Current value (from the default): false
From //system/ulib/fidl/BUILD.gn:6
Current value (from the default): false
From //tools/fidl/BUILD.gn:7
Current value (from the default): false
From //tools/fidl/BUILD.gn:6
Directory where the GCC toolchain binaries (“gcc”, “nm”, etc.) are found. If this is "", then the behavior depends on $use_prebuilt_gcc. This directory is expected to contain aarch64-elf-*
and x86_64-elf-*
tools used to build for the Fuchsia targets. This directory will not be used for host tools; if GCC is selected for host builds, only the system-installed tools found by the shell via PATH
will be used.
Current value (from the default): ""
From //public/gn/toolchain/gcc.gni:19
Directory containing the Goma source code. This can be a GN source-absolute path (“//...”) or a system absolute path.
Current value for target_cpu =
: "/b/s/w/ir/k/prebuilt/third_party/goma/linux-x64"
From /b/s/w/ir/k/root_build_dir.zircon/args.gn:12
Overridden from the default: "//prebuilt/third_party/goma/linux-x64"
From //public/gn/toolchain/goma.gni:17
Current value (from the default): "x64"
Current value (from the default): "linux"
Current value (from the default): "0xffffffff00000000"
From //kernel/params.gni:22
Enables various kernel debugging and diagnostic features. Valid values are between 0-3. The higher the value, the more that are enabled. A value of 0 disables all of them.
TODO(41790): This value is derived from assert_level. Decouple the two and set kernel_debug_level independently.
Current value (from the default): 2
From //kernel/params.gni:52
Controls the verbosity of kernel dprintf messages. The higher the value, the more dprintf messages emitted. Valid values are 0-2 (inclusive): 0 - CRITCAL / ALWAYS 1 - INFO 2 - SPEW
Current value (from the default): 2
From //kernel/params.gni:59
Extra macro definitions for kernel code, e.g. “DISABLE_KASLR”, “ENABLE_KERNEL_LL_DEBUG”.
Current value (from the default): []
From //kernel/params.gni:44
Version string embedded in the kernel for zx_system_get_version_string
. If set to the default "", a string is generated based on the fuchsia.git revision of the checkout.
Current value (from the default): ""
From //kernel/lib/version/BUILD.gn:11
Current value (from the default): "scudo"
From //third_party/ulib/musl/BUILD.gn:6
Current value (from the default): 2
From //public/gn/config/levels.gni:19
“$output_breakpad_syms” gates whether or not breakpad symbols are produced.
Current value (from the default): false
From //public/gn/config/standard.gni:9
The level of detail for scheduler traces when enabled. Values greater than zero add increasing details at the cost of increased trace buffer use.
0 = Default kernel:sched tracing. 1 = Adds duration traces for key scheduler operations. 2 = Adds flow events from wakeup to running state. 3 = Adds detailed internal durations and probes.
Current value (from the default): 0
From //kernel/params.gni:37
Current value (from the default): 16
From //kernel/params.gni:14
Current value (from the default): 2
From //public/gn/config/levels.gni:24
The --sysroot
directory for host compilations. This can be a string, which only applies to $host_os-$host_cpu. Or it can be a list of scopes containing cpu
, os
, and sysroot
. The empty list (or empty string) means don't use --sysroot
at all.
Current value (from the default):
[{ cpu = "arm64" os = "linux" sysroot = "//../prebuilt/third_party/sysroot/linux" }, { cpu = "x64" os = "linux" sysroot = "//../prebuilt/third_party/sysroot/linux" }]
From //public/gn/config/BUILD.gn:18
Current value (from the default): ""
Current value (from the default): ""
ThinLTO cache directory path.
Current value (from the default): "host-arm64-linux-lto/thinlto-cache"
From //public/gn/config/lto/BUILD.gn:22
Number of parallel ThinLTO jobs.
Current value (from the default): 8
From //public/gn/config/lto/BUILD.gn:19
This must never be set as a build argument. It exists only to be set via c_toolchain(). See environment() for more information.
Current value (from the default):
{ configs = [] environment = "stub" globals = { } label = "//public/gn/toolchain:stub" }
From //public/gn/BUILDCONFIG.gn:24
Default UndefinedBehaviorSanitizer options (before the UBSAN_OPTIONS
environment variable is read at runtime). This can be set as a build argument to affect most “ubsan” variants in $variants (which see), or overridden in $toolchain_args in one of those variants. Note that setting this nonempty may conflict with programs that define their own __ubsan_default_options
C function.
Current value (from the default): "print_stacktrace=1:halt_on_error=1"
From //public/gn/config/instrumentation/BUILD.gn:29
Set to true to enable compiling with ccache.
Current value for target_cpu =
: false
From /b/s/w/ir/k/root_build_dir.zircon/args.gn:13
Overridden from the default: false
From //public/gn/toolchain/ccache.gni:9
Set to true to enable distributed compilation using Goma.
Current value for target_cpu =
: false
From /b/s/w/ir/k/root_build_dir.zircon/args.gn:14
Overridden from the default: false
From //public/gn/toolchain/goma.gni:13
If $clang_tool_dir is "", then this controls how the Clang toolchain binaries are found. If true, then the standard prebuilt is used. Otherwise the tools are just expected to be found by the shell via PATH
.
Current value (from the default): true
From //public/gn/toolchain/clang.gni:11
If $gcc_tool_dir is "", then this controls how the GCC toolchain binaries are found. If true, the standard prebuilt is used. If false, the tools are just expected to be found in PATH.
Current value (from the default): true
From //public/gn/toolchain/gcc.gni:11
List of “selectors” to request variant builds of certain targets. Each selector specifies matching criteria and a chosen variant. The first selector in the list to match a given target determines which variant is used for that target.
The $default_variants list is appended to the list set here. So if no selector set in $variants matches (e.g. if the list is empty, as is the default), then the first match in $default_variants chooses the variant.
Each selector is either a string or a scope. A selector that's a string is a shorthand that gets expanded to a full selector (a scope); the full selector form is described below.
If a string selector contains a slash, then it's “shorthand/filename”. This is like the plain “shorthand” selector, but further constrained to apply only to a binary whose output_name
exactly matches “filename”.
The “shorthand” string (a whole string selector or the part before slash) is first looked up in $variant_shorthands, which see. If it doesn‘t match a name defined there, then it must be the name of a variant. In that case, it’s equivalent to { variant = "..." host = false }
, meaning it applies to every binary not built to be a host tool.
A full selector is a scope with the following fields. All the fields other than .variant
are matching criteria. A selector matches if all of its matching criteria match. Hence, a selector with no criteria defined always matches and is referred to as a “catch-all”. The $default_variants list ends with a catch-all, so each target always chooses some variant.
Selector scope parameters
variant
cpu
os
host
kernel
environment
.
if it has one. For example, “host” would match both “host” and “host.fuzz”.target_type
label
get_label_info(..., "label_no_toolchain")
) is one in the list.dir
get_label_info(..., "dir")
) is one in the list.name
get_label_info(..., "name")
) is one in the list.output_name
output_name
of the target is one in the list. Note output_name
defaults to target_name
, and does not include prefixes or suffixes like “.so” or “.exe”.An element with a scope for .variant
defines a new variant. Each variant name used in a selector must be defined exactly once. Other selectors can refer to the same variant by using the name string in the .variant
field. Definitions in $variants take precedence over the same name defined in $standard_variants, but it would probably cause confusion to use the name of a standard variant with a non-standard definition.
Variant scope parameters
name
[a-z0-9_-]
is a good idea).globals
is_gcc = true
in $globals. This should be used sparingly and is safest when restricted to variables that $zx/public/gn/BUILDCONFIG.gn sets defaults for.toolchain_args
gn args
. Do not define variables in declare_args() just for the purpose of setting them here, i.e. if they should not also be available to set via gn args
to affect other variants that don't override them here. Instead, use either $globals (above) or $toolchain_vars (below).toolchain_vars
configs
{add=["..."]}
. The string is the GN label (without toolchain) for a config() target. A scope element can be more selective, as described below.shlib
current_toolchain == toolchain.shlib
(if true) or current_toolchain != toolchain.shlib
(if false). That is, it applies only in (not ni) the companion toolchain used to compile shared_library() and loadable_module() (including driver()) code.types
target_type
in a selector, described above).add
remove
configs -= remove
so it has the normal GN semantics that it's an error if any element in the $remove list is not present in the $configs list beforehand.implicit_deps
tags
exclude_variant_tags = [ "useronly" ]
. Then $variants selectors that choose variants that are incompatible with the kernel are automatically ignored in the kernel toolchains, so there’s no need to add kernel = false
to every such selector.bases
name
and bases
are combined with the fields defined explicitly for the new variant. The fields of list type are just concatenated in order (each $bases variant in the order listed, then this variant). The fields of scope type are merged in the same order, with a variant later in the list overriding values set earlier (so this variant's values override all the bases). There is only one level of inheritance: a base variant listed in $bases cannot have $bases itself.Current value for target_cpu =
: []
From /b/s/w/ir/k/root_build_dir.zircon/args.gn:15
Overridden from the default: []
From //public/gn/toolchain/variants.gni:222
This can be either “lz4f” or “zstd”, optionally followed by “.LEVEL” where LEVEL
can be an integer or “max”. It can also be just “LEVEL” to to use the default algorithm with a non-default setting.
The default level for each algorithm is tuned to balance compression speed with compression ratio. Higher levels make image builds slower. So using the default during rapid development (quick builds, pretty good compression) and "max' for production builds (slow builds, best compression available) probably makes sense.
Current value for target_cpu =
: "zstd"
From /b/s/w/ir/k/root_build_dir.zircon/args.gn:16
Overridden from the default: "zstd"
From //public/gn/zbi.gni:19
“$zx/” is the prefix for GN “source-absolute” paths in the Zircon build. When Zircon is built standalone, the Zircon repository is the root of the build (where .gn
is found) so “$zx/” becomes “//”. When Zircon is part of a larger unified build, there is a higher-level .gn
file that uses default_args
to set “$zx/” to “//zircon/”.
Current value (from the default): "/"
From //public/gn/BUILDCONFIG.gn:13
“$zx_build/” is the prefix for GN “source-absolute” paths in the Zircon build for build infrastructure.
Current value (from the default): "/"
From //public/gn/BUILDCONFIG.gn:17