1*6777b538SAndroid Build Coastguard Worker# Copyright (c) 2014 The Native Client Authors. All rights reserved. 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/nacl/config.gni") 6*6777b538SAndroid Build Coastguard Workerimport("//build/config/sysroot.gni") 7*6777b538SAndroid Build Coastguard Workerimport("//build/toolchain/nacl_toolchain.gni") 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker# Add the toolchain revision as a preprocessor define so that sources are 10*6777b538SAndroid Build Coastguard Worker# rebuilt when a toolchain is updated. 11*6777b538SAndroid Build Coastguard Worker# Idea we could use the toolchain deps feature, but currently that feature is 12*6777b538SAndroid Build Coastguard Worker# bugged and does not trigger a rebuild. 13*6777b538SAndroid Build Coastguard Worker# https://code.google.com/p/chromium/issues/detail?id=431880 14*6777b538SAndroid Build Coastguard Worker# Calls to get the toolchain revision are relatively slow, so do them all in a 15*6777b538SAndroid Build Coastguard Worker# single batch to amortize python startup, etc. 16*6777b538SAndroid Build Coastguard Workerrevisions = exec_script("//native_client/build/get_toolchain_revision.py", 17*6777b538SAndroid Build Coastguard Worker [ 18*6777b538SAndroid Build Coastguard Worker "nacl_x86_glibc", 19*6777b538SAndroid Build Coastguard Worker "nacl_arm_glibc", 20*6777b538SAndroid Build Coastguard Worker "pnacl_newlib", 21*6777b538SAndroid Build Coastguard Worker "saigo_newlib", 22*6777b538SAndroid Build Coastguard Worker ], 23*6777b538SAndroid Build Coastguard Worker "trim list lines") 24*6777b538SAndroid Build Coastguard Workernacl_x86_glibc_rev = revisions[0] 25*6777b538SAndroid Build Coastguard Workernacl_arm_glibc_rev = revisions[1] 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Workerpnacl_newlib_rev = revisions[2] 28*6777b538SAndroid Build Coastguard Workersaigo_newlib_rev = revisions[3] 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Workerif (host_os == "win") { 31*6777b538SAndroid Build Coastguard Worker toolsuffix = ".exe" 32*6777b538SAndroid Build Coastguard Worker} else { 33*6777b538SAndroid Build Coastguard Worker toolsuffix = "" 34*6777b538SAndroid Build Coastguard Worker} 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker# The PNaCl toolchain tools are all wrapper scripts rather than binary 37*6777b538SAndroid Build Coastguard Worker# executables. On POSIX systems, nobody cares what kind of executable 38*6777b538SAndroid Build Coastguard Worker# file you are. But on Windows, scripts (.bat files) cannot be run 39*6777b538SAndroid Build Coastguard Worker# directly and need the Windows shell (cmd.exe) specified explicily. 40*6777b538SAndroid Build Coastguard Workerif (host_os == "win") { 41*6777b538SAndroid Build Coastguard Worker # NOTE! The //build/toolchain/gcc_*_wrapper.py scripts recognize 42*6777b538SAndroid Build Coastguard Worker # this exact prefix string, so they must be updated if this string 43*6777b538SAndroid Build Coastguard Worker # is changed in any way. 44*6777b538SAndroid Build Coastguard Worker scriptprefix = "cmd /c call " 45*6777b538SAndroid Build Coastguard Worker scriptsuffix = ".bat" 46*6777b538SAndroid Build Coastguard Worker} else { 47*6777b538SAndroid Build Coastguard Worker scriptprefix = "" 48*6777b538SAndroid Build Coastguard Worker scriptsuffix = "" 49*6777b538SAndroid Build Coastguard Worker} 50*6777b538SAndroid Build Coastguard Worker 51*6777b538SAndroid Build Coastguard Worker# When the compilers are run via goma, rbe or ccache rather than directly by 52*6777b538SAndroid Build Coastguard Worker# GN/Ninja, the rbe/goma/ccache wrapper handles .bat files but gets confused 53*6777b538SAndroid Build Coastguard Worker# by being given the scriptprefix. 54*6777b538SAndroid Build Coastguard Workerif (host_os == "win" && !use_goma && !use_remoteexec && cc_wrapper == "") { 55*6777b538SAndroid Build Coastguard Worker compiler_scriptprefix = scriptprefix 56*6777b538SAndroid Build Coastguard Worker} else { 57*6777b538SAndroid Build Coastguard Worker compiler_scriptprefix = "" 58*6777b538SAndroid Build Coastguard Worker} 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard Workertemplate("pnacl_toolchain") { 61*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.executable_extension), 62*6777b538SAndroid Build Coastguard Worker "Must define executable_extension") 63*6777b538SAndroid Build Coastguard Worker 64*6777b538SAndroid Build Coastguard Worker nacl_toolchain(target_name) { 65*6777b538SAndroid Build Coastguard Worker toolchain_package = "pnacl_newlib" 66*6777b538SAndroid Build Coastguard Worker toolchain_revision = pnacl_newlib_rev 67*6777b538SAndroid Build Coastguard Worker toolprefix = 68*6777b538SAndroid Build Coastguard Worker rebase_path("${nacl_toolchain_dir}/${toolchain_package}/bin/pnacl-", 69*6777b538SAndroid Build Coastguard Worker root_build_dir) 70*6777b538SAndroid Build Coastguard Worker 71*6777b538SAndroid Build Coastguard Worker if (host_os == "win") { 72*6777b538SAndroid Build Coastguard Worker # Flip the slashes so that copy/paste of the commands works. 73*6777b538SAndroid Build Coastguard Worker # This is also done throughout build\toolchain\win\BUILD.gn 74*6777b538SAndroid Build Coastguard Worker toolprefix = string_replace(toolprefix, "/", "\\") 75*6777b538SAndroid Build Coastguard Worker } 76*6777b538SAndroid Build Coastguard Worker 77*6777b538SAndroid Build Coastguard Worker cc = compiler_scriptprefix + toolprefix + "clang" + scriptsuffix 78*6777b538SAndroid Build Coastguard Worker cxx = compiler_scriptprefix + toolprefix + "clang++" + scriptsuffix 79*6777b538SAndroid Build Coastguard Worker ar = toolprefix + "ar" + scriptsuffix 80*6777b538SAndroid Build Coastguard Worker readelf = scriptprefix + toolprefix + "readelf" + scriptsuffix 81*6777b538SAndroid Build Coastguard Worker nm = scriptprefix + toolprefix + "nm" + scriptsuffix 82*6777b538SAndroid Build Coastguard Worker if (defined(invoker.strip)) { 83*6777b538SAndroid Build Coastguard Worker strip = scriptprefix + toolprefix + invoker.strip + scriptsuffix 84*6777b538SAndroid Build Coastguard Worker } 85*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 86*6777b538SAndroid Build Coastguard Worker [ 87*6777b538SAndroid Build Coastguard Worker "executable_extension", 88*6777b538SAndroid Build Coastguard Worker "is_clang_analysis_supported", 89*6777b538SAndroid Build Coastguard Worker "extra_cppflags", 90*6777b538SAndroid Build Coastguard Worker ]) 91*6777b538SAndroid Build Coastguard Worker 92*6777b538SAndroid Build Coastguard Worker # Note this is not the usual "ld = cxx" because "ld" uses are 93*6777b538SAndroid Build Coastguard Worker # never run via goma, so this needs scriptprefix. 94*6777b538SAndroid Build Coastguard Worker ld = scriptprefix + toolprefix + "clang++" + scriptsuffix 95*6777b538SAndroid Build Coastguard Worker 96*6777b538SAndroid Build Coastguard Worker toolchain_args = { 97*6777b538SAndroid Build Coastguard Worker is_clang = true 98*6777b538SAndroid Build Coastguard Worker current_cpu = "pnacl" 99*6777b538SAndroid Build Coastguard Worker use_lld = false 100*6777b538SAndroid Build Coastguard Worker } 101*6777b538SAndroid Build Coastguard Worker } 102*6777b538SAndroid Build Coastguard Worker} 103*6777b538SAndroid Build Coastguard Worker 104*6777b538SAndroid Build Coastguard Workerpnacl_toolchain("newlib_pnacl") { 105*6777b538SAndroid Build Coastguard Worker executable_extension = ".pexe" 106*6777b538SAndroid Build Coastguard Worker 107*6777b538SAndroid Build Coastguard Worker # The pnacl-finalize tool turns a .pexe.debug file into a .pexe file. 108*6777b538SAndroid Build Coastguard Worker # It's very similar in purpose to the traditional "strip" utility: it 109*6777b538SAndroid Build Coastguard Worker # turns what comes out of the linker into what you actually want to 110*6777b538SAndroid Build Coastguard Worker # distribute and run. PNaCl doesn't have a "strip"-like utility that 111*6777b538SAndroid Build Coastguard Worker # you ever actually want to use other than pnacl-finalize, so just 112*6777b538SAndroid Build Coastguard Worker # make pnacl-finalize the strip tool rather than adding an additional 113*6777b538SAndroid Build Coastguard Worker # step like "postlink" to run pnacl-finalize. 114*6777b538SAndroid Build Coastguard Worker strip = "finalize" 115*6777b538SAndroid Build Coastguard Worker} 116*6777b538SAndroid Build Coastguard Worker 117*6777b538SAndroid Build Coastguard Workertemplate("nacl_glibc_toolchain") { 118*6777b538SAndroid Build Coastguard Worker toolchain_cpu = target_name 119*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.toolchain_tuple), "Must define toolchain_tuple") 120*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.toolchain_package), "Must define toolchain_package") 121*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.toolchain_revision), "Must define toolchain_revision") 122*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 123*6777b538SAndroid Build Coastguard Worker [ 124*6777b538SAndroid Build Coastguard Worker "toolchain_package", 125*6777b538SAndroid Build Coastguard Worker "toolchain_revision", 126*6777b538SAndroid Build Coastguard Worker ]) 127*6777b538SAndroid Build Coastguard Worker 128*6777b538SAndroid Build Coastguard Worker toolprefix = rebase_path("${nacl_toolchain_dir}/${toolchain_package}/bin/" + 129*6777b538SAndroid Build Coastguard Worker invoker.toolchain_tuple + "-", 130*6777b538SAndroid Build Coastguard Worker root_build_dir) 131*6777b538SAndroid Build Coastguard Worker 132*6777b538SAndroid Build Coastguard Worker if (host_os == "win") { 133*6777b538SAndroid Build Coastguard Worker # Flip the slashes so that copy/paste of the commands works. 134*6777b538SAndroid Build Coastguard Worker # This is also done throughout build\toolchain\win\BUILD.gn 135*6777b538SAndroid Build Coastguard Worker toolprefix = string_replace(toolprefix, "/", "\\") 136*6777b538SAndroid Build Coastguard Worker } 137*6777b538SAndroid Build Coastguard Worker 138*6777b538SAndroid Build Coastguard Worker nacl_toolchain("glibc_" + toolchain_cpu) { 139*6777b538SAndroid Build Coastguard Worker cc = toolprefix + "gcc" + toolsuffix 140*6777b538SAndroid Build Coastguard Worker cxx = toolprefix + "g++" + toolsuffix 141*6777b538SAndroid Build Coastguard Worker ar = toolprefix + "ar" + toolsuffix 142*6777b538SAndroid Build Coastguard Worker ld = cxx 143*6777b538SAndroid Build Coastguard Worker readelf = toolprefix + "readelf" + toolsuffix 144*6777b538SAndroid Build Coastguard Worker nm = toolprefix + "nm" + toolsuffix 145*6777b538SAndroid Build Coastguard Worker strip = toolprefix + "strip" + toolsuffix 146*6777b538SAndroid Build Coastguard Worker 147*6777b538SAndroid Build Coastguard Worker toolchain_args = { 148*6777b538SAndroid Build Coastguard Worker current_cpu = toolchain_cpu 149*6777b538SAndroid Build Coastguard Worker 150*6777b538SAndroid Build Coastguard Worker # reclient does not support gcc. 151*6777b538SAndroid Build Coastguard Worker use_remoteexec = false 152*6777b538SAndroid Build Coastguard Worker is_clang = false 153*6777b538SAndroid Build Coastguard Worker is_nacl_glibc = true 154*6777b538SAndroid Build Coastguard Worker use_lld = false 155*6777b538SAndroid Build Coastguard Worker } 156*6777b538SAndroid Build Coastguard Worker } 157*6777b538SAndroid Build Coastguard Worker} 158*6777b538SAndroid Build Coastguard Worker 159*6777b538SAndroid Build Coastguard Workernacl_glibc_toolchain("x86") { 160*6777b538SAndroid Build Coastguard Worker toolchain_package = "nacl_x86_glibc" 161*6777b538SAndroid Build Coastguard Worker toolchain_revision = nacl_x86_glibc_rev 162*6777b538SAndroid Build Coastguard Worker 163*6777b538SAndroid Build Coastguard Worker # Rely on the :compiler_cpu_abi config adding the -m32 flag here rather 164*6777b538SAndroid Build Coastguard Worker # than using the i686-nacl binary directly. This is a because i686-nacl-gcc 165*6777b538SAndroid Build Coastguard Worker # is a shell script wrapper around x86_64-nacl-gcc and goma has trouble with 166*6777b538SAndroid Build Coastguard Worker # compiler executables that are shell scripts (so the i686 'compiler' is not 167*6777b538SAndroid Build Coastguard Worker # currently in goma). 168*6777b538SAndroid Build Coastguard Worker toolchain_tuple = "x86_64-nacl" 169*6777b538SAndroid Build Coastguard Worker} 170*6777b538SAndroid Build Coastguard Worker 171*6777b538SAndroid Build Coastguard Workernacl_glibc_toolchain("x64") { 172*6777b538SAndroid Build Coastguard Worker toolchain_package = "nacl_x86_glibc" 173*6777b538SAndroid Build Coastguard Worker toolchain_revision = nacl_x86_glibc_rev 174*6777b538SAndroid Build Coastguard Worker toolchain_tuple = "x86_64-nacl" 175*6777b538SAndroid Build Coastguard Worker} 176*6777b538SAndroid Build Coastguard Worker 177*6777b538SAndroid Build Coastguard Workernacl_glibc_toolchain("arm") { 178*6777b538SAndroid Build Coastguard Worker toolchain_package = "nacl_arm_glibc" 179*6777b538SAndroid Build Coastguard Worker toolchain_revision = nacl_arm_glibc_rev 180*6777b538SAndroid Build Coastguard Worker toolchain_tuple = "arm-nacl" 181*6777b538SAndroid Build Coastguard Worker} 182*6777b538SAndroid Build Coastguard Worker 183*6777b538SAndroid Build Coastguard Workertemplate("nacl_clang_toolchain") { 184*6777b538SAndroid Build Coastguard Worker toolchain_cpu = target_name 185*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.toolchain_tuple), "Must define toolchain_tuple") 186*6777b538SAndroid Build Coastguard Worker 187*6777b538SAndroid Build Coastguard Worker toolchain_package = "pnacl_newlib" 188*6777b538SAndroid Build Coastguard Worker toolchain_revision = pnacl_newlib_rev 189*6777b538SAndroid Build Coastguard Worker toolprefix = rebase_path("${nacl_toolchain_dir}/${toolchain_package}/bin/" + 190*6777b538SAndroid Build Coastguard Worker invoker.toolchain_tuple + "-", 191*6777b538SAndroid Build Coastguard Worker root_build_dir) 192*6777b538SAndroid Build Coastguard Worker 193*6777b538SAndroid Build Coastguard Worker if (host_os == "win") { 194*6777b538SAndroid Build Coastguard Worker # Flip the slashes so that copy/paste of the commands works. 195*6777b538SAndroid Build Coastguard Worker # This is also done throughout build\toolchain\win\BUILD.gn 196*6777b538SAndroid Build Coastguard Worker toolprefix = string_replace(toolprefix, "/", "\\") 197*6777b538SAndroid Build Coastguard Worker } 198*6777b538SAndroid Build Coastguard Worker 199*6777b538SAndroid Build Coastguard Worker nacl_toolchain("clang_newlib_" + toolchain_cpu) { 200*6777b538SAndroid Build Coastguard Worker cc = toolprefix + "clang" + toolsuffix 201*6777b538SAndroid Build Coastguard Worker cxx = toolprefix + "clang++" + toolsuffix 202*6777b538SAndroid Build Coastguard Worker ar = toolprefix + "ar" + toolsuffix 203*6777b538SAndroid Build Coastguard Worker ld = cxx 204*6777b538SAndroid Build Coastguard Worker readelf = toolprefix + "readelf" + toolsuffix 205*6777b538SAndroid Build Coastguard Worker nm = toolprefix + "nm" + toolsuffix 206*6777b538SAndroid Build Coastguard Worker strip = toolprefix + "strip" + toolsuffix 207*6777b538SAndroid Build Coastguard Worker 208*6777b538SAndroid Build Coastguard Worker toolchain_args = { 209*6777b538SAndroid Build Coastguard Worker current_cpu = toolchain_cpu 210*6777b538SAndroid Build Coastguard Worker is_clang = true 211*6777b538SAndroid Build Coastguard Worker use_lld = false 212*6777b538SAndroid Build Coastguard Worker } 213*6777b538SAndroid Build Coastguard Worker } 214*6777b538SAndroid Build Coastguard Worker} 215*6777b538SAndroid Build Coastguard Worker 216*6777b538SAndroid Build Coastguard Workertemplate("nacl_irt_toolchain") { 217*6777b538SAndroid Build Coastguard Worker toolchain_cpu = target_name 218*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.toolchain_tuple), "Must define toolchain_tuple") 219*6777b538SAndroid Build Coastguard Worker 220*6777b538SAndroid Build Coastguard Worker toolchain_package = "saigo_newlib" 221*6777b538SAndroid Build Coastguard Worker toolchain_revision = saigo_newlib_rev 222*6777b538SAndroid Build Coastguard Worker toolprefix = rebase_path("${nacl_toolchain_dir}/${toolchain_package}/bin/" + 223*6777b538SAndroid Build Coastguard Worker invoker.toolchain_tuple + "-", 224*6777b538SAndroid Build Coastguard Worker root_build_dir) 225*6777b538SAndroid Build Coastguard Worker 226*6777b538SAndroid Build Coastguard Worker if (host_os == "win") { 227*6777b538SAndroid Build Coastguard Worker # Flip the slashes so that copy/paste of the commands works. 228*6777b538SAndroid Build Coastguard Worker # This is also done throughout build\toolchain\win\BUILD.gn 229*6777b538SAndroid Build Coastguard Worker toolprefix = string_replace(toolprefix, "/", "\\") 230*6777b538SAndroid Build Coastguard Worker } 231*6777b538SAndroid Build Coastguard Worker 232*6777b538SAndroid Build Coastguard Worker link_irt = rebase_path("//native_client/build/link_irt.py", root_build_dir) 233*6777b538SAndroid Build Coastguard Worker 234*6777b538SAndroid Build Coastguard Worker tls_edit_label = 235*6777b538SAndroid Build Coastguard Worker "//native_client/src/tools/tls_edit:tls_edit($host_toolchain)" 236*6777b538SAndroid Build Coastguard Worker host_toolchain_out_dir = 237*6777b538SAndroid Build Coastguard Worker rebase_path(get_label_info(tls_edit_label, "root_out_dir"), 238*6777b538SAndroid Build Coastguard Worker root_build_dir) 239*6777b538SAndroid Build Coastguard Worker tls_edit = "${host_toolchain_out_dir}/tls_edit" 240*6777b538SAndroid Build Coastguard Worker 241*6777b538SAndroid Build Coastguard Worker nacl_toolchain("irt_" + toolchain_cpu) { 242*6777b538SAndroid Build Coastguard Worker cc = toolprefix + "clang" + toolsuffix 243*6777b538SAndroid Build Coastguard Worker cxx = toolprefix + "clang++" + toolsuffix 244*6777b538SAndroid Build Coastguard Worker ar = toolprefix + "ar" + toolsuffix 245*6777b538SAndroid Build Coastguard Worker readelf = toolprefix + "readelf" + toolsuffix 246*6777b538SAndroid Build Coastguard Worker nm = toolprefix + "nm" + toolsuffix 247*6777b538SAndroid Build Coastguard Worker strip = toolprefix + "strip" + toolsuffix 248*6777b538SAndroid Build Coastguard Worker 249*6777b538SAndroid Build Coastguard Worker # Some IRT implementations (notably, Chromium's) contain C++ code, 250*6777b538SAndroid Build Coastguard Worker # so we need to link w/ the C++ linker. 251*6777b538SAndroid Build Coastguard Worker ld = "${python_path} ${link_irt} --tls-edit=${tls_edit} --link-cmd=${cxx} --readelf-cmd=${readelf}" 252*6777b538SAndroid Build Coastguard Worker 253*6777b538SAndroid Build Coastguard Worker # reclient requires explicit upload of toolchain lib 254*6777b538SAndroid Build Coastguard Worker if (is_chromeos_ash && use_remoteexec) { 255*6777b538SAndroid Build Coastguard Worker if (defined(invoker.extra_cppflags) && invoker.extra_cppflags != "") { 256*6777b538SAndroid Build Coastguard Worker extra_cppflags = " " + invoker.extra_cppflags 257*6777b538SAndroid Build Coastguard Worker } else { 258*6777b538SAndroid Build Coastguard Worker extra_cppflags = "" 259*6777b538SAndroid Build Coastguard Worker } 260*6777b538SAndroid Build Coastguard Worker 261*6777b538SAndroid Build Coastguard Worker libdir = rebase_path("${nacl_toolchain_dir}/${toolchain_package}/lib", 262*6777b538SAndroid Build Coastguard Worker root_build_dir) 263*6777b538SAndroid Build Coastguard Worker extra_cppflags += " -B${libdir}" 264*6777b538SAndroid Build Coastguard Worker } 265*6777b538SAndroid Build Coastguard Worker 266*6777b538SAndroid Build Coastguard Worker toolchain_args = { 267*6777b538SAndroid Build Coastguard Worker current_cpu = toolchain_cpu 268*6777b538SAndroid Build Coastguard Worker is_clang = true 269*6777b538SAndroid Build Coastguard Worker use_lld = false 270*6777b538SAndroid Build Coastguard Worker is_nacl_saigo = true 271*6777b538SAndroid Build Coastguard Worker } 272*6777b538SAndroid Build Coastguard Worker 273*6777b538SAndroid Build Coastguard Worker # TODO(ncbray): depend on link script 274*6777b538SAndroid Build Coastguard Worker deps = [ tls_edit_label ] 275*6777b538SAndroid Build Coastguard Worker } 276*6777b538SAndroid Build Coastguard Worker} 277*6777b538SAndroid Build Coastguard Worker 278*6777b538SAndroid Build Coastguard Worker# This is essentially a clone of nacl_irt_toolchain above, except it uses the 279*6777b538SAndroid Build Coastguard Worker# standard ld. This toolchain can be used to build regular nexes for NaCl 280*6777b538SAndroid Build Coastguard Worker# browser tests. 281*6777b538SAndroid Build Coastguard Workertemplate("nacl_test_irt_toolchain") { 282*6777b538SAndroid Build Coastguard Worker toolchain_cpu = target_name 283*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.toolchain_tuple), "Must define toolchain_tuple") 284*6777b538SAndroid Build Coastguard Worker 285*6777b538SAndroid Build Coastguard Worker toolchain_package = "saigo_newlib" 286*6777b538SAndroid Build Coastguard Worker toolchain_revision = saigo_newlib_rev 287*6777b538SAndroid Build Coastguard Worker toolprefix = rebase_path("${nacl_toolchain_dir}/${toolchain_package}/bin/" + 288*6777b538SAndroid Build Coastguard Worker invoker.toolchain_tuple + "-", 289*6777b538SAndroid Build Coastguard Worker root_build_dir) 290*6777b538SAndroid Build Coastguard Worker 291*6777b538SAndroid Build Coastguard Worker if (host_os == "win") { 292*6777b538SAndroid Build Coastguard Worker # Flip the slashes so that copy/paste of the commands works. 293*6777b538SAndroid Build Coastguard Worker # This is also done throughout build\toolchain\win\BUILD.gn 294*6777b538SAndroid Build Coastguard Worker toolprefix = string_replace(toolprefix, "/", "\\") 295*6777b538SAndroid Build Coastguard Worker } 296*6777b538SAndroid Build Coastguard Worker 297*6777b538SAndroid Build Coastguard Worker nacl_toolchain("test_irt_" + toolchain_cpu) { 298*6777b538SAndroid Build Coastguard Worker cc = toolprefix + "clang" + toolsuffix 299*6777b538SAndroid Build Coastguard Worker cxx = toolprefix + "clang++" + toolsuffix 300*6777b538SAndroid Build Coastguard Worker ar = toolprefix + "ar" + toolsuffix 301*6777b538SAndroid Build Coastguard Worker ld = cxx 302*6777b538SAndroid Build Coastguard Worker readelf = toolprefix + "readelf" + toolsuffix 303*6777b538SAndroid Build Coastguard Worker nm = toolprefix + "nm" + toolsuffix 304*6777b538SAndroid Build Coastguard Worker strip = toolprefix + "strip" + toolsuffix 305*6777b538SAndroid Build Coastguard Worker 306*6777b538SAndroid Build Coastguard Worker toolchain_args = { 307*6777b538SAndroid Build Coastguard Worker current_cpu = toolchain_cpu 308*6777b538SAndroid Build Coastguard Worker is_clang = true 309*6777b538SAndroid Build Coastguard Worker use_lld = false 310*6777b538SAndroid Build Coastguard Worker is_nacl_saigo = true 311*6777b538SAndroid Build Coastguard Worker } 312*6777b538SAndroid Build Coastguard Worker } 313*6777b538SAndroid Build Coastguard Worker} 314*6777b538SAndroid Build Coastguard Worker 315*6777b538SAndroid Build Coastguard Workertemplate("nacl_clang_toolchains") { 316*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.toolchain_tuple), "Must define toolchain_tuple") 317*6777b538SAndroid Build Coastguard Worker nacl_clang_toolchain(target_name) { 318*6777b538SAndroid Build Coastguard Worker toolchain_tuple = invoker.toolchain_tuple 319*6777b538SAndroid Build Coastguard Worker } 320*6777b538SAndroid Build Coastguard Worker nacl_irt_toolchain(target_name) { 321*6777b538SAndroid Build Coastguard Worker toolchain_tuple = invoker.toolchain_tuple 322*6777b538SAndroid Build Coastguard Worker } 323*6777b538SAndroid Build Coastguard Worker nacl_test_irt_toolchain(target_name) { 324*6777b538SAndroid Build Coastguard Worker toolchain_tuple = invoker.toolchain_tuple 325*6777b538SAndroid Build Coastguard Worker } 326*6777b538SAndroid Build Coastguard Worker} 327*6777b538SAndroid Build Coastguard Worker 328*6777b538SAndroid Build Coastguard Workernacl_clang_toolchains("x86") { 329*6777b538SAndroid Build Coastguard Worker # Rely on :compiler_cpu_abi adding -m32. See nacl_x86_glibc above. 330*6777b538SAndroid Build Coastguard Worker toolchain_tuple = "x86_64-nacl" 331*6777b538SAndroid Build Coastguard Worker} 332*6777b538SAndroid Build Coastguard Worker 333*6777b538SAndroid Build Coastguard Workernacl_clang_toolchains("x64") { 334*6777b538SAndroid Build Coastguard Worker toolchain_tuple = "x86_64-nacl" 335*6777b538SAndroid Build Coastguard Worker} 336*6777b538SAndroid Build Coastguard Worker 337*6777b538SAndroid Build Coastguard Workernacl_clang_toolchains("arm") { 338*6777b538SAndroid Build Coastguard Worker toolchain_tuple = "arm-nacl" 339*6777b538SAndroid Build Coastguard Worker} 340*6777b538SAndroid Build Coastguard Worker 341*6777b538SAndroid Build Coastguard Workernacl_clang_toolchains("mipsel") { 342*6777b538SAndroid Build Coastguard Worker toolchain_tuple = "mipsel-nacl" 343*6777b538SAndroid Build Coastguard Worker} 344