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