1*8975f5c5SAndroid Build Coastguard Worker# Copyright 2014 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/compiler/compiler.gni") 6*8975f5c5SAndroid Build Coastguard Workerimport("//build/config/sysroot.gni") 7*8975f5c5SAndroid Build Coastguard Workerimport("//build/toolchain/cros/cros_config.gni") 8*8975f5c5SAndroid Build Coastguard Workerimport("//build/toolchain/cros_toolchain.gni") 9*8975f5c5SAndroid Build Coastguard Workerimport("//build/toolchain/gcc_toolchain.gni") 10*8975f5c5SAndroid Build Coastguard Worker 11*8975f5c5SAndroid Build Coastguard Worker# This is mostly identical to gcc_toolchain, but handles relativizing toolchain 12*8975f5c5SAndroid Build Coastguard Worker# paths. This is needed for CrOS since these paths often change based on the 13*8975f5c5SAndroid Build Coastguard Worker# environment. For example, cxx is a relative path picked up on $PATH in the 14*8975f5c5SAndroid Build Coastguard Worker# chroot. But in Simple Chrome, cxx is a system-absolute path. 15*8975f5c5SAndroid Build Coastguard Workertemplate("cros_toolchain") { 16*8975f5c5SAndroid Build Coastguard Worker if (lacros_use_chromium_toolchain) { 17*8975f5c5SAndroid Build Coastguard Worker clang_toolchain(target_name) { 18*8975f5c5SAndroid Build Coastguard Worker forward_variables_from(invoker, "*") 19*8975f5c5SAndroid Build Coastguard Worker } 20*8975f5c5SAndroid Build Coastguard Worker } else { 21*8975f5c5SAndroid Build Coastguard Worker gcc_toolchain(target_name) { 22*8975f5c5SAndroid Build Coastguard Worker forward_variables_from(invoker, "*") 23*8975f5c5SAndroid Build Coastguard Worker 24*8975f5c5SAndroid Build Coastguard Worker toolchain_args.cc_wrapper = "" 25*8975f5c5SAndroid Build Coastguard Worker toolchain_args.clang_use_chrome_plugins = false 26*8975f5c5SAndroid Build Coastguard Worker 27*8975f5c5SAndroid Build Coastguard Worker # CrOS's target toolchain wrapper prefers to invoke rewrapper itself, so 28*8975f5c5SAndroid Build Coastguard Worker # pass it the rewrapper path via cmd-line arg. Otherwise, for both CrOS's 29*8975f5c5SAndroid Build Coastguard Worker # host wrapper (used in the ebuild) and Chrome's clang (used in Simple 30*8975f5c5SAndroid Build Coastguard Worker # Chrome), prepend rewrapper like normal. 31*8975f5c5SAndroid Build Coastguard Worker if (use_reclient && invoker.needs_rewrapper_path_arg) { 32*8975f5c5SAndroid Build Coastguard Worker extra_cppflags += "--rewrapper-path $reclient_cros_cc_wrapper --rewrapper-cfg ${reclient_cc_cfg_file}" 33*8975f5c5SAndroid Build Coastguard Worker } 34*8975f5c5SAndroid Build Coastguard Worker 35*8975f5c5SAndroid Build Coastguard Worker # Relativize path if compiler is specified such that not to lookup from 36*8975f5c5SAndroid Build Coastguard Worker # $PATH and cc/cxx does not contain additional flags. 37*8975f5c5SAndroid Build Coastguard Worker if (cc != get_path_info(cc, "file") && 38*8975f5c5SAndroid Build Coastguard Worker string_replace(cc, " ", "") == cc) { 39*8975f5c5SAndroid Build Coastguard Worker cc = rebase_path(cc, root_build_dir) 40*8975f5c5SAndroid Build Coastguard Worker } 41*8975f5c5SAndroid Build Coastguard Worker if (cxx != get_path_info(cxx, "file") && 42*8975f5c5SAndroid Build Coastguard Worker string_replace(cxx, " ", "") == cxx) { 43*8975f5c5SAndroid Build Coastguard Worker cxx = rebase_path(cxx, root_build_dir) 44*8975f5c5SAndroid Build Coastguard Worker } 45*8975f5c5SAndroid Build Coastguard Worker if (ar != get_path_info(ar, "file") && 46*8975f5c5SAndroid Build Coastguard Worker string_replace(ar, " ", "") == ar) { 47*8975f5c5SAndroid Build Coastguard Worker ar = rebase_path(ar, root_build_dir) 48*8975f5c5SAndroid Build Coastguard Worker } 49*8975f5c5SAndroid Build Coastguard Worker if (ld != get_path_info(ld, "file") && 50*8975f5c5SAndroid Build Coastguard Worker string_replace(ld, " ", "") == ld) { 51*8975f5c5SAndroid Build Coastguard Worker ld = rebase_path(ld, root_build_dir) 52*8975f5c5SAndroid Build Coastguard Worker } 53*8975f5c5SAndroid Build Coastguard Worker } 54*8975f5c5SAndroid Build Coastguard Worker } 55*8975f5c5SAndroid Build Coastguard Worker} 56*8975f5c5SAndroid Build Coastguard Worker 57*8975f5c5SAndroid Build Coastguard Worker# This is the normal toolchain for most targets. 58*8975f5c5SAndroid Build Coastguard Workercros_toolchain("target") { 59*8975f5c5SAndroid Build Coastguard Worker toolchain_args = { 60*8975f5c5SAndroid Build Coastguard Worker current_cpu = target_cpu 61*8975f5c5SAndroid Build Coastguard Worker current_os = "chromeos" 62*8975f5c5SAndroid Build Coastguard Worker sysroot = target_sysroot 63*8975f5c5SAndroid Build Coastguard Worker } 64*8975f5c5SAndroid Build Coastguard Worker 65*8975f5c5SAndroid Build Coastguard Worker if (!lacros_use_chromium_toolchain) { 66*8975f5c5SAndroid Build Coastguard Worker ar = cros_target_ar 67*8975f5c5SAndroid Build Coastguard Worker cc = cros_target_cc 68*8975f5c5SAndroid Build Coastguard Worker cxx = cros_target_cxx 69*8975f5c5SAndroid Build Coastguard Worker ld = cros_target_ld 70*8975f5c5SAndroid Build Coastguard Worker 71*8975f5c5SAndroid Build Coastguard Worker if (cros_target_nm != "") { 72*8975f5c5SAndroid Build Coastguard Worker nm = cros_target_nm 73*8975f5c5SAndroid Build Coastguard Worker } 74*8975f5c5SAndroid Build Coastguard Worker if (cros_target_readelf != "") { 75*8975f5c5SAndroid Build Coastguard Worker readelf = cros_target_readelf 76*8975f5c5SAndroid Build Coastguard Worker } 77*8975f5c5SAndroid Build Coastguard Worker extra_cflags = cros_target_extra_cflags 78*8975f5c5SAndroid Build Coastguard Worker extra_cppflags = cros_target_extra_cppflags 79*8975f5c5SAndroid Build Coastguard Worker extra_cxxflags = cros_target_extra_cxxflags 80*8975f5c5SAndroid Build Coastguard Worker extra_ldflags = cros_target_extra_ldflags 81*8975f5c5SAndroid Build Coastguard Worker 82*8975f5c5SAndroid Build Coastguard Worker needs_rewrapper_path_arg = true 83*8975f5c5SAndroid Build Coastguard Worker } 84*8975f5c5SAndroid Build Coastguard Worker} 85*8975f5c5SAndroid Build Coastguard Worker 86*8975f5c5SAndroid Build Coastguard Worker# This is a special toolchain needed just for the nacl_bootstrap target in 87*8975f5c5SAndroid Build Coastguard Worker# //native_client/src/trusted/service_runtime/linux. It is identical 88*8975f5c5SAndroid Build Coastguard Worker# to ":target" except that it forces `use_debug_fission1 and `use_sysroot` off, 89*8975f5c5SAndroid Build Coastguard Worker# and allows the user to set different sets of extra flags. 90*8975f5c5SAndroid Build Coastguard Workercros_toolchain("nacl_bootstrap") { 91*8975f5c5SAndroid Build Coastguard Worker toolchain_args = { 92*8975f5c5SAndroid Build Coastguard Worker if (target_cpu == "arm64") { 93*8975f5c5SAndroid Build Coastguard Worker current_cpu = "arm" 94*8975f5c5SAndroid Build Coastguard Worker } else { 95*8975f5c5SAndroid Build Coastguard Worker current_cpu = target_cpu 96*8975f5c5SAndroid Build Coastguard Worker } 97*8975f5c5SAndroid Build Coastguard Worker current_os = "chromeos" 98*8975f5c5SAndroid Build Coastguard Worker use_debug_fission = false 99*8975f5c5SAndroid Build Coastguard Worker use_sysroot = false 100*8975f5c5SAndroid Build Coastguard Worker } 101*8975f5c5SAndroid Build Coastguard Worker 102*8975f5c5SAndroid Build Coastguard Worker if (!lacros_use_chromium_toolchain) { 103*8975f5c5SAndroid Build Coastguard Worker ar = cros_target_ar 104*8975f5c5SAndroid Build Coastguard Worker cc = cros_target_cc 105*8975f5c5SAndroid Build Coastguard Worker cxx = cros_target_cxx 106*8975f5c5SAndroid Build Coastguard Worker ld = cros_target_ld 107*8975f5c5SAndroid Build Coastguard Worker 108*8975f5c5SAndroid Build Coastguard Worker if (cros_target_nm != "") { 109*8975f5c5SAndroid Build Coastguard Worker nm = cros_target_nm 110*8975f5c5SAndroid Build Coastguard Worker } 111*8975f5c5SAndroid Build Coastguard Worker if (cros_target_readelf != "") { 112*8975f5c5SAndroid Build Coastguard Worker readelf = cros_target_readelf 113*8975f5c5SAndroid Build Coastguard Worker } 114*8975f5c5SAndroid Build Coastguard Worker extra_cflags = cros_nacl_bootstrap_extra_cflags 115*8975f5c5SAndroid Build Coastguard Worker extra_cppflags = cros_nacl_bootstrap_extra_cppflags 116*8975f5c5SAndroid Build Coastguard Worker extra_cxxflags = cros_nacl_bootstrap_extra_cxxflags 117*8975f5c5SAndroid Build Coastguard Worker extra_ldflags = cros_nacl_bootstrap_extra_ldflags 118*8975f5c5SAndroid Build Coastguard Worker 119*8975f5c5SAndroid Build Coastguard Worker needs_rewrapper_path_arg = true 120*8975f5c5SAndroid Build Coastguard Worker } 121*8975f5c5SAndroid Build Coastguard Worker 122*8975f5c5SAndroid Build Coastguard Worker # We build for ARM32, even when the rest of the build targets ARM64. 123*8975f5c5SAndroid Build Coastguard Worker if (target_cpu == "arm64") { 124*8975f5c5SAndroid Build Coastguard Worker ar = cros_nacl_helper_arm32_ar 125*8975f5c5SAndroid Build Coastguard Worker cc = cros_nacl_helper_arm32_cc 126*8975f5c5SAndroid Build Coastguard Worker cxx = cros_nacl_helper_arm32_cxx 127*8975f5c5SAndroid Build Coastguard Worker ld = cros_nacl_helper_arm32_ld 128*8975f5c5SAndroid Build Coastguard Worker 129*8975f5c5SAndroid Build Coastguard Worker # Avoid accidental use of Arm64 sysroot because of SYSROOT 130*8975f5c5SAndroid Build Coastguard Worker # env variable set in ChromeOS builds. 131*8975f5c5SAndroid Build Coastguard Worker toolchain_args.sysroot = cros_nacl_helper_arm32_sysroot 132*8975f5c5SAndroid Build Coastguard Worker } 133*8975f5c5SAndroid Build Coastguard Worker} 134*8975f5c5SAndroid Build Coastguard Worker 135*8975f5c5SAndroid Build Coastguard Worker# This is a special toolchain needed just for the nacl_helper target for 136*8975f5c5SAndroid Build Coastguard Worker# building an Arm32 nacl_helper binary on Arm64 ChromeOS targets. 137*8975f5c5SAndroid Build Coastguard Workercros_toolchain("nacl_helper_arm32") { 138*8975f5c5SAndroid Build Coastguard Worker toolchain_args = { 139*8975f5c5SAndroid Build Coastguard Worker current_cpu = "arm" 140*8975f5c5SAndroid Build Coastguard Worker current_os = "chromeos" 141*8975f5c5SAndroid Build Coastguard Worker use_debug_fission = false 142*8975f5c5SAndroid Build Coastguard Worker sysroot = cros_nacl_helper_arm32_sysroot 143*8975f5c5SAndroid Build Coastguard Worker 144*8975f5c5SAndroid Build Coastguard Worker # Disable some uses of libraries that this build does not require. The 145*8975f5c5SAndroid Build Coastguard Worker # sysroot for this build does not provide them, and they would be pulled in 146*8975f5c5SAndroid Build Coastguard Worker # by indirect dependencies of nacl_helper otherwise. 147*8975f5c5SAndroid Build Coastguard Worker use_cras = false 148*8975f5c5SAndroid Build Coastguard Worker use_nss_certs = false 149*8975f5c5SAndroid Build Coastguard Worker use_system_libdrm = false 150*8975f5c5SAndroid Build Coastguard Worker use_system_libsync = false 151*8975f5c5SAndroid Build Coastguard Worker } 152*8975f5c5SAndroid Build Coastguard Worker ar = cros_nacl_helper_arm32_ar 153*8975f5c5SAndroid Build Coastguard Worker cc = cros_nacl_helper_arm32_cc 154*8975f5c5SAndroid Build Coastguard Worker cxx = cros_nacl_helper_arm32_cxx 155*8975f5c5SAndroid Build Coastguard Worker ld = cros_nacl_helper_arm32_ld 156*8975f5c5SAndroid Build Coastguard Worker readelf = cros_nacl_helper_arm32_readelf 157*8975f5c5SAndroid Build Coastguard Worker 158*8975f5c5SAndroid Build Coastguard Worker extra_cflags = "" 159*8975f5c5SAndroid Build Coastguard Worker extra_cppflags = "" 160*8975f5c5SAndroid Build Coastguard Worker extra_cxxflags = "" 161*8975f5c5SAndroid Build Coastguard Worker extra_ldflags = "" 162*8975f5c5SAndroid Build Coastguard Worker 163*8975f5c5SAndroid Build Coastguard Worker if (!lacros_use_chromium_toolchain) { 164*8975f5c5SAndroid Build Coastguard Worker needs_rewrapper_path_arg = true 165*8975f5c5SAndroid Build Coastguard Worker } 166*8975f5c5SAndroid Build Coastguard Worker} 167*8975f5c5SAndroid Build Coastguard Worker 168*8975f5c5SAndroid Build Coastguard Workercros_toolchain("host") { 169*8975f5c5SAndroid Build Coastguard Worker toolchain_args = { 170*8975f5c5SAndroid Build Coastguard Worker current_cpu = host_cpu 171*8975f5c5SAndroid Build Coastguard Worker current_os = "linux" 172*8975f5c5SAndroid Build Coastguard Worker sysroot = cros_host_sysroot 173*8975f5c5SAndroid Build Coastguard Worker } 174*8975f5c5SAndroid Build Coastguard Worker 175*8975f5c5SAndroid Build Coastguard Worker if (!lacros_use_chromium_toolchain) { 176*8975f5c5SAndroid Build Coastguard Worker # These are args for the template. 177*8975f5c5SAndroid Build Coastguard Worker ar = cros_host_ar 178*8975f5c5SAndroid Build Coastguard Worker cc = cros_host_cc 179*8975f5c5SAndroid Build Coastguard Worker cxx = cros_host_cxx 180*8975f5c5SAndroid Build Coastguard Worker ld = cros_host_ld 181*8975f5c5SAndroid Build Coastguard Worker 182*8975f5c5SAndroid Build Coastguard Worker if (cros_host_nm != "") { 183*8975f5c5SAndroid Build Coastguard Worker nm = cros_host_nm 184*8975f5c5SAndroid Build Coastguard Worker } 185*8975f5c5SAndroid Build Coastguard Worker if (cros_host_readelf != "") { 186*8975f5c5SAndroid Build Coastguard Worker readelf = cros_host_readelf 187*8975f5c5SAndroid Build Coastguard Worker } 188*8975f5c5SAndroid Build Coastguard Worker extra_cflags = cros_host_extra_cflags 189*8975f5c5SAndroid Build Coastguard Worker extra_cppflags = cros_host_extra_cppflags 190*8975f5c5SAndroid Build Coastguard Worker extra_cxxflags = cros_host_extra_cxxflags 191*8975f5c5SAndroid Build Coastguard Worker extra_ldflags = cros_host_extra_ldflags 192*8975f5c5SAndroid Build Coastguard Worker 193*8975f5c5SAndroid Build Coastguard Worker needs_rewrapper_path_arg = false 194*8975f5c5SAndroid Build Coastguard Worker } 195*8975f5c5SAndroid Build Coastguard Worker} 196*8975f5c5SAndroid Build Coastguard Worker 197*8975f5c5SAndroid Build Coastguard Workercros_toolchain("v8_snapshot") { 198*8975f5c5SAndroid Build Coastguard Worker toolchain_args = { 199*8975f5c5SAndroid Build Coastguard Worker if (target_cpu == "x86" || target_cpu == "arm" || target_cpu == "mipsel") { 200*8975f5c5SAndroid Build Coastguard Worker current_cpu = "x86" 201*8975f5c5SAndroid Build Coastguard Worker } else { 202*8975f5c5SAndroid Build Coastguard Worker current_cpu = "x64" 203*8975f5c5SAndroid Build Coastguard Worker } 204*8975f5c5SAndroid Build Coastguard Worker v8_current_cpu = v8_target_cpu 205*8975f5c5SAndroid Build Coastguard Worker current_os = "linux" 206*8975f5c5SAndroid Build Coastguard Worker sysroot = cros_v8_snapshot_sysroot 207*8975f5c5SAndroid Build Coastguard Worker } 208*8975f5c5SAndroid Build Coastguard Worker 209*8975f5c5SAndroid Build Coastguard Worker if (!lacros_use_chromium_toolchain) { 210*8975f5c5SAndroid Build Coastguard Worker # These are args for the template. 211*8975f5c5SAndroid Build Coastguard Worker ar = cros_v8_snapshot_ar 212*8975f5c5SAndroid Build Coastguard Worker cc = cros_v8_snapshot_cc 213*8975f5c5SAndroid Build Coastguard Worker cxx = cros_v8_snapshot_cxx 214*8975f5c5SAndroid Build Coastguard Worker ld = cros_v8_snapshot_ld 215*8975f5c5SAndroid Build Coastguard Worker 216*8975f5c5SAndroid Build Coastguard Worker if (cros_v8_snapshot_nm != "") { 217*8975f5c5SAndroid Build Coastguard Worker nm = cros_v8_snapshot_nm 218*8975f5c5SAndroid Build Coastguard Worker } 219*8975f5c5SAndroid Build Coastguard Worker if (cros_v8_snapshot_readelf != "") { 220*8975f5c5SAndroid Build Coastguard Worker readelf = cros_v8_snapshot_readelf 221*8975f5c5SAndroid Build Coastguard Worker } 222*8975f5c5SAndroid Build Coastguard Worker extra_cflags = cros_v8_snapshot_extra_cflags 223*8975f5c5SAndroid Build Coastguard Worker extra_cppflags = cros_v8_snapshot_extra_cppflags 224*8975f5c5SAndroid Build Coastguard Worker extra_cxxflags = cros_v8_snapshot_extra_cxxflags 225*8975f5c5SAndroid Build Coastguard Worker extra_ldflags = cros_v8_snapshot_extra_ldflags 226*8975f5c5SAndroid Build Coastguard Worker 227*8975f5c5SAndroid Build Coastguard Worker needs_rewrapper_path_arg = false 228*8975f5c5SAndroid Build Coastguard Worker } 229*8975f5c5SAndroid Build Coastguard Worker} 230