You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
6.3 KiB
180 lines
6.3 KiB
# Copyright 2018 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
# =============================================================================
|
|
# WHAT IS THIS FILE?
|
|
# =============================================================================
|
|
#
|
|
# This is the master GN build configuration. This file is loaded after the
|
|
# build args (args.gn) for the build directory and after the toplevel ".gn"
|
|
# file (which points to this file as the build configuration).
|
|
#
|
|
# This file will be executed and the resulting context will be used to execute
|
|
# every other file in the build. So variables declared here (that don't start
|
|
# with an underscore) will be implicitly global.
|
|
|
|
# =============================================================================
|
|
# PLATFORM SELECTION
|
|
# =============================================================================
|
|
#
|
|
# There are two main things to set: "os" and "cpu". The "toolchain" is the name
|
|
# of the GN thing that encodes combinations of these things.
|
|
#
|
|
# Users typically only set the variables "target_os" and "target_cpu" in "gn
|
|
# args", the rest are set up by our build and internal to GN.
|
|
#
|
|
# There are three different types of each of these things: The "host"
|
|
# represents the computer doing the compile and never changes. The "target"
|
|
# represents the main thing we're trying to build. The "current" represents
|
|
# which configuration is currently being defined, which can be either the
|
|
# host, the target, or something completely different.
|
|
|
|
if (target_os == "") {
|
|
target_os = host_os
|
|
}
|
|
if (target_cpu == "") {
|
|
target_cpu = host_cpu
|
|
}
|
|
if (current_cpu == "") {
|
|
current_cpu = target_cpu
|
|
}
|
|
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.
|
|
|
|
default_clang_base_path = "//third_party/llvm-build/Release+Asserts"
|
|
|
|
declare_args() {
|
|
# Debug build. Most global debug build flags are declared in
|
|
# //build/config/BUILD.gn.
|
|
is_debug = false
|
|
|
|
# By default, we use the clang compiler on both Mac and Linux. To use the
|
|
# gcc compiler on Linux instead, set is_gcc to true.
|
|
is_gcc = false
|
|
clang_base_path = default_clang_base_path
|
|
|
|
# This would not normally be set as a build argument, but rather is used as a
|
|
# default value during the first parse of this config. All other toolchains
|
|
# that cause this file to be re-parsed will already have this set. For
|
|
# further explanation, see
|
|
# https://gn.googlesource.com/gn/+/refs/heads/master/docs/reference.md#toolchain-overview
|
|
host_toolchain = ""
|
|
|
|
# Must be enabled for fuzzing targets.
|
|
use_libfuzzer = false
|
|
}
|
|
|
|
declare_args() {
|
|
is_clang = !is_gcc
|
|
}
|
|
|
|
# ==============================================================================
|
|
# TOOLCHAIN SETUP
|
|
# ==============================================================================
|
|
#
|
|
# Here we set the host and default toolchains. Currently only Mac and POSIX are
|
|
# defined.
|
|
if (host_toolchain == "") {
|
|
if (current_os == "chromeos" || current_os == "linux") {
|
|
if (is_clang) {
|
|
host_toolchain = "//build/toolchain/linux:clang_$host_cpu"
|
|
} else {
|
|
host_toolchain = "//build/toolchain/linux:gcc_$host_cpu"
|
|
}
|
|
} else if (current_os == "mac") {
|
|
host_toolchain = "//build/toolchain/mac:clang"
|
|
} else {
|
|
# TODO(miu): Windows, and others.
|
|
assert(false, "Toolchain for current_os is not defined.")
|
|
}
|
|
}
|
|
|
|
_default_toolchain = ""
|
|
if (target_os == "chromeos" || target_os == "linux") {
|
|
if (is_clang) {
|
|
_default_toolchain = "//build/toolchain/linux:clang_$target_cpu"
|
|
} else {
|
|
_default_toolchain = "//build/toolchain/linux:gcc_$target_cpu"
|
|
}
|
|
} else if (target_os == "mac") {
|
|
assert(host_os == "mac", "Cross-compiling on Mac is not supported.")
|
|
_default_toolchain = "//build/toolchain/mac:clang"
|
|
} else {
|
|
assert(false, "Toolchain for target_os is not defined.")
|
|
}
|
|
set_default_toolchain(_default_toolchain)
|
|
|
|
# =============================================================================
|
|
# OS DEFINITIONS
|
|
# =============================================================================
|
|
#
|
|
# We set these various is_FOO booleans for convenience in writing OS-based
|
|
# conditions.
|
|
|
|
if (current_os == "chromeos" || current_os == "linux") {
|
|
is_linux = true
|
|
is_mac = false
|
|
is_posix = true
|
|
} else if (current_os == "mac") {
|
|
is_linux = false
|
|
is_mac = true
|
|
is_posix = true
|
|
} else {
|
|
# TODO(miu): Windows, and others.
|
|
assert(false, "is_FOO booleans not defined for current_os.")
|
|
}
|
|
|
|
# =============================================================================
|
|
# TARGET DEFAULTS
|
|
# =============================================================================
|
|
#
|
|
# Set up the default configuration for every build target of the given type.
|
|
# The values configured here will be automatically set on the scope of the
|
|
# corresponding target. Target definitions can add or remove to the settings
|
|
# here as needed.
|
|
|
|
# All binary targets will get this list of configs by default.
|
|
_shared_binary_target_configs = [
|
|
"//build/config:openscreen_code",
|
|
"//build/config:no_exceptions",
|
|
"//build/config:no_rtti",
|
|
"//build/config:symbol_visibility_hidden",
|
|
"//build/config:default_sanitizers",
|
|
"//build/config:default_coverage",
|
|
"//build/config:compiler_defaults",
|
|
"//build/config:compiler_cpu_abi",
|
|
"//build/config:default_optimization",
|
|
"//build/config:sysroot_runtime_libraries",
|
|
"//build/config:operating_system_defines",
|
|
]
|
|
|
|
# Apply that default list to the binary target types.
|
|
set_defaults("executable") {
|
|
configs = _shared_binary_target_configs
|
|
}
|
|
set_defaults("static_library") {
|
|
configs = _shared_binary_target_configs
|
|
}
|
|
set_defaults("shared_library") {
|
|
configs = _shared_binary_target_configs
|
|
}
|
|
set_defaults("source_set") {
|
|
configs = _shared_binary_target_configs
|
|
}
|