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/android/config.gni") 6*6777b538SAndroid Build Coastguard Workerimport("//build/config/chrome_build.gni") 7*6777b538SAndroid Build Coastguard Workerimport("//build/config/clang/clang.gni") 8*6777b538SAndroid Build Coastguard Workerimport("//build/config/compiler/compiler.gni") 9*6777b538SAndroid Build Coastguard Workerimport("//build/config/ozone.gni") 10*6777b538SAndroid Build Coastguard Workerimport("//build/config/sysroot.gni") # Imports android/config.gni. 11*6777b538SAndroid Build Coastguard Workerimport("//build/toolchain/gcc_toolchain.gni") 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Workerdeclare_args() { 14*6777b538SAndroid Build Coastguard Worker # Whether unstripped binaries, i.e. compiled with debug symbols, should be 15*6777b538SAndroid Build Coastguard Worker # considered runtime_deps rather than stripped ones. 16*6777b538SAndroid Build Coastguard Worker android_unstripped_runtime_outputs = true 17*6777b538SAndroid Build Coastguard Worker} 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Workertemplate("android_clang_toolchain") { 20*6777b538SAndroid Build Coastguard Worker clang_toolchain(target_name) { 21*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.toolchain_args), 22*6777b538SAndroid Build Coastguard Worker "toolchain_args must be defined for android_clang_toolchain()") 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker toolchain_args = { 25*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker.toolchain_args, "*") 26*6777b538SAndroid Build Coastguard Worker current_os = "android" 27*6777b538SAndroid Build Coastguard Worker use_debug_fission = false 28*6777b538SAndroid Build Coastguard Worker is_high_end_android = is_high_end_android_secondary_toolchain 29*6777b538SAndroid Build Coastguard Worker } 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker # Output linker map files for binary size analysis. 32*6777b538SAndroid Build Coastguard Worker enable_linker_map = true 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Worker strip = rebase_path("$clang_base_path/bin/llvm-strip", root_build_dir) 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker use_unstripped_as_runtime_outputs = android_unstripped_runtime_outputs 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker # Don't use .cr.so for loadable_modules since they are always loaded via 39*6777b538SAndroid Build Coastguard Worker # absolute path. 40*6777b538SAndroid Build Coastguard Worker loadable_module_extension = ".so" 41*6777b538SAndroid Build Coastguard Worker 42*6777b538SAndroid Build Coastguard Worker # We propagate configs to allow cross-toolchain JNI include directories to 43*6777b538SAndroid Build Coastguard Worker # work. This flag does not otherwise affect our build, but if applied to 44*6777b538SAndroid Build Coastguard Worker # non-android toolchains, it causes unwanted configs from perfetto to 45*6777b538SAndroid Build Coastguard Worker # propagate from host_toolchain deps. 46*6777b538SAndroid Build Coastguard Worker propagates_configs = true 47*6777b538SAndroid Build Coastguard Worker } 48*6777b538SAndroid Build Coastguard Worker} 49*6777b538SAndroid Build Coastguard Worker 50*6777b538SAndroid Build Coastguard Workerandroid_clang_toolchain("android_clang_x86") { 51*6777b538SAndroid Build Coastguard Worker toolchain_args = { 52*6777b538SAndroid Build Coastguard Worker current_cpu = "x86" 53*6777b538SAndroid Build Coastguard Worker 54*6777b538SAndroid Build Coastguard Worker # This turns off all of the LaCrOS-specific flags. A LaCrOS related build 55*6777b538SAndroid Build Coastguard Worker # may use |ash_clang_x64| or |lacros_clang_x64| toolchain, which are 56*6777b538SAndroid Build Coastguard Worker # chromeos toolchains, to build Ash-Chrome or Lacros-Chrome in a 57*6777b538SAndroid Build Coastguard Worker # subdirectory, and because chromeos toolchain uses android toolchain, which 58*6777b538SAndroid Build Coastguard Worker # eventually resulted in that android toolchains being used inside a LaCrOS 59*6777b538SAndroid Build Coastguard Worker # build. 60*6777b538SAndroid Build Coastguard Worker also_build_ash_chrome = false 61*6777b538SAndroid Build Coastguard Worker also_build_lacros_chrome = false 62*6777b538SAndroid Build Coastguard Worker chromeos_is_browser_only = false 63*6777b538SAndroid Build Coastguard Worker ozone_platform = "" 64*6777b538SAndroid Build Coastguard Worker ozone_platform_wayland = false 65*6777b538SAndroid Build Coastguard Worker } 66*6777b538SAndroid Build Coastguard Worker} 67*6777b538SAndroid Build Coastguard Worker 68*6777b538SAndroid Build Coastguard Workerandroid_clang_toolchain("android_clang_arm") { 69*6777b538SAndroid Build Coastguard Worker toolchain_args = { 70*6777b538SAndroid Build Coastguard Worker current_cpu = "arm" 71*6777b538SAndroid Build Coastguard Worker } 72*6777b538SAndroid Build Coastguard Worker} 73*6777b538SAndroid Build Coastguard Worker 74*6777b538SAndroid Build Coastguard Workerandroid_clang_toolchain("android_clang_mipsel") { 75*6777b538SAndroid Build Coastguard Worker toolchain_args = { 76*6777b538SAndroid Build Coastguard Worker current_cpu = "mipsel" 77*6777b538SAndroid Build Coastguard Worker } 78*6777b538SAndroid Build Coastguard Worker} 79*6777b538SAndroid Build Coastguard Worker 80*6777b538SAndroid Build Coastguard Workerandroid_clang_toolchain("android_clang_x64") { 81*6777b538SAndroid Build Coastguard Worker toolchain_args = { 82*6777b538SAndroid Build Coastguard Worker current_cpu = "x64" 83*6777b538SAndroid Build Coastguard Worker 84*6777b538SAndroid Build Coastguard Worker # This turns off all of the LaCrOS-specific flags. A LaCrOS related build 85*6777b538SAndroid Build Coastguard Worker # may use |ash_clang_x64| or |lacros_clang_x64| toolchain, which are 86*6777b538SAndroid Build Coastguard Worker # chromeos toolchains, to build Ash-Chrome or Lacros-Chrome in a 87*6777b538SAndroid Build Coastguard Worker # subdirectory, and because chromeos toolchain uses android toolchain, which 88*6777b538SAndroid Build Coastguard Worker # eventually resulted in that android toolchains being used inside a LaCrOS 89*6777b538SAndroid Build Coastguard Worker # build. 90*6777b538SAndroid Build Coastguard Worker also_build_ash_chrome = false 91*6777b538SAndroid Build Coastguard Worker also_build_lacros_chrome = false 92*6777b538SAndroid Build Coastguard Worker chromeos_is_browser_only = false 93*6777b538SAndroid Build Coastguard Worker ozone_platform = "" 94*6777b538SAndroid Build Coastguard Worker ozone_platform_wayland = false 95*6777b538SAndroid Build Coastguard Worker } 96*6777b538SAndroid Build Coastguard Worker} 97*6777b538SAndroid Build Coastguard Worker 98*6777b538SAndroid Build Coastguard Workerandroid_clang_toolchain("android_clang_arm64") { 99*6777b538SAndroid Build Coastguard Worker toolchain_args = { 100*6777b538SAndroid Build Coastguard Worker current_cpu = "arm64" 101*6777b538SAndroid Build Coastguard Worker } 102*6777b538SAndroid Build Coastguard Worker} 103*6777b538SAndroid Build Coastguard Worker 104*6777b538SAndroid Build Coastguard Workerandroid_clang_toolchain("android_clang_arm64_hwasan") { 105*6777b538SAndroid Build Coastguard Worker toolchain_args = { 106*6777b538SAndroid Build Coastguard Worker current_cpu = "arm64" 107*6777b538SAndroid Build Coastguard Worker is_hwasan = true 108*6777b538SAndroid Build Coastguard Worker android64_ndk_api_level = 29 109*6777b538SAndroid Build Coastguard Worker } 110*6777b538SAndroid Build Coastguard Worker} 111*6777b538SAndroid Build Coastguard Worker 112*6777b538SAndroid Build Coastguard Workerandroid_clang_toolchain("android_clang_mips64el") { 113*6777b538SAndroid Build Coastguard Worker toolchain_args = { 114*6777b538SAndroid Build Coastguard Worker current_cpu = "mips64el" 115*6777b538SAndroid Build Coastguard Worker } 116*6777b538SAndroid Build Coastguard Worker} 117*6777b538SAndroid Build Coastguard Worker 118*6777b538SAndroid Build Coastguard Worker# Placeholder for riscv64 support, not tested since the toolchain is not ready. 119*6777b538SAndroid Build Coastguard Workerandroid_clang_toolchain("android_clang_riscv64") { 120*6777b538SAndroid Build Coastguard Worker toolchain_args = { 121*6777b538SAndroid Build Coastguard Worker current_cpu = "riscv64" 122*6777b538SAndroid Build Coastguard Worker } 123*6777b538SAndroid Build Coastguard Worker} 124*6777b538SAndroid Build Coastguard Worker 125*6777b538SAndroid Build Coastguard Worker# Toolchain for creating native libraries that can be used by 126*6777b538SAndroid Build Coastguard Worker# robolectric_binary targets. It does not emulate NDK APIs nor make available 127*6777b538SAndroid Build Coastguard Worker# NDK header files. 128*6777b538SAndroid Build Coastguard Worker# Targets that opt into defining JNI entrypoints should use the 129*6777b538SAndroid Build Coastguard Worker# //third_party/jdk:jdk config to make jni.h available. 130*6777b538SAndroid Build Coastguard Worker# This toolchain will set: 131*6777b538SAndroid Build Coastguard Worker# is_linux = true 132*6777b538SAndroid Build Coastguard Worker# is_android = false 133*6777b538SAndroid Build Coastguard Worker# is_robolectric = true 134*6777b538SAndroid Build Coastguard Workerclang_toolchain("robolectric_$host_cpu") { 135*6777b538SAndroid Build Coastguard Worker toolchain_args = { 136*6777b538SAndroid Build Coastguard Worker current_os = host_os 137*6777b538SAndroid Build Coastguard Worker current_cpu = host_cpu 138*6777b538SAndroid Build Coastguard Worker is_robolectric = true 139*6777b538SAndroid Build Coastguard Worker } 140*6777b538SAndroid Build Coastguard Worker 141*6777b538SAndroid Build Coastguard Worker # TODO(crbug.com/1487407): Figure out why robolectric tests fail with component builds. 142*6777b538SAndroid Build Coastguard Worker toolchain_args.is_component_build = false 143*6777b538SAndroid Build Coastguard Worker shlib_extension = ".so" 144*6777b538SAndroid Build Coastguard Worker} 145