xref: /aosp_15_r20/external/angle/build/config/siso/cros.star (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker# -*- bazel-starlark -*-
2*8975f5c5SAndroid Build Coastguard Worker# Copyright 2023 The Chromium Authors
3*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker"""Siso configuration for ChromeOS builds."""
6*8975f5c5SAndroid Build Coastguard Worker
7*8975f5c5SAndroid Build Coastguard Workerload("@builtin//lib/gn.star", "gn")
8*8975f5c5SAndroid Build Coastguard Workerload("@builtin//path.star", "path")
9*8975f5c5SAndroid Build Coastguard Workerload("@builtin//struct.star", "module")
10*8975f5c5SAndroid Build Coastguard Workerload("./config.star", "config")
11*8975f5c5SAndroid Build Coastguard Worker
12*8975f5c5SAndroid Build Coastguard Workerdef __cros_gn_args(ctx):
13*8975f5c5SAndroid Build Coastguard Worker    """Returns all CrOS specific toolchain and sysroot GN args."""
14*8975f5c5SAndroid Build Coastguard Worker    if not "args.gn" in ctx.metadata:
15*8975f5c5SAndroid Build Coastguard Worker        print("no args.gn")
16*8975f5c5SAndroid Build Coastguard Worker        return {}
17*8975f5c5SAndroid Build Coastguard Worker    gn_args = gn.args(ctx)
18*8975f5c5SAndroid Build Coastguard Worker    if gn_args.get("target_os") != '"chromeos"':
19*8975f5c5SAndroid Build Coastguard Worker        return {}
20*8975f5c5SAndroid Build Coastguard Worker
21*8975f5c5SAndroid Build Coastguard Worker    cros_args = {}
22*8975f5c5SAndroid Build Coastguard Worker    for arg in [
23*8975f5c5SAndroid Build Coastguard Worker        "cros_target_ar",
24*8975f5c5SAndroid Build Coastguard Worker        "cros_target_cc",
25*8975f5c5SAndroid Build Coastguard Worker        "cros_target_cxx",
26*8975f5c5SAndroid Build Coastguard Worker        "cros_target_ld",
27*8975f5c5SAndroid Build Coastguard Worker        "cros_target_nm",
28*8975f5c5SAndroid Build Coastguard Worker        "cros_target_readelf",
29*8975f5c5SAndroid Build Coastguard Worker        "cros_nacl_helper_arm32_ar",
30*8975f5c5SAndroid Build Coastguard Worker        "cros_nacl_helper_arm32_cc",
31*8975f5c5SAndroid Build Coastguard Worker        "cros_nacl_helper_arm32_cxx",
32*8975f5c5SAndroid Build Coastguard Worker        "cros_nacl_helper_arm32_ld",
33*8975f5c5SAndroid Build Coastguard Worker        "cros_nacl_helper_arm32_readelf",
34*8975f5c5SAndroid Build Coastguard Worker        "cros_nacl_helper_arm32_sysroot",
35*8975f5c5SAndroid Build Coastguard Worker        "target_sysroot",
36*8975f5c5SAndroid Build Coastguard Worker    ]:
37*8975f5c5SAndroid Build Coastguard Worker        if arg not in gn_args:
38*8975f5c5SAndroid Build Coastguard Worker            print("no " + arg)
39*8975f5c5SAndroid Build Coastguard Worker            continue
40*8975f5c5SAndroid Build Coastguard Worker        fp = ctx.fs.canonpath(gn_args.get(arg).strip('"'))
41*8975f5c5SAndroid Build Coastguard Worker        cros_args[arg] = fp
42*8975f5c5SAndroid Build Coastguard Worker        if arg == "cros_target_cxx":
43*8975f5c5SAndroid Build Coastguard Worker            cros_args["cros_toolchain"] = path.dir(path.dir(fp))
44*8975f5c5SAndroid Build Coastguard Worker        if arg == "cros_nacl_helper_arm32_cxx":
45*8975f5c5SAndroid Build Coastguard Worker            cros_args["cros_nacl_helper_arm32_toolchain"] = path.dir(path.dir(fp))
46*8975f5c5SAndroid Build Coastguard Worker    return cros_args
47*8975f5c5SAndroid Build Coastguard Worker
48*8975f5c5SAndroid Build Coastguard Workerdef __filegroups(ctx):
49*8975f5c5SAndroid Build Coastguard Worker    fg = {}
50*8975f5c5SAndroid Build Coastguard Worker    cros_args = __cros_gn_args(ctx)
51*8975f5c5SAndroid Build Coastguard Worker    for toolchain in [
52*8975f5c5SAndroid Build Coastguard Worker        cros_args.get("cros_toolchain"),
53*8975f5c5SAndroid Build Coastguard Worker        cros_args.get("cros_nacl_helper_arm32_toolchain"),
54*8975f5c5SAndroid Build Coastguard Worker    ]:
55*8975f5c5SAndroid Build Coastguard Worker        if not toolchain:
56*8975f5c5SAndroid Build Coastguard Worker            continue
57*8975f5c5SAndroid Build Coastguard Worker        print("toolchain = %s" % toolchain)
58*8975f5c5SAndroid Build Coastguard Worker        fg[toolchain + ":headers"] = {
59*8975f5c5SAndroid Build Coastguard Worker            "type": "glob",
60*8975f5c5SAndroid Build Coastguard Worker            # TODO: Avoid using "*" to include only required files.
61*8975f5c5SAndroid Build Coastguard Worker            "includes": ["*"],
62*8975f5c5SAndroid Build Coastguard Worker        }
63*8975f5c5SAndroid Build Coastguard Worker        fg[path.join(toolchain, "bin") + ":llddeps"] = {
64*8975f5c5SAndroid Build Coastguard Worker            "type": "glob",
65*8975f5c5SAndroid Build Coastguard Worker            "includes": [
66*8975f5c5SAndroid Build Coastguard Worker                "*lld*",
67*8975f5c5SAndroid Build Coastguard Worker                "*clang*",
68*8975f5c5SAndroid Build Coastguard Worker                "llvm-nm*",
69*8975f5c5SAndroid Build Coastguard Worker                "llvm-readelf*",
70*8975f5c5SAndroid Build Coastguard Worker                "llvm-readobj*",
71*8975f5c5SAndroid Build Coastguard Worker            ],
72*8975f5c5SAndroid Build Coastguard Worker        }
73*8975f5c5SAndroid Build Coastguard Worker        fg[path.join(toolchain, "lib") + ":libs"] = {
74*8975f5c5SAndroid Build Coastguard Worker            "type": "glob",
75*8975f5c5SAndroid Build Coastguard Worker            "includes": ["*.so", "*.so.*", "*.a", "*.o"],
76*8975f5c5SAndroid Build Coastguard Worker        }
77*8975f5c5SAndroid Build Coastguard Worker        fg[path.join(toolchain, "lib64") + ":libs"] = {
78*8975f5c5SAndroid Build Coastguard Worker            "type": "glob",
79*8975f5c5SAndroid Build Coastguard Worker            "includes": ["*.so", "*.so.*", "*.a", "*.o"],
80*8975f5c5SAndroid Build Coastguard Worker        }
81*8975f5c5SAndroid Build Coastguard Worker        fg[path.join(toolchain, "usr/lib64") + ":libs"] = {
82*8975f5c5SAndroid Build Coastguard Worker            "type": "glob",
83*8975f5c5SAndroid Build Coastguard Worker            "includes": ["*.so", "*.so.*", "*.a", "*.o"],
84*8975f5c5SAndroid Build Coastguard Worker        }
85*8975f5c5SAndroid Build Coastguard Worker        fg[path.join(toolchain, "usr/armv7a-cros-linux-gnueabihf") + ":libs"] = {
86*8975f5c5SAndroid Build Coastguard Worker            "type": "glob",
87*8975f5c5SAndroid Build Coastguard Worker            "includes": ["*.so", "*.so.*", "*.a", "*.o"],
88*8975f5c5SAndroid Build Coastguard Worker        }
89*8975f5c5SAndroid Build Coastguard Worker        fg[path.join(toolchain, "usr/bin") + ":clang"] = {
90*8975f5c5SAndroid Build Coastguard Worker            "type": "glob",
91*8975f5c5SAndroid Build Coastguard Worker            "includes": [
92*8975f5c5SAndroid Build Coastguard Worker                "*clang*",
93*8975f5c5SAndroid Build Coastguard Worker                "sysroot_wrapper.hardened.ccache*",
94*8975f5c5SAndroid Build Coastguard Worker            ],
95*8975f5c5SAndroid Build Coastguard Worker        }
96*8975f5c5SAndroid Build Coastguard Worker
97*8975f5c5SAndroid Build Coastguard Worker    for sysroot in [
98*8975f5c5SAndroid Build Coastguard Worker        cros_args.get("target_sysroot"),
99*8975f5c5SAndroid Build Coastguard Worker        cros_args.get("cros_nacl_helper_arm32_sysroot"),
100*8975f5c5SAndroid Build Coastguard Worker    ]:
101*8975f5c5SAndroid Build Coastguard Worker        if not sysroot:
102*8975f5c5SAndroid Build Coastguard Worker            continue
103*8975f5c5SAndroid Build Coastguard Worker        print("sysroot = %s" % sysroot)
104*8975f5c5SAndroid Build Coastguard Worker        fg[path.join(sysroot, "usr/include") + ":include"] = {
105*8975f5c5SAndroid Build Coastguard Worker            "type": "glob",
106*8975f5c5SAndroid Build Coastguard Worker            "includes": ["*"],
107*8975f5c5SAndroid Build Coastguard Worker            # needs bits/stab.def, c++/*
108*8975f5c5SAndroid Build Coastguard Worker        }
109*8975f5c5SAndroid Build Coastguard Worker        fg[path.join(sysroot, "usr/lib") + ":headers"] = {
110*8975f5c5SAndroid Build Coastguard Worker            "type": "glob",
111*8975f5c5SAndroid Build Coastguard Worker            "includes": ["*.h", "crtbegin.o"],
112*8975f5c5SAndroid Build Coastguard Worker        }
113*8975f5c5SAndroid Build Coastguard Worker        fg[path.join(sysroot, "usr/lib64") + ":headers"] = {
114*8975f5c5SAndroid Build Coastguard Worker            "type": "glob",
115*8975f5c5SAndroid Build Coastguard Worker            "includes": ["*.h"],
116*8975f5c5SAndroid Build Coastguard Worker        }
117*8975f5c5SAndroid Build Coastguard Worker        fg[sysroot + ":libs"] = {
118*8975f5c5SAndroid Build Coastguard Worker            "type": "glob",
119*8975f5c5SAndroid Build Coastguard Worker            "includes": ["*.so", "*.so.*", "*.a", "*.o"],
120*8975f5c5SAndroid Build Coastguard Worker        }
121*8975f5c5SAndroid Build Coastguard Worker    print(fg)
122*8975f5c5SAndroid Build Coastguard Worker    return fg
123*8975f5c5SAndroid Build Coastguard Worker
124*8975f5c5SAndroid Build Coastguard Workerdef __step_config(ctx, step_config):
125*8975f5c5SAndroid Build Coastguard Worker    cros_args = __cros_gn_args(ctx)
126*8975f5c5SAndroid Build Coastguard Worker    toolchain = cros_args.get("cros_toolchain")
127*8975f5c5SAndroid Build Coastguard Worker    cros_nacl_helper_arm32_toolchain = cros_args.get("cros_nacl_helper_arm32_toolchain")
128*8975f5c5SAndroid Build Coastguard Worker    cros_nacl_helper_arm32_sysroot = cros_args.get("cros_nacl_helper_arm32_sysroot")
129*8975f5c5SAndroid Build Coastguard Worker    sysroot = cros_args.get("target_sysroot")
130*8975f5c5SAndroid Build Coastguard Worker    if not (toolchain and sysroot):
131*8975f5c5SAndroid Build Coastguard Worker        return step_config
132*8975f5c5SAndroid Build Coastguard Worker
133*8975f5c5SAndroid Build Coastguard Worker    cros_target_cxx = cros_args.get("cros_target_cxx")
134*8975f5c5SAndroid Build Coastguard Worker    if cros_target_cxx:
135*8975f5c5SAndroid Build Coastguard Worker        step_config["rules"].extend([
136*8975f5c5SAndroid Build Coastguard Worker            {
137*8975f5c5SAndroid Build Coastguard Worker                "name": "clang-cros/cxx",
138*8975f5c5SAndroid Build Coastguard Worker                "action": "(.*_)?cxx",
139*8975f5c5SAndroid Build Coastguard Worker                "command_prefix": path.join("../../", cros_target_cxx),
140*8975f5c5SAndroid Build Coastguard Worker                "remote": True,
141*8975f5c5SAndroid Build Coastguard Worker                "canonicalize_dir": True,
142*8975f5c5SAndroid Build Coastguard Worker                "timeout": "5m",
143*8975f5c5SAndroid Build Coastguard Worker            },
144*8975f5c5SAndroid Build Coastguard Worker        ])
145*8975f5c5SAndroid Build Coastguard Worker
146*8975f5c5SAndroid Build Coastguard Worker    cros_target_cc = cros_args.get("cros_target_cc")
147*8975f5c5SAndroid Build Coastguard Worker    if cros_target_cxx:
148*8975f5c5SAndroid Build Coastguard Worker        step_config["rules"].extend([
149*8975f5c5SAndroid Build Coastguard Worker            {
150*8975f5c5SAndroid Build Coastguard Worker                "name": "clang-cros/cc",
151*8975f5c5SAndroid Build Coastguard Worker                "action": "(.*_)?cc",
152*8975f5c5SAndroid Build Coastguard Worker                "command_prefix": path.join("../../", cros_target_cc),
153*8975f5c5SAndroid Build Coastguard Worker                "remote": True,
154*8975f5c5SAndroid Build Coastguard Worker                "canonicalize_dir": True,
155*8975f5c5SAndroid Build Coastguard Worker                "timeout": "5m",
156*8975f5c5SAndroid Build Coastguard Worker            },
157*8975f5c5SAndroid Build Coastguard Worker        ])
158*8975f5c5SAndroid Build Coastguard Worker
159*8975f5c5SAndroid Build Coastguard Worker    cros_target_ar = cros_args.get("cros_target_ar")
160*8975f5c5SAndroid Build Coastguard Worker    if cros_target_ar:
161*8975f5c5SAndroid Build Coastguard Worker        step_config["rules"].extend([
162*8975f5c5SAndroid Build Coastguard Worker            {
163*8975f5c5SAndroid Build Coastguard Worker                "name": "clang-cros/alink/llvm-ar",
164*8975f5c5SAndroid Build Coastguard Worker                # Other alink steps should use clang/alink/llvm-ar rule or a
165*8975f5c5SAndroid Build Coastguard Worker                # nacl rule.
166*8975f5c5SAndroid Build Coastguard Worker                "action": "(target_with_system_allocator_)?alink",
167*8975f5c5SAndroid Build Coastguard Worker                "inputs": [
168*8975f5c5SAndroid Build Coastguard Worker                    cros_target_ar,
169*8975f5c5SAndroid Build Coastguard Worker                ],
170*8975f5c5SAndroid Build Coastguard Worker                "exclude_input_patterns": [
171*8975f5c5SAndroid Build Coastguard Worker                    "*.cc",
172*8975f5c5SAndroid Build Coastguard Worker                    "*.h",
173*8975f5c5SAndroid Build Coastguard Worker                    "*.js",
174*8975f5c5SAndroid Build Coastguard Worker                    "*.pak",
175*8975f5c5SAndroid Build Coastguard Worker                    "*.py",
176*8975f5c5SAndroid Build Coastguard Worker                    "*.stamp",
177*8975f5c5SAndroid Build Coastguard Worker                ],
178*8975f5c5SAndroid Build Coastguard Worker                "handler": "clang_alink",
179*8975f5c5SAndroid Build Coastguard Worker                "remote": config.get(ctx, "remote-link"),
180*8975f5c5SAndroid Build Coastguard Worker                "canonicalize_dir": True,
181*8975f5c5SAndroid Build Coastguard Worker                "timeout": "5m",
182*8975f5c5SAndroid Build Coastguard Worker                "platform_ref": "large",
183*8975f5c5SAndroid Build Coastguard Worker                "accumulate": True,
184*8975f5c5SAndroid Build Coastguard Worker            },
185*8975f5c5SAndroid Build Coastguard Worker        ])
186*8975f5c5SAndroid Build Coastguard Worker        step_config["input_deps"].update({
187*8975f5c5SAndroid Build Coastguard Worker            cros_target_ar: [
188*8975f5c5SAndroid Build Coastguard Worker                path.join(toolchain, "bin/llvm-ar.elf"),
189*8975f5c5SAndroid Build Coastguard Worker                path.join(toolchain, "lib") + ":libs",
190*8975f5c5SAndroid Build Coastguard Worker                path.join(toolchain, "usr/lib64") + ":libs",
191*8975f5c5SAndroid Build Coastguard Worker            ],
192*8975f5c5SAndroid Build Coastguard Worker        })
193*8975f5c5SAndroid Build Coastguard Worker
194*8975f5c5SAndroid Build Coastguard Worker    cros_nacl_helper_arm32_cxx = cros_args.get("cros_nacl_helper_arm32_cxx")
195*8975f5c5SAndroid Build Coastguard Worker    if cros_nacl_helper_arm32_cxx:
196*8975f5c5SAndroid Build Coastguard Worker        step_config["rules"].extend([
197*8975f5c5SAndroid Build Coastguard Worker            {
198*8975f5c5SAndroid Build Coastguard Worker                "name": "clang-cros/nacl_helper_arm32_cxx",
199*8975f5c5SAndroid Build Coastguard Worker                "action": "nacl_helper_arm32_cxx",
200*8975f5c5SAndroid Build Coastguard Worker                "command_prefix": path.join("../../", cros_nacl_helper_arm32_cxx),
201*8975f5c5SAndroid Build Coastguard Worker                "remote": True,
202*8975f5c5SAndroid Build Coastguard Worker                "canonicalize_dir": True,
203*8975f5c5SAndroid Build Coastguard Worker                "timeout": "5m",
204*8975f5c5SAndroid Build Coastguard Worker            },
205*8975f5c5SAndroid Build Coastguard Worker        ])
206*8975f5c5SAndroid Build Coastguard Worker
207*8975f5c5SAndroid Build Coastguard Worker    cros_nacl_helper_arm32_cc = cros_args.get("cros_nacl_helper_arm32_cc")
208*8975f5c5SAndroid Build Coastguard Worker    if cros_nacl_helper_arm32_cxx:
209*8975f5c5SAndroid Build Coastguard Worker        step_config["rules"].extend([
210*8975f5c5SAndroid Build Coastguard Worker            {
211*8975f5c5SAndroid Build Coastguard Worker                "name": "clang-cros/nacl_helper_arm32_cc",
212*8975f5c5SAndroid Build Coastguard Worker                "action": "nacl_helper_arm32_cc",
213*8975f5c5SAndroid Build Coastguard Worker                "command_prefix": path.join("../../", cros_nacl_helper_arm32_cc),
214*8975f5c5SAndroid Build Coastguard Worker                "remote": True,
215*8975f5c5SAndroid Build Coastguard Worker                "canonicalize_dir": True,
216*8975f5c5SAndroid Build Coastguard Worker                "timeout": "5m",
217*8975f5c5SAndroid Build Coastguard Worker            },
218*8975f5c5SAndroid Build Coastguard Worker        ])
219*8975f5c5SAndroid Build Coastguard Worker
220*8975f5c5SAndroid Build Coastguard Worker    cros_nacl_helper_arm32_ar = cros_args.get("cros_nacl_helper_arm32_ar")
221*8975f5c5SAndroid Build Coastguard Worker    if cros_nacl_helper_arm32_ar:
222*8975f5c5SAndroid Build Coastguard Worker        step_config["rules"].extend([
223*8975f5c5SAndroid Build Coastguard Worker            {
224*8975f5c5SAndroid Build Coastguard Worker                "name": "clang-cros/alink/nacl_helper_arm32_llvm-ar",
225*8975f5c5SAndroid Build Coastguard Worker                # Other alink steps should use clang/alink/llvm-ar rule or a
226*8975f5c5SAndroid Build Coastguard Worker                # nacl rule.
227*8975f5c5SAndroid Build Coastguard Worker                "action": "nacl_helper_arm32_alink",
228*8975f5c5SAndroid Build Coastguard Worker                "inputs": [
229*8975f5c5SAndroid Build Coastguard Worker                    cros_nacl_helper_arm32_ar,
230*8975f5c5SAndroid Build Coastguard Worker                ],
231*8975f5c5SAndroid Build Coastguard Worker                "exclude_input_patterns": [
232*8975f5c5SAndroid Build Coastguard Worker                    "*.cc",
233*8975f5c5SAndroid Build Coastguard Worker                    "*.h",
234*8975f5c5SAndroid Build Coastguard Worker                    "*.js",
235*8975f5c5SAndroid Build Coastguard Worker                    "*.pak",
236*8975f5c5SAndroid Build Coastguard Worker                    "*.py",
237*8975f5c5SAndroid Build Coastguard Worker                    "*.stamp",
238*8975f5c5SAndroid Build Coastguard Worker                ],
239*8975f5c5SAndroid Build Coastguard Worker                "handler": "clang_alink",
240*8975f5c5SAndroid Build Coastguard Worker                "remote": config.get(ctx, "remote-link"),
241*8975f5c5SAndroid Build Coastguard Worker                "canonicalize_dir": True,
242*8975f5c5SAndroid Build Coastguard Worker                "timeout": "5m",
243*8975f5c5SAndroid Build Coastguard Worker                "platform_ref": "large",
244*8975f5c5SAndroid Build Coastguard Worker                "accumulate": True,
245*8975f5c5SAndroid Build Coastguard Worker            },
246*8975f5c5SAndroid Build Coastguard Worker        ])
247*8975f5c5SAndroid Build Coastguard Worker        step_config["input_deps"].update({
248*8975f5c5SAndroid Build Coastguard Worker            cros_nacl_helper_arm32_ar: [
249*8975f5c5SAndroid Build Coastguard Worker                path.join(cros_nacl_helper_arm32_toolchain, "bin/llvm-ar.elf"),
250*8975f5c5SAndroid Build Coastguard Worker                path.join(cros_nacl_helper_arm32_toolchain, "lib") + ":libs",
251*8975f5c5SAndroid Build Coastguard Worker                path.join(cros_nacl_helper_arm32_toolchain, "usr/lib64") + ":libs",
252*8975f5c5SAndroid Build Coastguard Worker            ],
253*8975f5c5SAndroid Build Coastguard Worker        })
254*8975f5c5SAndroid Build Coastguard Worker
255*8975f5c5SAndroid Build Coastguard Worker    step_config["rules"].extend([
256*8975f5c5SAndroid Build Coastguard Worker        {
257*8975f5c5SAndroid Build Coastguard Worker            "name": "clang-cros/solink/gcc_solink_wrapper",
258*8975f5c5SAndroid Build Coastguard Worker            "action": "(target_with_system_allocator_)?solink",
259*8975f5c5SAndroid Build Coastguard Worker            "command_prefix": "\"python3\" \"../../build/toolchain/gcc_solink_wrapper.py\"",
260*8975f5c5SAndroid Build Coastguard Worker            "inputs": [
261*8975f5c5SAndroid Build Coastguard Worker                "build/toolchain/gcc_solink_wrapper.py",
262*8975f5c5SAndroid Build Coastguard Worker                path.join(toolchain, "bin/ld.lld"),
263*8975f5c5SAndroid Build Coastguard Worker            ],
264*8975f5c5SAndroid Build Coastguard Worker            "exclude_input_patterns": [
265*8975f5c5SAndroid Build Coastguard Worker                "*.cc",
266*8975f5c5SAndroid Build Coastguard Worker                "*.h",
267*8975f5c5SAndroid Build Coastguard Worker                "*.js",
268*8975f5c5SAndroid Build Coastguard Worker                "*.pak",
269*8975f5c5SAndroid Build Coastguard Worker                "*.py",
270*8975f5c5SAndroid Build Coastguard Worker                "*.stamp",
271*8975f5c5SAndroid Build Coastguard Worker            ],
272*8975f5c5SAndroid Build Coastguard Worker            "remote": config.get(ctx, "remote-link"),
273*8975f5c5SAndroid Build Coastguard Worker            # TODO: Do not use absolute paths for custom toolchain/sysroot GN
274*8975f5c5SAndroid Build Coastguard Worker            # args.
275*8975f5c5SAndroid Build Coastguard Worker            "input_root_absolute_path": True,
276*8975f5c5SAndroid Build Coastguard Worker            "platform_ref": "large",
277*8975f5c5SAndroid Build Coastguard Worker            "timeout": "2m",
278*8975f5c5SAndroid Build Coastguard Worker        },
279*8975f5c5SAndroid Build Coastguard Worker        {
280*8975f5c5SAndroid Build Coastguard Worker            "name": "clang-cros/link/gcc_link_wrapper",
281*8975f5c5SAndroid Build Coastguard Worker            "action": "(target_with_system_allocator_)?link",
282*8975f5c5SAndroid Build Coastguard Worker            "command_prefix": "\"python3\" \"../../build/toolchain/gcc_link_wrapper.py\"",
283*8975f5c5SAndroid Build Coastguard Worker            "handler": "clang_link",
284*8975f5c5SAndroid Build Coastguard Worker            "inputs": [
285*8975f5c5SAndroid Build Coastguard Worker                "build/toolchain/gcc_link_wrapper.py",
286*8975f5c5SAndroid Build Coastguard Worker                path.join(toolchain, "bin/ld.lld"),
287*8975f5c5SAndroid Build Coastguard Worker            ],
288*8975f5c5SAndroid Build Coastguard Worker            "exclude_input_patterns": [
289*8975f5c5SAndroid Build Coastguard Worker                "*.cc",
290*8975f5c5SAndroid Build Coastguard Worker                "*.h",
291*8975f5c5SAndroid Build Coastguard Worker                "*.js",
292*8975f5c5SAndroid Build Coastguard Worker                "*.pak",
293*8975f5c5SAndroid Build Coastguard Worker                "*.py",
294*8975f5c5SAndroid Build Coastguard Worker                "*.stamp",
295*8975f5c5SAndroid Build Coastguard Worker            ],
296*8975f5c5SAndroid Build Coastguard Worker            "remote": config.get(ctx, "remote-link"),
297*8975f5c5SAndroid Build Coastguard Worker            "canonicalize_dir": True,
298*8975f5c5SAndroid Build Coastguard Worker            "platform_ref": "large",
299*8975f5c5SAndroid Build Coastguard Worker            "timeout": "10m",
300*8975f5c5SAndroid Build Coastguard Worker        },
301*8975f5c5SAndroid Build Coastguard Worker    ])
302*8975f5c5SAndroid Build Coastguard Worker    step_config["input_deps"].update({
303*8975f5c5SAndroid Build Coastguard Worker        sysroot + ":headers": [
304*8975f5c5SAndroid Build Coastguard Worker            path.join(sysroot, "usr/include") + ":include",
305*8975f5c5SAndroid Build Coastguard Worker            path.join(sysroot, "usr/lib") + ":headers",
306*8975f5c5SAndroid Build Coastguard Worker            path.join(sysroot, "usr/lib64") + ":headers",
307*8975f5c5SAndroid Build Coastguard Worker        ],
308*8975f5c5SAndroid Build Coastguard Worker        path.join(toolchain, "bin/llvm-ar"): [
309*8975f5c5SAndroid Build Coastguard Worker            path.join(toolchain, "bin/llvm-ar.elf"),
310*8975f5c5SAndroid Build Coastguard Worker            path.join(toolchain, "lib") + ":libs",
311*8975f5c5SAndroid Build Coastguard Worker            path.join(toolchain, "usr/lib64") + ":libs",
312*8975f5c5SAndroid Build Coastguard Worker        ],
313*8975f5c5SAndroid Build Coastguard Worker        path.join(toolchain, "bin/ld.lld"): [
314*8975f5c5SAndroid Build Coastguard Worker            path.join(toolchain, "bin:llddeps"),
315*8975f5c5SAndroid Build Coastguard Worker            path.join(toolchain, "lib") + ":libs",
316*8975f5c5SAndroid Build Coastguard Worker            path.join(toolchain, "lib64") + ":libs",
317*8975f5c5SAndroid Build Coastguard Worker            path.join(toolchain, "usr/bin:clang"),
318*8975f5c5SAndroid Build Coastguard Worker            path.join(toolchain, "usr/lib64") + ":libs",
319*8975f5c5SAndroid Build Coastguard Worker            sysroot + ":libs",
320*8975f5c5SAndroid Build Coastguard Worker        ],
321*8975f5c5SAndroid Build Coastguard Worker    })
322*8975f5c5SAndroid Build Coastguard Worker
323*8975f5c5SAndroid Build Coastguard Worker    if cros_nacl_helper_arm32_toolchain and cros_nacl_helper_arm32_sysroot:
324*8975f5c5SAndroid Build Coastguard Worker        step_config["rules"].extend([
325*8975f5c5SAndroid Build Coastguard Worker            {
326*8975f5c5SAndroid Build Coastguard Worker                "name": "clang-cros/nacl_helper_arm32_solink/gcc_solink_wrapper",
327*8975f5c5SAndroid Build Coastguard Worker                "action": "nacl_helper_arm32_solink",
328*8975f5c5SAndroid Build Coastguard Worker                "command_prefix": "\"python3\" \"../../build/toolchain/gcc_solink_wrapper.py\"",
329*8975f5c5SAndroid Build Coastguard Worker                "inputs": [
330*8975f5c5SAndroid Build Coastguard Worker                    "build/toolchain/gcc_solink_wrapper.py",
331*8975f5c5SAndroid Build Coastguard Worker                    path.join(cros_nacl_helper_arm32_toolchain, "bin/ld.lld"),
332*8975f5c5SAndroid Build Coastguard Worker                ],
333*8975f5c5SAndroid Build Coastguard Worker                "exclude_input_patterns": [
334*8975f5c5SAndroid Build Coastguard Worker                    "*.cc",
335*8975f5c5SAndroid Build Coastguard Worker                    "*.h",
336*8975f5c5SAndroid Build Coastguard Worker                    "*.js",
337*8975f5c5SAndroid Build Coastguard Worker                    "*.pak",
338*8975f5c5SAndroid Build Coastguard Worker                    "*.py",
339*8975f5c5SAndroid Build Coastguard Worker                    "*.stamp",
340*8975f5c5SAndroid Build Coastguard Worker                ],
341*8975f5c5SAndroid Build Coastguard Worker                "remote": config.get(ctx, "remote-link"),
342*8975f5c5SAndroid Build Coastguard Worker                # TODO: Do not use absolute paths for custom toolchain/sysroot GN
343*8975f5c5SAndroid Build Coastguard Worker                # args.
344*8975f5c5SAndroid Build Coastguard Worker                "input_root_absolute_path": True,
345*8975f5c5SAndroid Build Coastguard Worker                "platform_ref": "large",
346*8975f5c5SAndroid Build Coastguard Worker                "timeout": "2m",
347*8975f5c5SAndroid Build Coastguard Worker            },
348*8975f5c5SAndroid Build Coastguard Worker            {
349*8975f5c5SAndroid Build Coastguard Worker                "name": "clang-cros/nacl_helper_arm32_link/gcc_link_wrapper",
350*8975f5c5SAndroid Build Coastguard Worker                "action": "nacl_helper_arm32_link",
351*8975f5c5SAndroid Build Coastguard Worker                "command_prefix": "\"python3\" \"../../build/toolchain/gcc_link_wrapper.py\"",
352*8975f5c5SAndroid Build Coastguard Worker                "handler": "clang_link",
353*8975f5c5SAndroid Build Coastguard Worker                "inputs": [
354*8975f5c5SAndroid Build Coastguard Worker                    "build/toolchain/gcc_link_wrapper.py",
355*8975f5c5SAndroid Build Coastguard Worker                    path.join(cros_nacl_helper_arm32_toolchain, "bin/ld.lld"),
356*8975f5c5SAndroid Build Coastguard Worker                ],
357*8975f5c5SAndroid Build Coastguard Worker                "exclude_input_patterns": [
358*8975f5c5SAndroid Build Coastguard Worker                    "*.cc",
359*8975f5c5SAndroid Build Coastguard Worker                    "*.h",
360*8975f5c5SAndroid Build Coastguard Worker                    "*.js",
361*8975f5c5SAndroid Build Coastguard Worker                    "*.pak",
362*8975f5c5SAndroid Build Coastguard Worker                    "*.py",
363*8975f5c5SAndroid Build Coastguard Worker                    "*.stamp",
364*8975f5c5SAndroid Build Coastguard Worker                ],
365*8975f5c5SAndroid Build Coastguard Worker                "remote": config.get(ctx, "remote-link"),
366*8975f5c5SAndroid Build Coastguard Worker                "canonicalize_dir": True,
367*8975f5c5SAndroid Build Coastguard Worker                "platform_ref": "large",
368*8975f5c5SAndroid Build Coastguard Worker                "timeout": "10m",
369*8975f5c5SAndroid Build Coastguard Worker            },
370*8975f5c5SAndroid Build Coastguard Worker        ])
371*8975f5c5SAndroid Build Coastguard Worker        step_config["input_deps"].update({
372*8975f5c5SAndroid Build Coastguard Worker            cros_nacl_helper_arm32_sysroot + ":headers": [
373*8975f5c5SAndroid Build Coastguard Worker                path.join(cros_nacl_helper_arm32_sysroot, "usr/include") + ":include",
374*8975f5c5SAndroid Build Coastguard Worker                path.join(cros_nacl_helper_arm32_sysroot, "usr/lib") + ":headers",
375*8975f5c5SAndroid Build Coastguard Worker                path.join(cros_nacl_helper_arm32_sysroot, "usr/lib64") + ":headers",
376*8975f5c5SAndroid Build Coastguard Worker            ],
377*8975f5c5SAndroid Build Coastguard Worker            path.join(cros_nacl_helper_arm32_toolchain, "bin/llvm-ar"): [
378*8975f5c5SAndroid Build Coastguard Worker                path.join(cros_nacl_helper_arm32_toolchain, "bin/llvm-ar.elf"),
379*8975f5c5SAndroid Build Coastguard Worker                path.join(cros_nacl_helper_arm32_toolchain, "lib") + ":libs",
380*8975f5c5SAndroid Build Coastguard Worker                path.join(cros_nacl_helper_arm32_toolchain, "usr/lib64") + ":libs",
381*8975f5c5SAndroid Build Coastguard Worker            ],
382*8975f5c5SAndroid Build Coastguard Worker            path.join(cros_nacl_helper_arm32_toolchain, "bin/ld.lld"): [
383*8975f5c5SAndroid Build Coastguard Worker                path.join(cros_nacl_helper_arm32_toolchain, "bin:llddeps"),
384*8975f5c5SAndroid Build Coastguard Worker                path.join(cros_nacl_helper_arm32_toolchain, "lib") + ":libs",
385*8975f5c5SAndroid Build Coastguard Worker                path.join(cros_nacl_helper_arm32_toolchain, "lib64") + ":libs",
386*8975f5c5SAndroid Build Coastguard Worker                path.join(cros_nacl_helper_arm32_toolchain, "usr/bin:clang"),
387*8975f5c5SAndroid Build Coastguard Worker                path.join(cros_nacl_helper_arm32_toolchain, "usr/lib64") + ":libs",
388*8975f5c5SAndroid Build Coastguard Worker                path.join(cros_nacl_helper_arm32_toolchain, "usr/armv7a-cros-linux-gnueabihf") + ":libs",
389*8975f5c5SAndroid Build Coastguard Worker                path.join(cros_nacl_helper_arm32_toolchain, "lib64") + ":libs",
390*8975f5c5SAndroid Build Coastguard Worker                cros_nacl_helper_arm32_sysroot + ":libs",
391*8975f5c5SAndroid Build Coastguard Worker            ],
392*8975f5c5SAndroid Build Coastguard Worker        })
393*8975f5c5SAndroid Build Coastguard Worker
394*8975f5c5SAndroid Build Coastguard Worker    return step_config
395*8975f5c5SAndroid Build Coastguard Worker
396*8975f5c5SAndroid Build Coastguard Workercros = module(
397*8975f5c5SAndroid Build Coastguard Worker    "cros",
398*8975f5c5SAndroid Build Coastguard Worker    filegroups = __filegroups,
399*8975f5c5SAndroid Build Coastguard Worker    handlers = {},
400*8975f5c5SAndroid Build Coastguard Worker    step_config = __step_config,
401*8975f5c5SAndroid Build Coastguard Worker)
402