xref: /aosp_15_r20/external/cronet/build/config/BUILD.gn (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker# Copyright 2013 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Workerimport("//build/config/c++/c++.gni")
6*6777b538SAndroid Build Coastguard Workerimport("//build/config/cast.gni")
7*6777b538SAndroid Build Coastguard Workerimport("//build/config/chrome_build.gni")
8*6777b538SAndroid Build Coastguard Workerimport("//build/config/dcheck_always_on.gni")
9*6777b538SAndroid Build Coastguard Workerimport("//build/config/features.gni")
10*6777b538SAndroid Build Coastguard Worker
11*6777b538SAndroid Build Coastguard Worker# Subprojects need to override arguments in {mac,ios}_sdk_overrides.gni in their
12*6777b538SAndroid Build Coastguard Worker# .gn config, but those arguments are only used on macOS. Including
13*6777b538SAndroid Build Coastguard Worker# mac_sdk_overrides.gni insures that this doesn't trigger an unused argument
14*6777b538SAndroid Build Coastguard Worker# warning.
15*6777b538SAndroid Build Coastguard Workerimport("//build/config/ios/ios_sdk_overrides.gni")
16*6777b538SAndroid Build Coastguard Workerimport("//build/config/mac/mac_sdk_overrides.gni")
17*6777b538SAndroid Build Coastguard Worker
18*6777b538SAndroid Build Coastguard Workerimport("//build/config/pch.gni")
19*6777b538SAndroid Build Coastguard Workerimport("//build/config/rust.gni")
20*6777b538SAndroid Build Coastguard Workerimport("//build/config/sanitizers/sanitizers.gni")
21*6777b538SAndroid Build Coastguard Workerimport("//build/config/ui.gni")
22*6777b538SAndroid Build Coastguard Workerimport("//build/toolchain/goma.gni")
23*6777b538SAndroid Build Coastguard Workerif (is_android) {
24*6777b538SAndroid Build Coastguard Worker  import("//build/config/android/abi.gni")
25*6777b538SAndroid Build Coastguard Worker}
26*6777b538SAndroid Build Coastguard Worker
27*6777b538SAndroid Build Coastguard Worker# ==============================================
28*6777b538SAndroid Build Coastguard Worker#   PLEASE DO NOT ADD MORE THINGS TO THIS LIST
29*6777b538SAndroid Build Coastguard Worker# ==============================================
30*6777b538SAndroid Build Coastguard Worker#
31*6777b538SAndroid Build Coastguard Worker# Legacy feature defines applied to all targets.
32*6777b538SAndroid Build Coastguard Worker#
33*6777b538SAndroid Build Coastguard Worker# These are applied to every single compile in the build and most of them are
34*6777b538SAndroid Build Coastguard Worker# only relevant to a few files. This bloats command lines and causes
35*6777b538SAndroid Build Coastguard Worker# unnecessary recompiles when flags are flipped.
36*6777b538SAndroid Build Coastguard Worker#
37*6777b538SAndroid Build Coastguard Worker# To pass defines to source code from the build, use the buildflag system which
38*6777b538SAndroid Build Coastguard Worker# will write headers containing the defines you need. This isolates the define
39*6777b538SAndroid Build Coastguard Worker# and means its definition can participate in the build graph, only recompiling
40*6777b538SAndroid Build Coastguard Worker# things when it actually changes.
41*6777b538SAndroid Build Coastguard Worker#
42*6777b538SAndroid Build Coastguard Worker# See //build/buildflag_header.gni for instructions on generating headers.
43*6777b538SAndroid Build Coastguard Worker#
44*6777b538SAndroid Build Coastguard Worker# This will also allow you to scope your build flag to a BUILD.gn file (or a
45*6777b538SAndroid Build Coastguard Worker# .gni file if you need it from more than one place) rather than making global
46*6777b538SAndroid Build Coastguard Worker# flags. See //build/config/BUILDCONFIG.gn for advice on where to define
47*6777b538SAndroid Build Coastguard Worker# build flags.
48*6777b538SAndroid Build Coastguard Workerconfig("feature_flags") {
49*6777b538SAndroid Build Coastguard Worker  defines = []
50*6777b538SAndroid Build Coastguard Worker  if (dcheck_always_on) {
51*6777b538SAndroid Build Coastguard Worker    defines += [ "DCHECK_ALWAYS_ON=1" ]
52*6777b538SAndroid Build Coastguard Worker  }
53*6777b538SAndroid Build Coastguard Worker  if (use_udev) {
54*6777b538SAndroid Build Coastguard Worker    # TODO(brettw) should probably be "=1".
55*6777b538SAndroid Build Coastguard Worker    defines += [ "USE_UDEV" ]
56*6777b538SAndroid Build Coastguard Worker  }
57*6777b538SAndroid Build Coastguard Worker  if (use_aura) {
58*6777b538SAndroid Build Coastguard Worker    defines += [ "USE_AURA=1" ]
59*6777b538SAndroid Build Coastguard Worker  }
60*6777b538SAndroid Build Coastguard Worker  if (use_glib) {
61*6777b538SAndroid Build Coastguard Worker    defines += [ "USE_GLIB=1" ]
62*6777b538SAndroid Build Coastguard Worker  }
63*6777b538SAndroid Build Coastguard Worker  if (use_ozone && !is_android) {
64*6777b538SAndroid Build Coastguard Worker    # Chrome code should check BUILDFLAG(IS_OZONE) instead of
65*6777b538SAndroid Build Coastguard Worker    # defined(USE_OZONE).
66*6777b538SAndroid Build Coastguard Worker    #
67*6777b538SAndroid Build Coastguard Worker    # Note that some Chrome OS builds unconditionally set |use_ozone| to true,
68*6777b538SAndroid Build Coastguard Worker    # but they also build some targets with the Android toolchain. This ensures
69*6777b538SAndroid Build Coastguard Worker    # that Android targets still build with USE_OZONE=0 in such cases.
70*6777b538SAndroid Build Coastguard Worker    #
71*6777b538SAndroid Build Coastguard Worker    # TODO(crbug.com/837032): Maybe this can be cleaned up if we can avoid
72*6777b538SAndroid Build Coastguard Worker    # setting use_ozone globally.
73*6777b538SAndroid Build Coastguard Worker    defines += [ "USE_OZONE=1" ]
74*6777b538SAndroid Build Coastguard Worker  }
75*6777b538SAndroid Build Coastguard Worker  if (is_asan || is_hwasan || is_lsan || is_tsan || is_msan) {
76*6777b538SAndroid Build Coastguard Worker    defines += [ "MEMORY_TOOL_REPLACES_ALLOCATOR" ]
77*6777b538SAndroid Build Coastguard Worker  }
78*6777b538SAndroid Build Coastguard Worker  if (is_asan) {
79*6777b538SAndroid Build Coastguard Worker    defines += [ "ADDRESS_SANITIZER" ]
80*6777b538SAndroid Build Coastguard Worker  }
81*6777b538SAndroid Build Coastguard Worker  if (is_lsan) {
82*6777b538SAndroid Build Coastguard Worker    defines += [ "LEAK_SANITIZER" ]
83*6777b538SAndroid Build Coastguard Worker  }
84*6777b538SAndroid Build Coastguard Worker  if (is_tsan) {
85*6777b538SAndroid Build Coastguard Worker    defines += [
86*6777b538SAndroid Build Coastguard Worker      "THREAD_SANITIZER",
87*6777b538SAndroid Build Coastguard Worker      "DYNAMIC_ANNOTATIONS_EXTERNAL_IMPL=1",
88*6777b538SAndroid Build Coastguard Worker    ]
89*6777b538SAndroid Build Coastguard Worker  }
90*6777b538SAndroid Build Coastguard Worker  if (is_msan) {
91*6777b538SAndroid Build Coastguard Worker    defines += [ "MEMORY_SANITIZER" ]
92*6777b538SAndroid Build Coastguard Worker  }
93*6777b538SAndroid Build Coastguard Worker  if (is_ubsan || is_ubsan_vptr || is_ubsan_security) {
94*6777b538SAndroid Build Coastguard Worker    defines += [ "UNDEFINED_SANITIZER" ]
95*6777b538SAndroid Build Coastguard Worker  }
96*6777b538SAndroid Build Coastguard Worker  if (is_official_build) {
97*6777b538SAndroid Build Coastguard Worker    defines += [ "OFFICIAL_BUILD" ]
98*6777b538SAndroid Build Coastguard Worker  }
99*6777b538SAndroid Build Coastguard Worker
100*6777b538SAndroid Build Coastguard Worker  # ==============================================
101*6777b538SAndroid Build Coastguard Worker  #   PLEASE DO NOT ADD MORE THINGS TO THIS LIST
102*6777b538SAndroid Build Coastguard Worker  # ==============================================
103*6777b538SAndroid Build Coastguard Worker  #
104*6777b538SAndroid Build Coastguard Worker  # See the comment at the top.
105*6777b538SAndroid Build Coastguard Worker}
106*6777b538SAndroid Build Coastguard Worker
107*6777b538SAndroid Build Coastguard Worker# Debug/release ----------------------------------------------------------------
108*6777b538SAndroid Build Coastguard Worker
109*6777b538SAndroid Build Coastguard Workerconfig("debug") {
110*6777b538SAndroid Build Coastguard Worker  defines = [
111*6777b538SAndroid Build Coastguard Worker    "_DEBUG",
112*6777b538SAndroid Build Coastguard Worker    "DYNAMIC_ANNOTATIONS_ENABLED=1",
113*6777b538SAndroid Build Coastguard Worker  ]
114*6777b538SAndroid Build Coastguard Worker
115*6777b538SAndroid Build Coastguard Worker  if (is_nacl) {
116*6777b538SAndroid Build Coastguard Worker    defines += [ "DYNAMIC_ANNOTATIONS_PREFIX=NACL_" ]
117*6777b538SAndroid Build Coastguard Worker  }
118*6777b538SAndroid Build Coastguard Worker
119*6777b538SAndroid Build Coastguard Worker  if (is_win) {
120*6777b538SAndroid Build Coastguard Worker    if (!enable_iterator_debugging && !use_custom_libcxx) {
121*6777b538SAndroid Build Coastguard Worker      # Iterator debugging is enabled by default by the compiler on debug
122*6777b538SAndroid Build Coastguard Worker      # builds, and we have to tell it to turn it off.
123*6777b538SAndroid Build Coastguard Worker      defines += [ "_HAS_ITERATOR_DEBUGGING=0" ]
124*6777b538SAndroid Build Coastguard Worker    }
125*6777b538SAndroid Build Coastguard Worker  } else if ((is_linux || is_chromeos) && current_cpu == "x64" &&
126*6777b538SAndroid Build Coastguard Worker             enable_iterator_debugging) {
127*6777b538SAndroid Build Coastguard Worker    # Enable libstdc++ debugging facilities to help catch problems early, see
128*6777b538SAndroid Build Coastguard Worker    # http://crbug.com/65151 .
129*6777b538SAndroid Build Coastguard Worker    # TODO(phajdan.jr): Should we enable this for all of POSIX?
130*6777b538SAndroid Build Coastguard Worker    defines += [ "_GLIBCXX_DEBUG=1" ]
131*6777b538SAndroid Build Coastguard Worker  }
132*6777b538SAndroid Build Coastguard Worker}
133*6777b538SAndroid Build Coastguard Worker
134*6777b538SAndroid Build Coastguard Workerconfig("release") {
135*6777b538SAndroid Build Coastguard Worker  defines = [ "NDEBUG" ]
136*6777b538SAndroid Build Coastguard Worker
137*6777b538SAndroid Build Coastguard Worker  # Sanitizers.
138*6777b538SAndroid Build Coastguard Worker  if (is_tsan) {
139*6777b538SAndroid Build Coastguard Worker    defines += [ "DYNAMIC_ANNOTATIONS_ENABLED=1" ]
140*6777b538SAndroid Build Coastguard Worker  } else {
141*6777b538SAndroid Build Coastguard Worker    defines += [ "NVALGRIND" ]
142*6777b538SAndroid Build Coastguard Worker    if (!is_nacl) {
143*6777b538SAndroid Build Coastguard Worker      # NaCl always enables dynamic annotations. Currently this value is set to
144*6777b538SAndroid Build Coastguard Worker      # 1 for all .nexes.
145*6777b538SAndroid Build Coastguard Worker      defines += [ "DYNAMIC_ANNOTATIONS_ENABLED=0" ]
146*6777b538SAndroid Build Coastguard Worker    }
147*6777b538SAndroid Build Coastguard Worker  }
148*6777b538SAndroid Build Coastguard Worker
149*6777b538SAndroid Build Coastguard Worker  if (is_ios) {
150*6777b538SAndroid Build Coastguard Worker    # Disable NSAssert and GTMDevAssert (from Google Toolbox for Mac). This
151*6777b538SAndroid Build Coastguard Worker    # follows XCode's default behavior for Release builds.
152*6777b538SAndroid Build Coastguard Worker    defines += [ "NS_BLOCK_ASSERTIONS=1" ]
153*6777b538SAndroid Build Coastguard Worker  }
154*6777b538SAndroid Build Coastguard Worker}
155*6777b538SAndroid Build Coastguard Worker
156*6777b538SAndroid Build Coastguard Worker# Default libraries ------------------------------------------------------------
157*6777b538SAndroid Build Coastguard Worker
158*6777b538SAndroid Build Coastguard Worker# This config defines the default libraries applied to all targets.
159*6777b538SAndroid Build Coastguard Workerconfig("default_libs") {
160*6777b538SAndroid Build Coastguard Worker  if (is_win) {
161*6777b538SAndroid Build Coastguard Worker    # TODO(brettw) this list of defaults should probably be smaller, and
162*6777b538SAndroid Build Coastguard Worker    # instead the targets that use the less common ones (e.g. wininet or
163*6777b538SAndroid Build Coastguard Worker    # winspool) should include those explicitly.
164*6777b538SAndroid Build Coastguard Worker    libs = [
165*6777b538SAndroid Build Coastguard Worker      "advapi32.lib",
166*6777b538SAndroid Build Coastguard Worker      "comdlg32.lib",
167*6777b538SAndroid Build Coastguard Worker      "dbghelp.lib",
168*6777b538SAndroid Build Coastguard Worker      "dnsapi.lib",
169*6777b538SAndroid Build Coastguard Worker      "gdi32.lib",
170*6777b538SAndroid Build Coastguard Worker      "msimg32.lib",
171*6777b538SAndroid Build Coastguard Worker      "odbc32.lib",
172*6777b538SAndroid Build Coastguard Worker      "odbccp32.lib",
173*6777b538SAndroid Build Coastguard Worker      "oleaut32.lib",
174*6777b538SAndroid Build Coastguard Worker      "shell32.lib",
175*6777b538SAndroid Build Coastguard Worker      "shlwapi.lib",
176*6777b538SAndroid Build Coastguard Worker      "user32.lib",
177*6777b538SAndroid Build Coastguard Worker      "usp10.lib",
178*6777b538SAndroid Build Coastguard Worker      "uuid.lib",
179*6777b538SAndroid Build Coastguard Worker      "version.lib",
180*6777b538SAndroid Build Coastguard Worker      "wininet.lib",
181*6777b538SAndroid Build Coastguard Worker      "winmm.lib",
182*6777b538SAndroid Build Coastguard Worker      "winspool.lib",
183*6777b538SAndroid Build Coastguard Worker      "ws2_32.lib",
184*6777b538SAndroid Build Coastguard Worker
185*6777b538SAndroid Build Coastguard Worker      # Please don't add more stuff here. We should actually be making this
186*6777b538SAndroid Build Coastguard Worker      # list smaller, since all common things should be covered. If you need
187*6777b538SAndroid Build Coastguard Worker      # some extra libraries, please just add a libs = [ "foo.lib" ] to your
188*6777b538SAndroid Build Coastguard Worker      # target that needs it.
189*6777b538SAndroid Build Coastguard Worker    ]
190*6777b538SAndroid Build Coastguard Worker    if (current_os == "winuwp") {
191*6777b538SAndroid Build Coastguard Worker      # These libraries are needed for Windows UWP (i.e. store apps).
192*6777b538SAndroid Build Coastguard Worker      libs += [
193*6777b538SAndroid Build Coastguard Worker        "dloadhelper.lib",
194*6777b538SAndroid Build Coastguard Worker        "WindowsApp.lib",
195*6777b538SAndroid Build Coastguard Worker      ]
196*6777b538SAndroid Build Coastguard Worker    } else {
197*6777b538SAndroid Build Coastguard Worker      # These libraries are not compatible with Windows UWP (i.e. store apps.)
198*6777b538SAndroid Build Coastguard Worker      libs += [
199*6777b538SAndroid Build Coastguard Worker        "delayimp.lib",
200*6777b538SAndroid Build Coastguard Worker        "kernel32.lib",
201*6777b538SAndroid Build Coastguard Worker        "ole32.lib",
202*6777b538SAndroid Build Coastguard Worker      ]
203*6777b538SAndroid Build Coastguard Worker    }
204*6777b538SAndroid Build Coastguard Worker  } else if (is_android) {
205*6777b538SAndroid Build Coastguard Worker    libs = [
206*6777b538SAndroid Build Coastguard Worker      "dl",
207*6777b538SAndroid Build Coastguard Worker      "m",
208*6777b538SAndroid Build Coastguard Worker    ]
209*6777b538SAndroid Build Coastguard Worker  } else if (is_mac) {
210*6777b538SAndroid Build Coastguard Worker    # Targets should choose to explicitly link frameworks they require. Since
211*6777b538SAndroid Build Coastguard Worker    # linking can have run-time side effects, nothing should be listed here.
212*6777b538SAndroid Build Coastguard Worker    libs = []
213*6777b538SAndroid Build Coastguard Worker  } else if (is_ios) {
214*6777b538SAndroid Build Coastguard Worker    # Targets should choose to explicitly link frameworks they require. Since
215*6777b538SAndroid Build Coastguard Worker    # linking can have run-time side effects, nothing should be listed here.
216*6777b538SAndroid Build Coastguard Worker    libs = []
217*6777b538SAndroid Build Coastguard Worker  } else if (is_linux || is_chromeos) {
218*6777b538SAndroid Build Coastguard Worker    libs = [
219*6777b538SAndroid Build Coastguard Worker      "dl",
220*6777b538SAndroid Build Coastguard Worker      "pthread",
221*6777b538SAndroid Build Coastguard Worker      "rt",
222*6777b538SAndroid Build Coastguard Worker    ]
223*6777b538SAndroid Build Coastguard Worker  }
224*6777b538SAndroid Build Coastguard Worker}
225*6777b538SAndroid Build Coastguard Worker
226*6777b538SAndroid Build Coastguard Worker_toolchain_marker_name =
227*6777b538SAndroid Build Coastguard Worker    "toolchain_marker_" + get_label_info(current_toolchain, "name")
228*6777b538SAndroid Build Coastguard Workergroup(_toolchain_marker_name) {
229*6777b538SAndroid Build Coastguard Worker  # Can be used as an assert_no_deps target (assert_no_deps ignores toolchains).
230*6777b538SAndroid Build Coastguard Worker}
231*6777b538SAndroid Build Coastguard Worker
232*6777b538SAndroid Build Coastguard Workergroup("common_deps") {
233*6777b538SAndroid Build Coastguard Worker  visibility = [
234*6777b538SAndroid Build Coastguard Worker    ":executable_deps",
235*6777b538SAndroid Build Coastguard Worker    ":loadable_module_deps",
236*6777b538SAndroid Build Coastguard Worker    ":shared_library_deps",
237*6777b538SAndroid Build Coastguard Worker  ]
238*6777b538SAndroid Build Coastguard Worker
239*6777b538SAndroid Build Coastguard Worker  # WARNING: This group is a dependency of **every executable and shared
240*6777b538SAndroid Build Coastguard Worker  # library**.  Please be careful adding new dependencies here.
241*6777b538SAndroid Build Coastguard Worker  public_deps = [ ":$_toolchain_marker_name" ]
242*6777b538SAndroid Build Coastguard Worker
243*6777b538SAndroid Build Coastguard Worker  if (using_sanitizer) {
244*6777b538SAndroid Build Coastguard Worker    public_deps += [ "//build/config/sanitizers:deps" ]
245*6777b538SAndroid Build Coastguard Worker  }
246*6777b538SAndroid Build Coastguard Worker
247*6777b538SAndroid Build Coastguard Worker  if (use_custom_libcxx) {
248*6777b538SAndroid Build Coastguard Worker    public_deps += [ "//buildtools/third_party/libc++" ]
249*6777b538SAndroid Build Coastguard Worker  }
250*6777b538SAndroid Build Coastguard Worker
251*6777b538SAndroid Build Coastguard Worker  if (use_afl) {
252*6777b538SAndroid Build Coastguard Worker    public_deps += [ "//third_party/afl" ]
253*6777b538SAndroid Build Coastguard Worker  }
254*6777b538SAndroid Build Coastguard Worker
255*6777b538SAndroid Build Coastguard Worker  if (is_android && use_order_profiling) {
256*6777b538SAndroid Build Coastguard Worker    public_deps += [ "//base/android/orderfile:orderfile_instrumentation" ]
257*6777b538SAndroid Build Coastguard Worker  }
258*6777b538SAndroid Build Coastguard Worker
259*6777b538SAndroid Build Coastguard Worker  if (is_fuchsia) {
260*6777b538SAndroid Build Coastguard Worker    public_deps +=
261*6777b538SAndroid Build Coastguard Worker        [ "//third_party/fuchsia-gn-sdk/src/config:runtime_library_group" ]
262*6777b538SAndroid Build Coastguard Worker    if (is_asan) {
263*6777b538SAndroid Build Coastguard Worker      public_deps += [ "//build/config/fuchsia:asan_runtime_library" ]
264*6777b538SAndroid Build Coastguard Worker    }
265*6777b538SAndroid Build Coastguard Worker  }
266*6777b538SAndroid Build Coastguard Worker
267*6777b538SAndroid Build Coastguard Worker  if (is_win) {
268*6777b538SAndroid Build Coastguard Worker    # The CRT runtime is dynamically linked in component builds and needs to
269*6777b538SAndroid Build Coastguard Worker    # be present on bots that run exes or load DLLs. This also includes
270*6777b538SAndroid Build Coastguard Worker    # debugging DLLs in all builds.
271*6777b538SAndroid Build Coastguard Worker    data_deps = [ "//build/win:runtime_libs" ]
272*6777b538SAndroid Build Coastguard Worker  }
273*6777b538SAndroid Build Coastguard Worker}
274*6777b538SAndroid Build Coastguard Worker
275*6777b538SAndroid Build Coastguard Worker# Only the executable template in BUILDCONFIG.gn should reference this.
276*6777b538SAndroid Build Coastguard Workergroup("executable_deps") {
277*6777b538SAndroid Build Coastguard Worker  if (!toolchain_for_rust_host_build_tools) {
278*6777b538SAndroid Build Coastguard Worker    public_deps = [ ":common_deps" ]
279*6777b538SAndroid Build Coastguard Worker    if (export_libcxxabi_from_executables) {
280*6777b538SAndroid Build Coastguard Worker      public_deps += [ "//buildtools/third_party/libc++abi" ]
281*6777b538SAndroid Build Coastguard Worker    }
282*6777b538SAndroid Build Coastguard Worker    public_configs = [ "//build/config/sanitizers:link_executable" ]
283*6777b538SAndroid Build Coastguard Worker  }
284*6777b538SAndroid Build Coastguard Worker}
285*6777b538SAndroid Build Coastguard Worker
286*6777b538SAndroid Build Coastguard Worker# Only the loadable_module template in BUILDCONFIG.gn should reference this.
287*6777b538SAndroid Build Coastguard Workergroup("loadable_module_deps") {
288*6777b538SAndroid Build Coastguard Worker  if (!toolchain_for_rust_host_build_tools) {
289*6777b538SAndroid Build Coastguard Worker    public_deps = [ ":common_deps" ]
290*6777b538SAndroid Build Coastguard Worker
291*6777b538SAndroid Build Coastguard Worker    public_configs = [ "//build/config/sanitizers:link_shared_library" ]
292*6777b538SAndroid Build Coastguard Worker  }
293*6777b538SAndroid Build Coastguard Worker}
294*6777b538SAndroid Build Coastguard Worker
295*6777b538SAndroid Build Coastguard Worker# Only the shared_library template in BUILDCONFIG.gn should reference this.
296*6777b538SAndroid Build Coastguard Workergroup("shared_library_deps") {
297*6777b538SAndroid Build Coastguard Worker  if (!toolchain_for_rust_host_build_tools) {
298*6777b538SAndroid Build Coastguard Worker    public_deps = [ ":common_deps" ]
299*6777b538SAndroid Build Coastguard Worker
300*6777b538SAndroid Build Coastguard Worker    public_configs = [ "//build/config/sanitizers:link_shared_library" ]
301*6777b538SAndroid Build Coastguard Worker  }
302*6777b538SAndroid Build Coastguard Worker}
303*6777b538SAndroid Build Coastguard Worker
304*6777b538SAndroid Build Coastguard Worker# Executable configs -----------------------------------------------------------
305*6777b538SAndroid Build Coastguard Worker
306*6777b538SAndroid Build Coastguard Worker# Windows linker setup for EXEs and DLLs.
307*6777b538SAndroid Build Coastguard Workerif (is_win) {
308*6777b538SAndroid Build Coastguard Worker  _windows_linker_configs = [
309*6777b538SAndroid Build Coastguard Worker    "//build/config/win:sdk_link",
310*6777b538SAndroid Build Coastguard Worker    "//build/config/win:common_linker_setup",
311*6777b538SAndroid Build Coastguard Worker  ]
312*6777b538SAndroid Build Coastguard Worker}
313*6777b538SAndroid Build Coastguard Worker
314*6777b538SAndroid Build Coastguard Worker# This config defines the configs applied to all executables.
315*6777b538SAndroid Build Coastguard Workerconfig("executable_config") {
316*6777b538SAndroid Build Coastguard Worker  configs = []
317*6777b538SAndroid Build Coastguard Worker
318*6777b538SAndroid Build Coastguard Worker  if (is_win) {
319*6777b538SAndroid Build Coastguard Worker    configs += _windows_linker_configs
320*6777b538SAndroid Build Coastguard Worker  } else if (is_mac) {
321*6777b538SAndroid Build Coastguard Worker    configs += [ "//build/config/mac:mac_dynamic_flags" ]
322*6777b538SAndroid Build Coastguard Worker  } else if (is_ios) {
323*6777b538SAndroid Build Coastguard Worker    configs += [
324*6777b538SAndroid Build Coastguard Worker      "//build/config/ios:ios_dynamic_flags",
325*6777b538SAndroid Build Coastguard Worker      "//build/config/ios:ios_executable_flags",
326*6777b538SAndroid Build Coastguard Worker    ]
327*6777b538SAndroid Build Coastguard Worker  } else if (is_linux || is_chromeos || is_android || current_os == "aix") {
328*6777b538SAndroid Build Coastguard Worker    configs += [ "//build/config/gcc:executable_config" ]
329*6777b538SAndroid Build Coastguard Worker    if (is_castos || is_cast_android) {
330*6777b538SAndroid Build Coastguard Worker      configs += [ "//build/config/chromecast:executable_config" ]
331*6777b538SAndroid Build Coastguard Worker    }
332*6777b538SAndroid Build Coastguard Worker  }
333*6777b538SAndroid Build Coastguard Worker
334*6777b538SAndroid Build Coastguard Worker  # If we're using the prebuilt instrumented libraries with the sanitizers, we
335*6777b538SAndroid Build Coastguard Worker  # need to add ldflags to every binary to make sure they are picked up.
336*6777b538SAndroid Build Coastguard Worker  if (prebuilt_instrumented_libraries_available) {
337*6777b538SAndroid Build Coastguard Worker    configs += [ "//third_party/instrumented_libs:prebuilt_ldflags" ]
338*6777b538SAndroid Build Coastguard Worker  }
339*6777b538SAndroid Build Coastguard Worker  if (use_locally_built_instrumented_libraries) {
340*6777b538SAndroid Build Coastguard Worker    configs += [ "//third_party/instrumented_libs:locally_built_ldflags" ]
341*6777b538SAndroid Build Coastguard Worker  }
342*6777b538SAndroid Build Coastguard Worker}
343*6777b538SAndroid Build Coastguard Worker
344*6777b538SAndroid Build Coastguard Worker# Shared library configs -------------------------------------------------------
345*6777b538SAndroid Build Coastguard Worker
346*6777b538SAndroid Build Coastguard Worker# This config defines the configs applied to all shared libraries.
347*6777b538SAndroid Build Coastguard Workerconfig("shared_library_config") {
348*6777b538SAndroid Build Coastguard Worker  configs = []
349*6777b538SAndroid Build Coastguard Worker
350*6777b538SAndroid Build Coastguard Worker  if (is_win) {
351*6777b538SAndroid Build Coastguard Worker    configs += _windows_linker_configs
352*6777b538SAndroid Build Coastguard Worker  } else if (is_mac) {
353*6777b538SAndroid Build Coastguard Worker    configs += [ "//build/config/mac:mac_dynamic_flags" ]
354*6777b538SAndroid Build Coastguard Worker  } else if (is_ios) {
355*6777b538SAndroid Build Coastguard Worker    configs += [
356*6777b538SAndroid Build Coastguard Worker      "//build/config/ios:ios_dynamic_flags",
357*6777b538SAndroid Build Coastguard Worker      "//build/config/ios:ios_shared_library_flags",
358*6777b538SAndroid Build Coastguard Worker    ]
359*6777b538SAndroid Build Coastguard Worker  } else if (is_castos || is_cast_android) {
360*6777b538SAndroid Build Coastguard Worker    configs += [ "//build/config/chromecast:shared_library_config" ]
361*6777b538SAndroid Build Coastguard Worker  } else if (is_linux || is_chromeos || current_os == "aix") {
362*6777b538SAndroid Build Coastguard Worker    configs += [ "//build/config/gcc:shared_library_config" ]
363*6777b538SAndroid Build Coastguard Worker  }
364*6777b538SAndroid Build Coastguard Worker
365*6777b538SAndroid Build Coastguard Worker  # If we're using the prebuilt instrumented libraries with the sanitizers, we
366*6777b538SAndroid Build Coastguard Worker  # need to add ldflags to every binary to make sure they are picked up.
367*6777b538SAndroid Build Coastguard Worker  if (prebuilt_instrumented_libraries_available) {
368*6777b538SAndroid Build Coastguard Worker    configs += [ "//third_party/instrumented_libs:prebuilt_ldflags" ]
369*6777b538SAndroid Build Coastguard Worker  }
370*6777b538SAndroid Build Coastguard Worker  if (use_locally_built_instrumented_libraries) {
371*6777b538SAndroid Build Coastguard Worker    configs += [ "//third_party/instrumented_libs:locally_built_ldflags" ]
372*6777b538SAndroid Build Coastguard Worker  }
373*6777b538SAndroid Build Coastguard Worker}
374*6777b538SAndroid Build Coastguard Worker
375*6777b538SAndroid Build Coastguard Worker# Add this config to your target to enable precompiled headers.
376*6777b538SAndroid Build Coastguard Worker#
377*6777b538SAndroid Build Coastguard Worker# Precompiled headers are done on a per-target basis. If you have just a couple
378*6777b538SAndroid Build Coastguard Worker# of files, the time it takes to precompile (~2 seconds) can actually be longer
379*6777b538SAndroid Build Coastguard Worker# than the time saved. On a Z620, a 100 file target compiles about 2 seconds
380*6777b538SAndroid Build Coastguard Worker# faster with precompiled headers, with greater savings for larger targets.
381*6777b538SAndroid Build Coastguard Worker#
382*6777b538SAndroid Build Coastguard Worker# Recommend precompiled headers for targets with more than 50 .cc files.
383*6777b538SAndroid Build Coastguard Workerconfig("precompiled_headers") {
384*6777b538SAndroid Build Coastguard Worker  if (enable_precompiled_headers) {
385*6777b538SAndroid Build Coastguard Worker    if (is_win) {
386*6777b538SAndroid Build Coastguard Worker      # This is a string rather than a file GN knows about. It has to match
387*6777b538SAndroid Build Coastguard Worker      # exactly what's in the /FI flag below, and what might appear in the
388*6777b538SAndroid Build Coastguard Worker      # source code in quotes for an #include directive.
389*6777b538SAndroid Build Coastguard Worker      precompiled_header = "build/precompile.h"
390*6777b538SAndroid Build Coastguard Worker
391*6777b538SAndroid Build Coastguard Worker      # This is a file that GN will compile with the above header. It will be
392*6777b538SAndroid Build Coastguard Worker      # implicitly added to the sources (potentially multiple times, with one
393*6777b538SAndroid Build Coastguard Worker      # variant for each language used in the target).
394*6777b538SAndroid Build Coastguard Worker      precompiled_source = "//build/precompile.cc"
395*6777b538SAndroid Build Coastguard Worker
396*6777b538SAndroid Build Coastguard Worker      # Force include the header.
397*6777b538SAndroid Build Coastguard Worker      cflags = [ "/FI$precompiled_header" ]
398*6777b538SAndroid Build Coastguard Worker    } else if (is_mac || is_linux) {
399*6777b538SAndroid Build Coastguard Worker      precompiled_source = "//build/precompile.h"
400*6777b538SAndroid Build Coastguard Worker    }
401*6777b538SAndroid Build Coastguard Worker  }
402*6777b538SAndroid Build Coastguard Worker}
403*6777b538SAndroid Build Coastguard Worker
404*6777b538SAndroid Build Coastguard Worker# Add this config to link steps in order to compress debug sections. This is
405*6777b538SAndroid Build Coastguard Worker# especially useful on 32-bit architectures in order to keep file sizes under
406*6777b538SAndroid Build Coastguard Worker# 4gb.
407*6777b538SAndroid Build Coastguard Workerconfig("compress_debug_sections") {
408*6777b538SAndroid Build Coastguard Worker  ldflags = [ "-gz" ]
409*6777b538SAndroid Build Coastguard Worker}
410