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