xref: /aosp_15_r20/external/cronet/build/config/siso/cros.star (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker# -*- bazel-starlark -*-
2*6777b538SAndroid Build Coastguard Worker# Copyright 2023 The Chromium Authors
3*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
4*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file.
5*6777b538SAndroid Build Coastguard Worker"""Siso configuration for ChromeOS builds."""
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Workerload("@builtin//lib/gn.star", "gn")
8*6777b538SAndroid Build Coastguard Workerload("@builtin//path.star", "path")
9*6777b538SAndroid Build Coastguard Workerload("@builtin//struct.star", "module")
10*6777b538SAndroid Build Coastguard Worker
11*6777b538SAndroid Build Coastguard Workerdef __custom_toolchain(ctx):
12*6777b538SAndroid Build Coastguard Worker    if not "args.gn" in ctx.metadata:
13*6777b538SAndroid Build Coastguard Worker        print("no args.gn")
14*6777b538SAndroid Build Coastguard Worker        return None
15*6777b538SAndroid Build Coastguard Worker    gn_args = gn.args(ctx)
16*6777b538SAndroid Build Coastguard Worker    if gn_args.get("target_os") != '"chromeos"':
17*6777b538SAndroid Build Coastguard Worker        return None
18*6777b538SAndroid Build Coastguard Worker    if not "cros_target_cxx" in gn_args:
19*6777b538SAndroid Build Coastguard Worker        print("no cros_target_cxx")
20*6777b538SAndroid Build Coastguard Worker        return None
21*6777b538SAndroid Build Coastguard Worker    cros_target_cxx = gn_args.get("cros_target_cxx")
22*6777b538SAndroid Build Coastguard Worker    cros_target_cxx = cros_target_cxx.strip('"')
23*6777b538SAndroid Build Coastguard Worker    cros_target_cxx = ctx.fs.canonpath(cros_target_cxx)
24*6777b538SAndroid Build Coastguard Worker    toolchain = path.dir(path.dir(cros_target_cxx))
25*6777b538SAndroid Build Coastguard Worker    if not toolchain:
26*6777b538SAndroid Build Coastguard Worker        fail("failed to detect cros custom toolchain. cros_target_cxx = %s" % gn_args.get("cros_target_cxx"))
27*6777b538SAndroid Build Coastguard Worker    return toolchain
28*6777b538SAndroid Build Coastguard Worker
29*6777b538SAndroid Build Coastguard Workerdef __custom_sysroot(ctx):
30*6777b538SAndroid Build Coastguard Worker    if not "args.gn" in ctx.metadata:
31*6777b538SAndroid Build Coastguard Worker        print("no args.gn")
32*6777b538SAndroid Build Coastguard Worker        return None
33*6777b538SAndroid Build Coastguard Worker    gn_args = gn.args(ctx)
34*6777b538SAndroid Build Coastguard Worker    if gn_args.get("target_os") != '"chromeos"':
35*6777b538SAndroid Build Coastguard Worker        return None
36*6777b538SAndroid Build Coastguard Worker    if not "target_sysroot" in gn_args:
37*6777b538SAndroid Build Coastguard Worker        print("no target_sysroot")
38*6777b538SAndroid Build Coastguard Worker        return None
39*6777b538SAndroid Build Coastguard Worker    sysroot = gn_args.get("target_sysroot")
40*6777b538SAndroid Build Coastguard Worker    sysroot = sysroot.strip('"')
41*6777b538SAndroid Build Coastguard Worker    sysroot = ctx.fs.canonpath(sysroot)
42*6777b538SAndroid Build Coastguard Worker    if not sysroot:
43*6777b538SAndroid Build Coastguard Worker        fail("failed to detect cros custom sysroot. target_sysroot = %s" % gn_args.get("target_sysroot"))
44*6777b538SAndroid Build Coastguard Worker    return sysroot
45*6777b538SAndroid Build Coastguard Worker
46*6777b538SAndroid Build Coastguard Workerdef __filegroups(ctx):
47*6777b538SAndroid Build Coastguard Worker    fg = {}
48*6777b538SAndroid Build Coastguard Worker    toolchain = __custom_toolchain(ctx)
49*6777b538SAndroid Build Coastguard Worker    print("toolchain = %s" % toolchain)
50*6777b538SAndroid Build Coastguard Worker    if toolchain:
51*6777b538SAndroid Build Coastguard Worker        fg[toolchain + ":headers"] = {
52*6777b538SAndroid Build Coastguard Worker            "type": "glob",
53*6777b538SAndroid Build Coastguard Worker            "includes": ["*"],
54*6777b538SAndroid Build Coastguard Worker        }
55*6777b538SAndroid Build Coastguard Worker    sysroot = __custom_sysroot(ctx)
56*6777b538SAndroid Build Coastguard Worker    print("sysroot = %s" % sysroot)
57*6777b538SAndroid Build Coastguard Worker    if sysroot:
58*6777b538SAndroid Build Coastguard Worker        fg[path.join(sysroot, "usr/include") + ":include"] = {
59*6777b538SAndroid Build Coastguard Worker            "type": "glob",
60*6777b538SAndroid Build Coastguard Worker            "includes": ["*"],
61*6777b538SAndroid Build Coastguard Worker            # needs bits/stab.def, c++/*
62*6777b538SAndroid Build Coastguard Worker        }
63*6777b538SAndroid Build Coastguard Worker        fg[path.join(sysroot, "usr/lib") + ":headers"] = {
64*6777b538SAndroid Build Coastguard Worker            "type": "glob",
65*6777b538SAndroid Build Coastguard Worker            "includes": ["*.h", "crtbegin.o"],
66*6777b538SAndroid Build Coastguard Worker        }
67*6777b538SAndroid Build Coastguard Worker        fg[path.join(sysroot, "usr/lib64") + ":headers"] = {
68*6777b538SAndroid Build Coastguard Worker            "type": "glob",
69*6777b538SAndroid Build Coastguard Worker            "includes": ["*.h"],
70*6777b538SAndroid Build Coastguard Worker        }
71*6777b538SAndroid Build Coastguard Worker    print(fg)
72*6777b538SAndroid Build Coastguard Worker    return fg
73*6777b538SAndroid Build Coastguard Worker
74*6777b538SAndroid Build Coastguard Workerdef __cros_compiler(ctx, cmd):
75*6777b538SAndroid Build Coastguard Worker    tool_inputs = cmd.tool_inputs
76*6777b538SAndroid Build Coastguard Worker    for i, arg in enumerate(cmd.args):
77*6777b538SAndroid Build Coastguard Worker        if arg.startswith("-fprofile-sample-use="):
78*6777b538SAndroid Build Coastguard Worker            # profile data is in ninja input (direct or indirect),
79*6777b538SAndroid Build Coastguard Worker            # but siso doesn't include ninja inputs for deps=gcc
80*6777b538SAndroid Build Coastguard Worker            # (it would include lots of unnecessary inputs)
81*6777b538SAndroid Build Coastguard Worker            # so just add profdata by checking command line flag.
82*6777b538SAndroid Build Coastguard Worker            profdata = ctx.fs.canonpath(arg.removeprefix("-fprofile-sample-use="))
83*6777b538SAndroid Build Coastguard Worker            tool_inputs.append(profdata)
84*6777b538SAndroid Build Coastguard Worker    ctx.actions.fix(tool_inputs = tool_inputs)
85*6777b538SAndroid Build Coastguard Worker
86*6777b538SAndroid Build Coastguard Worker__handlers = {
87*6777b538SAndroid Build Coastguard Worker    "cros_compiler": __cros_compiler,
88*6777b538SAndroid Build Coastguard Worker}
89*6777b538SAndroid Build Coastguard Worker
90*6777b538SAndroid Build Coastguard Workerdef __step_config(ctx, step_config):
91*6777b538SAndroid Build Coastguard Worker    if __custom_toolchain(ctx):
92*6777b538SAndroid Build Coastguard Worker        step_config["rules"].extend([
93*6777b538SAndroid Build Coastguard Worker            {
94*6777b538SAndroid Build Coastguard Worker                "name": "clang-cros/cxx",
95*6777b538SAndroid Build Coastguard Worker                "action": "(.*_)?cxx",
96*6777b538SAndroid Build Coastguard Worker                "command_prefix": "../../build/cros_cache/chrome-sdk/",
97*6777b538SAndroid Build Coastguard Worker                "remote": True,
98*6777b538SAndroid Build Coastguard Worker                "handler": "cros_compiler",
99*6777b538SAndroid Build Coastguard Worker                "canonicalize_dir": True,
100*6777b538SAndroid Build Coastguard Worker                "timeout": "5m",
101*6777b538SAndroid Build Coastguard Worker            },
102*6777b538SAndroid Build Coastguard Worker            {
103*6777b538SAndroid Build Coastguard Worker                "name": "clang-cros/cc",
104*6777b538SAndroid Build Coastguard Worker                "action": "(.*_)?cc",
105*6777b538SAndroid Build Coastguard Worker                "command_prefix": "../../build/cros_cache/chrome-sdk/",
106*6777b538SAndroid Build Coastguard Worker                "remote": True,
107*6777b538SAndroid Build Coastguard Worker                "handler": "cros_compiler",
108*6777b538SAndroid Build Coastguard Worker                "canonicalize_dir": True,
109*6777b538SAndroid Build Coastguard Worker                "timeout": "5m",
110*6777b538SAndroid Build Coastguard Worker            },
111*6777b538SAndroid Build Coastguard Worker        ])
112*6777b538SAndroid Build Coastguard Worker    sysroot = __custom_sysroot(ctx)
113*6777b538SAndroid Build Coastguard Worker    if sysroot:
114*6777b538SAndroid Build Coastguard Worker        step_config["input_deps"].update({
115*6777b538SAndroid Build Coastguard Worker            sysroot + ":headers": [
116*6777b538SAndroid Build Coastguard Worker                path.join(sysroot, "usr/include") + ":include",
117*6777b538SAndroid Build Coastguard Worker                path.join(sysroot, "usr/lib") + ":headers",
118*6777b538SAndroid Build Coastguard Worker                path.join(sysroot, "usr/lib64") + ":headers",
119*6777b538SAndroid Build Coastguard Worker            ],
120*6777b538SAndroid Build Coastguard Worker        })
121*6777b538SAndroid Build Coastguard Worker    return step_config
122*6777b538SAndroid Build Coastguard Worker
123*6777b538SAndroid Build Coastguard Workercros = module(
124*6777b538SAndroid Build Coastguard Worker    "cros",
125*6777b538SAndroid Build Coastguard Worker    custom_toolchain = __custom_toolchain,
126*6777b538SAndroid Build Coastguard Worker    custom_sysroot = __custom_sysroot,
127*6777b538SAndroid Build Coastguard Worker    filegroups = __filegroups,
128*6777b538SAndroid Build Coastguard Worker    handlers = __handlers,
129*6777b538SAndroid Build Coastguard Worker    step_config = __step_config,
130*6777b538SAndroid Build Coastguard Worker)
131