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. This can be a list of strings or a single string.
Note that even if this is empty, programs in this build cannot define their own __asan_default_options
C function. Instead, they can use a sanitizer_extra_options() target in their deps
and then any options injected that way can override that option's setting in this list.
Current value for target_cpu =
: ["detect_stack_use_after_return=1"]
From /b/s/w/ir/x/w/out/not-default.zircon/args.gn:4
Overridden from the default: ["detect_stack_use_after_return=1"]
From //public/gn/config/instrumentation/sanitizer_default_options.gni:16
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/x/w/out/not-default.zircon/.build-id"
From //public/gn/toolchain/c_toolchain.gni:20
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.zircon.gn:27
Embed LLVM bitcode as .llvmbc section in ELF files. This is intended primarily for external tools that use bitcode for analysis.
Current value (from the default): false
From //public/gn/toolchain/clang.gni:21
Controls whether to use the ML inliner in Clang to reduce size. Note that the option only takes effect when optimize
is set to "size"
.
Current value (from the default): false
From //public/gn/config/levels.gni:45
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:17
Clang crash reports directory path. Use empty path to disable altogether.
Current value (from the default): "/b/s/w/ir/x/w/out/not-default.zircon/clang-crashreports"
From //public/gn/config/BUILD.zircon.gn:15
Current value (from the default): ""
Current value (from the default): ""
none
means no debugging informationbacktrace
means sufficient debugging information to symbolize backtracesdebug
means debugging information suited for debuggingCurrent value (from the default): "debug"
From //public/gn/config/levels.gni:57
Defines the //:default
target: what ninja
with no arguments does. TODO(fxbug.dev/3156): This must be set by the controlling Fuchsia GN build.
Current value for target_cpu =
: ["//:legacy_unification-x64"]
From /b/s/w/ir/x/w/out/not-default.zircon/args.gn:13
Overridden from the default: false
From //BUILD.zircon.gn:17
Disable kernel PCI driver support. A counterpart of the the build flag platform_enable_user_pci in //src/devices/bus/drivers/pci/pci.gni.
Current value for target_cpu =
: false
From /b/s/w/ir/x/w/out/not-default.zircon/args.gn:14
Overridden from the default: false
From //kernel/params.gni:58
Enable kernel lock dependency tracking.
Current value (from the default): false
From //kernel/params.gni:34
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:85
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 optimize = "none" }, ]
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 optimize = "none"
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
NOTE: This is for experimentation only and should not normally be changed. Set the version of the C++ standard to compile for, 17 or 20.
Current value for target_cpu =
: 17
From /b/s/w/ir/x/w/out/not-default.zircon/args.gn:15
Overridden from the default: 17
From //public/gn/config/experimental_cxx_version.gni:8
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/x/w/prebuilt/third_party/goma/linux-x64"
From /b/s/w/ir/x/w/out/not-default.zircon/args.gn:16
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:28
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(fxbug.dev/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:70
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:77
Extra macro definitions for kernel code, e.g. “DISABLE_KASLR”, “ENABLE_KERNEL_LL_DEBUG”.
Current value (from the default): []
From //kernel/params.gni:62
By default the kernel version string is generated based on the full git revision found by git rev-parse HEAD
in this checkout directory.
Current value (from the default): "//.."
From //kernel/lib/version/BUILD.zircon.gn:20
If this is true, then the kernel version string generated based on kernel_version_git_checkout
also adds a “-dirty” suffix if any files in the checkout are modified from what's committed in git.
Current value (from the default): true
From //kernel/lib/version/BUILD.zircon.gn:25
Version string embedded in the kernel for zx_system_get_version_string
. If set to the default "", a string is generated based on the kernel_version_git_checkout
and kernel_version_git_dirty_check
settings, which see.
Current value (from the default): ""
From //kernel/lib/version/BUILD.zircon.gn:16
Default LeakSanitizer options (before the LSAN_OPTIONS
environment variable is read at runtime). This can be set as a build argument to affect most “lsan” variants in $variants (which see), or overridden in $toolchain_args in one of those variants. This can be a list of strings or a single string.
Note that even if this is empty, programs in this build cannot define their own __lsan_default_options
C function. Instead, they can use a sanitizer_extra_options() target in their deps
and then any options injected that way can override that option's setting in this list.
Current value for target_cpu =
: []
From /b/s/w/ir/x/w/out/not-default.zircon/args.gn:5
Overridden from the default: []
From //public/gn/config/instrumentation/sanitizer_default_options.gni:28
Path to Mac SDK.
Current value (from the default): ""
From //public/gn/config/standard.gni:42
none
: really unoptimized, usually only build-tested and not rundebug
: “optimized for debugging”, light enough to avoid confusiondefault
: default optimization levelsize
: optimized for space rather than purely for speedspeed
: optimized purely for speedsanitizer
: optimized for sanitizers (ASan, etc.)profile
: optimized for coverage/profile data collectionCurrent value (from the default): "default"
From //public/gn/config/levels.gni:26
If true, produce a Breakpad symbol file for each binary.
Current value (from the default): false
From //public/gn/toolchain/breakpad.gni:9
Controls whether we should output GSYM files for Fuchsia binaries.
Current value for target_cpu =
: false
From /b/s/w/ir/x/w/out/not-default.zircon/args.gn:17
Overridden from the default: false
From //public/gn/toolchain/gsym.gni:10
Directory where the Rust toolchain binary (“rustc”) is found. If this is "", then the prebuilt rustc is used. Using a system compiler is not supported. This toolchain is expected to support both Fuchsia targets and the host.
Current value (from the default): ""
From //public/gn/toolchain/rustc.gni:13
This is a string identifying the particular toolchain version in use. Its only purpose is to be unique enough that it changes when switching to a new toolchain, so that recompilations with the new compiler can be triggered.
When using the prebuilt, this defaults to the CIPD instance ID of the prebuilt.
Current value for target_cpu =
: "gH0XPhgIPun0tFV5pRc_8iKk8PBwmxqyKIq5oq6ktUUC"
From /b/s/w/ir/x/w/out/not-default.zircon/args.gn:18
Overridden from the default: ""
From //public/gn/toolchain/rustc.gni:21
Enables scheduler queue tracing for trace-based scheduler performance analysis.
Current value (from the default): false
From //kernel/params.gni:47
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:43
Default Scudo options (before the SCUDO_OPTIONS
environment variable is read at runtime). Scudo is the memory allocator in Fuchsia's C library, so this affects all Fuchsia programs. This can be a list of strings or a single string.
This operates similarly to asan_default_options
and its cousins for other sanitizers, but is slightly different. If this variable is empty, then no __scudo_default_options
function is injected into programs at all. Individual targets can use dependencies on sanitizer_extra_options() targets to cause options to be injected, and that will be compatible with any build-wide settings of scudo_default_options
. Programs can define their own __scudo_default_options
functions, but doing so will break all builds with this variable is set to nonempty, so any program in the build that needs such a setting (which should be only in tests) can use the sanitizer_extra_options() mechanism instead.
Current value for target_cpu =
: []
From /b/s/w/ir/x/w/out/not-default.zircon/args.gn:10
Overridden from the default: []
From //public/gn/config/instrumentation/sanitizer_default_options.gni:60
Current value (from the default): 16
From //kernel/params.gni:20
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.zircon.gn:21
Current value (from the default): ""
Current value (from the default): ""
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:30
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. This can be a list of strings or a single string.
Note that even if this is empty, programs in this build cannot define their own __ubsan_default_options
C function. Instead, they can use a sanitizer_extra_options() target in their deps
and then any options injected that way can override that option's setting in this list.
Current value for target_cpu =
: ["print_stacktrace=1", "halt_on_error=1"]
From /b/s/w/ir/x/w/out/not-default.zircon/args.gn:6
Overridden from the default: ["print_stacktrace=1", "halt_on_error=1"]
From //public/gn/config/instrumentation/sanitizer_default_options.gni:40
Set to true to enable compiling with ccache.
Current value for target_cpu =
: false
From /b/s/w/ir/x/w/out/not-default.zircon/args.gn:19
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/x/w/out/not-default.zircon/args.gn:20
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:12
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/x/w/out/not-default.zircon/args.gn:21
Overridden from the default: []
From //public/gn/toolchain/variants.gni:222
The level of detail for traces emitted by the VM system. Values greater than zero add increasing details at the cost of increased trace buffer use.
0 = Default kernel:* tracing. 1 = Adds flow events for asynchronous page requests.
Current value (from the default): 0
From //kernel/params.gni:54
This can be “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/x/w/out/not-default.zircon/args.gn:22
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
“$zx_build_config” is the directory containing GN configs used by the Zircon build infrastructure. This allows referring to them with “$zx_build_config:” in BUILD.zircon.gn and BUILD.gn files.
Current value (from the default): "//public/gn/config"
From //public/gn/BUILDCONFIG.gn:23
This mirrors the fidl_trace_level GN variable in //build/fidl/args.gni to the ZN build. See that file for more information about what this variable does.
Current value for target_cpu =
: 0
From /b/s/w/ir/x/w/out/not-default.zircon/args.gn:23
Overridden from the default: 0
From //public/gn/fidl/params.gni:9