# Copyright 2013 The Chromium Authors # 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/clang/clang.gni") import("//build/config/compiler/compiler.gni") import("//build/config/ozone.gni") import("//build/config/sysroot.gni") # Imports android/config.gni. import("//build/toolchain/gcc_toolchain.gni") declare_args() { # Whether unstripped binaries, i.e. compiled with debug symbols, should be # considered runtime_deps rather than stripped ones. android_unstripped_runtime_outputs = true } template("android_clang_toolchain") { clang_toolchain(target_name) { assert(defined(invoker.toolchain_args), "toolchain_args must be defined for android_clang_toolchain()") # Android toolchains need to declare .dwp files as outputs, so need to know # the value of "use_debug_fission" when defining them. # The derived value of "use_debug_fission" varies based on current_os, but # toolchain definitions are evaluated under the default toolchain. # Rather than computing the value under current_os="android", just disable # it if target_os != "android". _use_debug_fission = use_debug_fission && target_os == "android" toolchain_args = { forward_variables_from(invoker.toolchain_args, "*") current_os = "android" use_debug_fission = _use_debug_fission } # Output linker map files for binary size analysis. enable_linker_map = true strip = rebase_path("$clang_base_path/bin/llvm-strip", root_build_dir) if (_use_debug_fission) { # llvm-dwp does not work with thin lto, so use binutils one. # https://crbug.com/1264130 if (toolchain_args.current_cpu == "arm") { _dwp = "arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-dwp" } else if (toolchain_args.current_cpu == "arm64") { _dwp = "aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-dwp" } else if (toolchain_args.current_cpu == "x86") { _dwp = "x86-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-dwp" } else if (toolchain_args.current_cpu == "x64") { _dwp = "x86_64-4.9/prebuilt/linux-x86_64/bin/x86_64-linux-android-dwp" } else { _dwp = "llvm/prebuilt/linux-x86_64/bin/llvm-dwp" } dwp = rebase_path("$android_ndk_root/toolchains/$_dwp", root_build_dir) } use_unstripped_as_runtime_outputs = android_unstripped_runtime_outputs # Don't use .cr.so for loadable_modules since they are always loaded via # absolute path. loadable_module_extension = ".so" # We propagate configs to allow cross-toolchain JNI include directories to # work. This flag does not otherwise affect our build, but if applied to # non-android toolchains, it causes unwanted configs from perfetto to # propagate from host_toolchain deps. propagates_configs = true } } android_clang_toolchain("android_clang_x86") { toolchain_args = { current_cpu = "x86" # We lack the libclang_rt.profile library for x86 and x86_64, so we cannot # link any binaries that are generated with coverage instrumentation. # Therefore we need to turn off 'use_clang_coverage' for this toolchain. # TODO(crbug.com/865376) use_clang_coverage = false # This turns off all of the LaCrOS-specific flags. A LaCrOS related build # may use |ash_clang_x64| or |lacros_clang_x64| toolchain, which are # chromeos toolchains, to build Ash-Chrome or Lacros-Chrome in a # subdirectory, and because chromeos toolchain uses android toolchain, which # eventually resulted in that android toolchains being used inside a LaCrOS # build. also_build_ash_chrome = false also_build_lacros_chrome = false chromeos_is_browser_only = false ozone_platform = "" ozone_platform_wayland = false } } android_clang_toolchain("android_clang_arm") { toolchain_args = { current_cpu = "arm" } } android_clang_toolchain("android_clang_mipsel") { toolchain_args = { current_cpu = "mipsel" } } android_clang_toolchain("android_clang_x64") { toolchain_args = { current_cpu = "x64" # We lack the libclang_rt.profile library for x86 and x86_64, so we cannot # link any binaries that are generated with coverage instrumentation. # Therefore we need to turn off 'use_clang_coverage' for this toolchain. # TODO(crbug.com/865376) use_clang_coverage = false # This turns off all of the LaCrOS-specific flags. A LaCrOS related build # may use |ash_clang_x64| or |lacros_clang_x64| toolchain, which are # chromeos toolchains, to build Ash-Chrome or Lacros-Chrome in a # subdirectory, and because chromeos toolchain uses android toolchain, which # eventually resulted in that android toolchains being used inside a LaCrOS # build. also_build_ash_chrome = false also_build_lacros_chrome = false chromeos_is_browser_only = false ozone_platform = "" ozone_platform_wayland = false } } android_clang_toolchain("android_clang_arm64") { toolchain_args = { current_cpu = "arm64" } } android_clang_toolchain("android_clang_arm64_hwasan") { toolchain_args = { current_cpu = "arm64" is_hwasan = true android64_ndk_api_level = 29 } } android_clang_toolchain("android_clang_mips64el") { toolchain_args = { current_cpu = "mips64el" } } # Toolchain for creating native libraries that can be used by # robolectric_binary targets. It does not emulate NDK APIs nor make available # NDK header files. # Targets that opt into defining JNI entrypoints should use the # //third_party/jdk:jdk config to make jni.h available. # This toolchain will set: # is_linux = true # is_android = false # is_robolectric = true clang_toolchain("robolectric_$host_cpu") { toolchain_args = { current_os = host_os current_cpu = host_cpu is_robolectric = true } }