xref: /aosp_15_r20/external/cronet/build/toolchain/nacl/BUILD.gn (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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