xref: /aosp_15_r20/external/openscreen/build/config/BUILDCONFIG.gn (revision 3f982cf4871df8771c9d4abe6e9a6f8d829b2736)
1*3f982cf4SFabien Sanglard# Copyright 2018 The Chromium Authors. All rights reserved.
2*3f982cf4SFabien Sanglard# Use of this source code is governed by a BSD-style license that can be
3*3f982cf4SFabien Sanglard# found in the LICENSE file.
4*3f982cf4SFabien Sanglard
5*3f982cf4SFabien Sanglard# =============================================================================
6*3f982cf4SFabien Sanglard# WHAT IS THIS FILE?
7*3f982cf4SFabien Sanglard# =============================================================================
8*3f982cf4SFabien Sanglard#
9*3f982cf4SFabien Sanglard# This is the master GN build configuration. This file is loaded after the
10*3f982cf4SFabien Sanglard# build args (args.gn) for the build directory and after the toplevel ".gn"
11*3f982cf4SFabien Sanglard# file (which points to this file as the build configuration).
12*3f982cf4SFabien Sanglard#
13*3f982cf4SFabien Sanglard# This file will be executed and the resulting context will be used to execute
14*3f982cf4SFabien Sanglard# every other file in the build. So variables declared here (that don't start
15*3f982cf4SFabien Sanglard# with an underscore) will be implicitly global.
16*3f982cf4SFabien Sanglard
17*3f982cf4SFabien Sanglard# =============================================================================
18*3f982cf4SFabien Sanglard# PLATFORM SELECTION
19*3f982cf4SFabien Sanglard# =============================================================================
20*3f982cf4SFabien Sanglard#
21*3f982cf4SFabien Sanglard# There are two main things to set: "os" and "cpu". The "toolchain" is the name
22*3f982cf4SFabien Sanglard# of the GN thing that encodes combinations of these things.
23*3f982cf4SFabien Sanglard#
24*3f982cf4SFabien Sanglard# Users typically only set the variables "target_os" and "target_cpu" in "gn
25*3f982cf4SFabien Sanglard# args", the rest are set up by our build and internal to GN.
26*3f982cf4SFabien Sanglard#
27*3f982cf4SFabien Sanglard# There are three different types of each of these things: The "host"
28*3f982cf4SFabien Sanglard# represents the computer doing the compile and never changes. The "target"
29*3f982cf4SFabien Sanglard# represents the main thing we're trying to build. The "current" represents
30*3f982cf4SFabien Sanglard# which configuration is currently being defined, which can be either the
31*3f982cf4SFabien Sanglard# host, the target, or something completely different.
32*3f982cf4SFabien Sanglard
33*3f982cf4SFabien Sanglardif (target_os == "") {
34*3f982cf4SFabien Sanglard  target_os = host_os
35*3f982cf4SFabien Sanglard}
36*3f982cf4SFabien Sanglardif (target_cpu == "") {
37*3f982cf4SFabien Sanglard  target_cpu = host_cpu
38*3f982cf4SFabien Sanglard}
39*3f982cf4SFabien Sanglardif (current_cpu == "") {
40*3f982cf4SFabien Sanglard  current_cpu = target_cpu
41*3f982cf4SFabien Sanglard}
42*3f982cf4SFabien Sanglardif (current_os == "") {
43*3f982cf4SFabien Sanglard  current_os = target_os
44*3f982cf4SFabien Sanglard}
45*3f982cf4SFabien Sanglard
46*3f982cf4SFabien Sanglard# =============================================================================
47*3f982cf4SFabien Sanglard# BUILD FLAGS
48*3f982cf4SFabien Sanglard# =============================================================================
49*3f982cf4SFabien Sanglard#
50*3f982cf4SFabien Sanglard# This block lists input arguments to the build, along with their default
51*3f982cf4SFabien Sanglard# values.
52*3f982cf4SFabien Sanglard#
53*3f982cf4SFabien Sanglard# If a value is specified on the command line, it will overwrite the defaults
54*3f982cf4SFabien Sanglard# given in a declare_args block, otherwise the default will be used.
55*3f982cf4SFabien Sanglard#
56*3f982cf4SFabien Sanglard# YOU SHOULD ALMOST NEVER NEED TO ADD FLAGS TO THIS FILE. GN allows any file in
57*3f982cf4SFabien Sanglard# the build to declare build flags. If you need a flag for a single component,
58*3f982cf4SFabien Sanglard# you can just declare it in the corresponding BUILD.gn file.
59*3f982cf4SFabien Sanglard
60*3f982cf4SFabien Sanglarddefault_clang_base_path = "//third_party/llvm-build/Release+Asserts"
61*3f982cf4SFabien Sanglard
62*3f982cf4SFabien Sanglarddeclare_args() {
63*3f982cf4SFabien Sanglard  # Debug build.  Most global debug build flags are declared in
64*3f982cf4SFabien Sanglard  # //build/config/BUILD.gn.
65*3f982cf4SFabien Sanglard  is_debug = false
66*3f982cf4SFabien Sanglard
67*3f982cf4SFabien Sanglard  # By default, we use the clang compiler on both Mac and Linux. To use the
68*3f982cf4SFabien Sanglard  # gcc compiler on Linux instead, set is_gcc to true.
69*3f982cf4SFabien Sanglard  is_gcc = false
70*3f982cf4SFabien Sanglard  clang_base_path = default_clang_base_path
71*3f982cf4SFabien Sanglard
72*3f982cf4SFabien Sanglard  # This would not normally be set as a build argument, but rather is used as a
73*3f982cf4SFabien Sanglard  # default value during the first parse of this config.  All other toolchains
74*3f982cf4SFabien Sanglard  # that cause this file to be re-parsed will already have this set.  For
75*3f982cf4SFabien Sanglard  # further explanation, see
76*3f982cf4SFabien Sanglard  # https://gn.googlesource.com/gn/+/refs/heads/master/docs/reference.md#toolchain-overview
77*3f982cf4SFabien Sanglard  host_toolchain = ""
78*3f982cf4SFabien Sanglard
79*3f982cf4SFabien Sanglard  # Must be enabled for fuzzing targets.
80*3f982cf4SFabien Sanglard  use_libfuzzer = false
81*3f982cf4SFabien Sanglard}
82*3f982cf4SFabien Sanglard
83*3f982cf4SFabien Sanglarddeclare_args() {
84*3f982cf4SFabien Sanglard  is_clang = !is_gcc
85*3f982cf4SFabien Sanglard}
86*3f982cf4SFabien Sanglard
87*3f982cf4SFabien Sanglard# ==============================================================================
88*3f982cf4SFabien Sanglard# TOOLCHAIN SETUP
89*3f982cf4SFabien Sanglard# ==============================================================================
90*3f982cf4SFabien Sanglard#
91*3f982cf4SFabien Sanglard# Here we set the host and default toolchains. Currently only Mac and POSIX are
92*3f982cf4SFabien Sanglard# defined.
93*3f982cf4SFabien Sanglardif (host_toolchain == "") {
94*3f982cf4SFabien Sanglard  if (current_os == "chromeos" || current_os == "linux") {
95*3f982cf4SFabien Sanglard    if (is_clang) {
96*3f982cf4SFabien Sanglard      host_toolchain = "//build/toolchain/linux:clang_$host_cpu"
97*3f982cf4SFabien Sanglard    } else {
98*3f982cf4SFabien Sanglard      host_toolchain = "//build/toolchain/linux:gcc_$host_cpu"
99*3f982cf4SFabien Sanglard    }
100*3f982cf4SFabien Sanglard  } else if (current_os == "mac") {
101*3f982cf4SFabien Sanglard    host_toolchain = "//build/toolchain/mac:clang"
102*3f982cf4SFabien Sanglard  } else {
103*3f982cf4SFabien Sanglard    # TODO(miu): Windows, and others.
104*3f982cf4SFabien Sanglard    assert(false, "Toolchain for current_os is not defined.")
105*3f982cf4SFabien Sanglard  }
106*3f982cf4SFabien Sanglard}
107*3f982cf4SFabien Sanglard
108*3f982cf4SFabien Sanglard_default_toolchain = ""
109*3f982cf4SFabien Sanglardif (target_os == "chromeos" || target_os == "linux") {
110*3f982cf4SFabien Sanglard  if (is_clang) {
111*3f982cf4SFabien Sanglard    _default_toolchain = "//build/toolchain/linux:clang_$target_cpu"
112*3f982cf4SFabien Sanglard  } else {
113*3f982cf4SFabien Sanglard    _default_toolchain = "//build/toolchain/linux:gcc_$target_cpu"
114*3f982cf4SFabien Sanglard  }
115*3f982cf4SFabien Sanglard} else if (target_os == "mac") {
116*3f982cf4SFabien Sanglard  assert(host_os == "mac", "Cross-compiling on Mac is not supported.")
117*3f982cf4SFabien Sanglard  _default_toolchain = "//build/toolchain/mac:clang"
118*3f982cf4SFabien Sanglard} else {
119*3f982cf4SFabien Sanglard  assert(false, "Toolchain for target_os is not defined.")
120*3f982cf4SFabien Sanglard}
121*3f982cf4SFabien Sanglardset_default_toolchain(_default_toolchain)
122*3f982cf4SFabien Sanglard
123*3f982cf4SFabien Sanglard# =============================================================================
124*3f982cf4SFabien Sanglard# OS DEFINITIONS
125*3f982cf4SFabien Sanglard# =============================================================================
126*3f982cf4SFabien Sanglard#
127*3f982cf4SFabien Sanglard# We set these various is_FOO booleans for convenience in writing OS-based
128*3f982cf4SFabien Sanglard# conditions.
129*3f982cf4SFabien Sanglard
130*3f982cf4SFabien Sanglardif (current_os == "chromeos" || current_os == "linux") {
131*3f982cf4SFabien Sanglard  is_linux = true
132*3f982cf4SFabien Sanglard  is_mac = false
133*3f982cf4SFabien Sanglard  is_posix = true
134*3f982cf4SFabien Sanglard} else if (current_os == "mac") {
135*3f982cf4SFabien Sanglard  is_linux = false
136*3f982cf4SFabien Sanglard  is_mac = true
137*3f982cf4SFabien Sanglard  is_posix = true
138*3f982cf4SFabien Sanglard} else {
139*3f982cf4SFabien Sanglard  # TODO(miu): Windows, and others.
140*3f982cf4SFabien Sanglard  assert(false, "is_FOO booleans not defined for current_os.")
141*3f982cf4SFabien Sanglard}
142*3f982cf4SFabien Sanglard
143*3f982cf4SFabien Sanglard# =============================================================================
144*3f982cf4SFabien Sanglard# TARGET DEFAULTS
145*3f982cf4SFabien Sanglard# =============================================================================
146*3f982cf4SFabien Sanglard#
147*3f982cf4SFabien Sanglard# Set up the default configuration for every build target of the given type.
148*3f982cf4SFabien Sanglard# The values configured here will be automatically set on the scope of the
149*3f982cf4SFabien Sanglard# corresponding target. Target definitions can add or remove to the settings
150*3f982cf4SFabien Sanglard# here as needed.
151*3f982cf4SFabien Sanglard
152*3f982cf4SFabien Sanglard# All binary targets will get this list of configs by default.
153*3f982cf4SFabien Sanglard_shared_binary_target_configs = [
154*3f982cf4SFabien Sanglard  "//build/config:openscreen_code",
155*3f982cf4SFabien Sanglard  "//build/config:no_exceptions",
156*3f982cf4SFabien Sanglard  "//build/config:no_rtti",
157*3f982cf4SFabien Sanglard  "//build/config:symbol_visibility_hidden",
158*3f982cf4SFabien Sanglard  "//build/config:default_sanitizers",
159*3f982cf4SFabien Sanglard  "//build/config:default_coverage",
160*3f982cf4SFabien Sanglard  "//build/config:compiler_defaults",
161*3f982cf4SFabien Sanglard  "//build/config:compiler_cpu_abi",
162*3f982cf4SFabien Sanglard  "//build/config:default_optimization",
163*3f982cf4SFabien Sanglard  "//build/config:sysroot_runtime_libraries",
164*3f982cf4SFabien Sanglard  "//build/config:operating_system_defines",
165*3f982cf4SFabien Sanglard]
166*3f982cf4SFabien Sanglard
167*3f982cf4SFabien Sanglard# Apply that default list to the binary target types.
168*3f982cf4SFabien Sanglardset_defaults("executable") {
169*3f982cf4SFabien Sanglard  configs = _shared_binary_target_configs
170*3f982cf4SFabien Sanglard}
171*3f982cf4SFabien Sanglardset_defaults("static_library") {
172*3f982cf4SFabien Sanglard  configs = _shared_binary_target_configs
173*3f982cf4SFabien Sanglard}
174*3f982cf4SFabien Sanglardset_defaults("shared_library") {
175*3f982cf4SFabien Sanglard  configs = _shared_binary_target_configs
176*3f982cf4SFabien Sanglard}
177*3f982cf4SFabien Sanglardset_defaults("source_set") {
178*3f982cf4SFabien Sanglard  configs = _shared_binary_target_configs
179*3f982cf4SFabien Sanglard}
180