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