xref: /aosp_15_r20/external/angle/build/toolchain/cros/BUILD.gn (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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