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