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