| # Copyright 2014 The Chromium Authors. All rights reserved. | 
 | # Use of this source code is governed by a BSD-style license that can be | 
 | # found in the LICENSE file. | 
 |  | 
 | import("//build/config/android/config.gni") | 
 | import("//build/config/c++/c++.gni") | 
 | import("//build/config/compiler/compiler.gni") | 
 | import("//build/config/sanitizers/sanitizers.gni") | 
 |  | 
 | if (current_toolchain == default_toolchain) { | 
 |   import("//build/toolchain/concurrent_links.gni") | 
 | } | 
 |  | 
 | assert(is_android) | 
 |  | 
 | # This is included by reference in the //build/config/compiler config that | 
 | # is applied to all targets. It is here to separate out the logic that is | 
 | # Android-only. | 
 | config("compiler") { | 
 |   cflags = [ | 
 |     "-ffunction-sections", | 
 |     "-fno-short-enums", | 
 |   ] | 
 |   defines = [ | 
 |     "ANDROID", | 
 |  | 
 |     # The NDK has these things, but doesn't define the constants to say that it | 
 |     # does. Define them here instead. | 
 |     "HAVE_SYS_UIO_H", | 
 |  | 
 |     # Forces full rebuilds on NDK rolls. To rebuild everything when NDK version | 
 |     # stays the same, increment the suffix number. | 
 |     "ANDROID_NDK_VERSION_ROLL=${android_ndk_version}_1", | 
 |   ] | 
 |  | 
 |   if (current_cpu == "mips64el") { | 
 |     cflags += [ | 
 |       # Have to force IAS for mips64. | 
 |       "-fintegrated-as", | 
 |     ] | 
 |   } | 
 |  | 
 |   ldflags = [ | 
 |     # Don't allow visible symbols from libgcc or libc++ to be | 
 |     # re-exported. | 
 |     "-Wl,--exclude-libs=libgcc.a", | 
 |  | 
 |     # Don't allow visible symbols from libraries that contain | 
 |     # assembly code with symbols that aren't hidden properly. | 
 |     # http://crbug.com/448386 | 
 |     "-Wl,--exclude-libs=libvpx_assembly_arm.a", | 
 |   ] | 
 |  | 
 |   # TODO(crbug.com/1184398): Move to compiler-rt when we are ready. | 
 |   ldflags += [ "--rtlib=libgcc" ] | 
 |   if (current_cpu == "arm64") { | 
 |     # For outline atomics on AArch64 (can't pass this unconditionally | 
 |     # due to unused flag warning on other targets). | 
 |     cflags += [ "--rtlib=libgcc" ] | 
 |   } | 
 |  | 
 |   # $compile_api_level corresponds to the API level used for the sysroot path | 
 |   # calculation in //build/config/android/config.gni | 
 |   if (android_64bit_target_cpu) { | 
 |     compile_api_level = android64_ndk_api_level | 
 |   } else { | 
 |     compile_api_level = android32_ndk_api_level | 
 |   } | 
 |  | 
 |   cflags += [ "--target=$android_abi_target$compile_api_level" ] | 
 |   ldflags += [ "--target=$android_abi_target$compile_api_level" ] | 
 |  | 
 |   # Assign any flags set for the C compiler to asmflags so that they are sent | 
 |   # to the assembler. | 
 |   asmflags = cflags | 
 | } | 
 |  | 
 | # This is included by reference in the //build/config/compiler:runtime_library | 
 | # config that is applied to all targets. It is here to separate out the logic | 
 | # that is Android-only. Please see that target for advice on what should go in | 
 | # :runtime_library vs. :compiler. | 
 | config("runtime_library") { | 
 |   # Let the linker find libgcc.a. | 
 |   ldflags = [ "--gcc-toolchain=" + | 
 |               rebase_path(android_toolchain_root, root_build_dir) ] | 
 |  | 
 |   libs = [] | 
 |  | 
 |   # On 64-bit platforms, the only symbols provided by libandroid_support.a are | 
 |   # strto{d,f,l,ul}_l. These symbols are not used by our libc++, and newer NDKs | 
 |   # don't provide a libandroid_support.a on 64-bit platforms, so we only depend | 
 |   # on this library on 32-bit platforms. | 
 |   if (current_cpu == "arm" || current_cpu == "x86") { | 
 |     libs += [ "android_support" ] | 
 |   } | 
 |  | 
 |   # arm builds of libc++ starting in NDK r12 depend on unwind. | 
 |   if (current_cpu == "arm") { | 
 |     libs += [ "unwind" ] | 
 |   } | 
 |  | 
 |   if (current_cpu == "arm" && arm_version == 6) { | 
 |     libs += [ "atomic" ] | 
 |   } | 
 |  | 
 |   if (current_cpu == "mipsel") { | 
 |     libs += [ "atomic" ] | 
 |   } | 
 |  | 
 |   # TODO(jdduke) Re-enable on mips after resolving linking | 
 |   # issues with libc++ (crbug.com/456380). | 
 |   if (current_cpu != "mipsel" && current_cpu != "mips64el") { | 
 |     ldflags += [ "-Wl,--warn-shared-textrel" ] | 
 |   } | 
 | } | 
 |  | 
 | config("hide_all_but_jni_onload") { | 
 |   ldflags = [ "-Wl,--version-script=" + rebase_path( | 
 |                   "//build/android/android_only_explicit_jni_exports.lst", | 
 |                   root_build_dir) ] | 
 | } | 
 |  | 
 | config("hide_all_but_jni") { | 
 |   ldflags = [ "-Wl,--version-script=" + | 
 |               rebase_path("//build/android/android_only_jni_exports.lst", | 
 |                           root_build_dir) ] | 
 | } | 
 |  | 
 | config("lld_pack_relocations") { | 
 |   ldflags = [ "-Wl,--pack-dyn-relocs=android" ] | 
 | } | 
 |  | 
 | # Used for instrumented build to generate the orderfile. | 
 | config("default_orderfile_instrumentation") { | 
 |   if (use_order_profiling) { | 
 |     cflags = [ "-finstrument-function-entry-bare" ] | 
 |     if (use_thin_lto) { | 
 |       # TODO(pcc): This should not be necessary. Remove once | 
 |       # https://reviews.llvm.org/D50016 lands and gets rolled in. | 
 |       ldflags = [ "-Wl,-u,__cyg_profile_func_enter_bare" ] | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | if (current_toolchain == default_toolchain) { | 
 |   pool("goma_javac_pool") { | 
 |     # Override action_pool when goma is enabled for javac. | 
 |     depth = 10000 | 
 |   } | 
 |  | 
 |   # When defined, this pool should be used instead of link_pool for command | 
 |   # that need 1-2GB of RAM. https://crbug.com/1078460 | 
 |   if (defined(java_cmd_pool_size)) { | 
 |     pool("java_cmd_pool") { | 
 |       depth = java_cmd_pool_size | 
 |     } | 
 |   } | 
 | } |