xref: /aosp_15_r20/external/cronet/build/config/siso/devtools_frontend.star (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Workerload("@builtin//encoding.star", "json")
2*6777b538SAndroid Build Coastguard Workerload("@builtin//path.star", "path")
3*6777b538SAndroid Build Coastguard Workerload("@builtin//struct.star", "module")
4*6777b538SAndroid Build Coastguard Workerload("./config.star", "config")
5*6777b538SAndroid Build Coastguard Workerload("./tsc.star", "tsc")
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker# TODO: crbug.com/1478909 - Specify typescript inputs in GN config.
8*6777b538SAndroid Build Coastguard Workerdef __filegroups(ctx):
9*6777b538SAndroid Build Coastguard Worker    return {
10*6777b538SAndroid Build Coastguard Worker        "third_party/devtools-frontend/src/node_modules/typescript:typescript": {
11*6777b538SAndroid Build Coastguard Worker            "type": "glob",
12*6777b538SAndroid Build Coastguard Worker            "includes": ["*"],
13*6777b538SAndroid Build Coastguard Worker        },
14*6777b538SAndroid Build Coastguard Worker        "third_party/devtools-frontend/src/node_modules:node_modules": {
15*6777b538SAndroid Build Coastguard Worker            "type": "glob",
16*6777b538SAndroid Build Coastguard Worker            "includes": ["*.js", "*.json", "*.ts"],
17*6777b538SAndroid Build Coastguard Worker        },
18*6777b538SAndroid Build Coastguard Worker    }
19*6777b538SAndroid Build Coastguard Worker
20*6777b538SAndroid Build Coastguard Workerdef __step_config(ctx, step_config):
21*6777b538SAndroid Build Coastguard Worker    step_config["input_deps"].update({
22*6777b538SAndroid Build Coastguard Worker        "third_party/devtools-frontend/src/third_party/typescript/ts_library.py": [
23*6777b538SAndroid Build Coastguard Worker            "third_party/devtools-frontend/src/node_modules/typescript:typescript",
24*6777b538SAndroid Build Coastguard Worker            "third_party/devtools-frontend/src/node_modules:node_modules",
25*6777b538SAndroid Build Coastguard Worker        ],
26*6777b538SAndroid Build Coastguard Worker    })
27*6777b538SAndroid Build Coastguard Worker
28*6777b538SAndroid Build Coastguard Worker    # TODO: b/308405411 - Enable remote-devtools-frontend-typescript by default.
29*6777b538SAndroid Build Coastguard Worker    if config.get(ctx, "remote-devtools-frontend-typescript"):
30*6777b538SAndroid Build Coastguard Worker        step_config["rules"].extend([
31*6777b538SAndroid Build Coastguard Worker            {
32*6777b538SAndroid Build Coastguard Worker                "name": "devtools-frontend/typescript/ts_library",
33*6777b538SAndroid Build Coastguard Worker                "command_prefix": "python3 ../../third_party/devtools-frontend/src/third_party/typescript/ts_library.py",
34*6777b538SAndroid Build Coastguard Worker                "exclude_input_patterns": [
35*6777b538SAndroid Build Coastguard Worker                    "*.stamp",
36*6777b538SAndroid Build Coastguard Worker                ],
37*6777b538SAndroid Build Coastguard Worker                "remote": True,
38*6777b538SAndroid Build Coastguard Worker                "handler": "devtools_frontend/typescript_ts_library",
39*6777b538SAndroid Build Coastguard Worker                "output_local": True,
40*6777b538SAndroid Build Coastguard Worker            },
41*6777b538SAndroid Build Coastguard Worker        ])
42*6777b538SAndroid Build Coastguard Worker    return step_config
43*6777b538SAndroid Build Coastguard Worker
44*6777b538SAndroid Build Coastguard Workerdef _ts_library(ctx, cmd):
45*6777b538SAndroid Build Coastguard Worker    # Handler for https://crsrc.org/c/third_party/devtools-frontend/src/third_party/typescript/ts_library.py
46*6777b538SAndroid Build Coastguard Worker    # Note that this is a different script from https://crsrc.org/c/tools/typescript/ts_library.py
47*6777b538SAndroid Build Coastguard Worker    deps = []
48*6777b538SAndroid Build Coastguard Worker    sources = []
49*6777b538SAndroid Build Coastguard Worker    tsconfig_path = None
50*6777b538SAndroid Build Coastguard Worker    flag = None
51*6777b538SAndroid Build Coastguard Worker    for i, arg in enumerate(cmd.args):
52*6777b538SAndroid Build Coastguard Worker        if flag != "" and arg.startswith("-"):
53*6777b538SAndroid Build Coastguard Worker            flag = ""
54*6777b538SAndroid Build Coastguard Worker        if arg == "--tsconfig_output_location":
55*6777b538SAndroid Build Coastguard Worker            tsconfig_path = ctx.fs.canonpath(cmd.args[i + 1])
56*6777b538SAndroid Build Coastguard Worker            continue
57*6777b538SAndroid Build Coastguard Worker        if arg in ("--deps", "--sources"):
58*6777b538SAndroid Build Coastguard Worker            flag = arg
59*6777b538SAndroid Build Coastguard Worker            continue
60*6777b538SAndroid Build Coastguard Worker        if flag == "--deps":
61*6777b538SAndroid Build Coastguard Worker            deps.append(arg)
62*6777b538SAndroid Build Coastguard Worker            continue
63*6777b538SAndroid Build Coastguard Worker        if flag == "--sources":
64*6777b538SAndroid Build Coastguard Worker            sources.append(ctx.fs.canonpath(arg))
65*6777b538SAndroid Build Coastguard Worker            continue
66*6777b538SAndroid Build Coastguard Worker    if not tsconfig_path:
67*6777b538SAndroid Build Coastguard Worker        fail("missing --tsconfig_output_location")
68*6777b538SAndroid Build Coastguard Worker    tsconfig = {"files": [], "references": []}
69*6777b538SAndroid Build Coastguard Worker    tsconfig_dir = path.dir(tsconfig_path)
70*6777b538SAndroid Build Coastguard Worker    for s in sources:
71*6777b538SAndroid Build Coastguard Worker        tsconfig["files"].append(path.rel(tsconfig_dir, s))
72*6777b538SAndroid Build Coastguard Worker    for d in deps:
73*6777b538SAndroid Build Coastguard Worker        tsconfig["references"].append({"path": d})
74*6777b538SAndroid Build Coastguard Worker        refpath = path.join(tsconfig_dir, d)
75*6777b538SAndroid Build Coastguard Worker        refdir = path.dir(refpath)
76*6777b538SAndroid Build Coastguard Worker
77*6777b538SAndroid Build Coastguard Worker        # TODO: crbug.com/1503020 - Fix devtools_entrypoint to propagate .d.ts output.
78*6777b538SAndroid Build Coastguard Worker        dpath = path.join(refdir, path.base(refdir) + ".d.ts")
79*6777b538SAndroid Build Coastguard Worker        if ctx.fs.exists(dpath):
80*6777b538SAndroid Build Coastguard Worker            sources.append(dpath)
81*6777b538SAndroid Build Coastguard Worker
82*6777b538SAndroid Build Coastguard Worker    inputs = tsc.scandeps(ctx, tsconfig_path, tsconfig)
83*6777b538SAndroid Build Coastguard Worker
84*6777b538SAndroid Build Coastguard Worker    # Sources and imported files might be located in different dirs. source vs gen.
85*6777b538SAndroid Build Coastguard Worker    # Try to collect the corresponding files in source or gen dir.
86*6777b538SAndroid Build Coastguard Worker    # TODO: crbug.com/1505319 - Fix devtools_module import issues.
87*6777b538SAndroid Build Coastguard Worker    files = {}
88*6777b538SAndroid Build Coastguard Worker    gen_dir = None
89*6777b538SAndroid Build Coastguard Worker
90*6777b538SAndroid Build Coastguard Worker    # Infer source files from gen file.
91*6777b538SAndroid Build Coastguard Worker    for f in cmd.inputs + inputs:
92*6777b538SAndroid Build Coastguard Worker        if f.startswith("out/"):
93*6777b538SAndroid Build Coastguard Worker            # Remove out/{subdir}/gen.
94*6777b538SAndroid Build Coastguard Worker            splits = f.split("/", 3)
95*6777b538SAndroid Build Coastguard Worker            if len(splits) < 4:
96*6777b538SAndroid Build Coastguard Worker                continue
97*6777b538SAndroid Build Coastguard Worker            gen_dir = path.join(splits[0], splits[1], splits[2])
98*6777b538SAndroid Build Coastguard Worker            f = splits[3]
99*6777b538SAndroid Build Coastguard Worker            if ctx.fs.exists(f) and not f in files:
100*6777b538SAndroid Build Coastguard Worker                files[f] = True
101*6777b538SAndroid Build Coastguard Worker                continue
102*6777b538SAndroid Build Coastguard Worker            if f.endswith(".js"):
103*6777b538SAndroid Build Coastguard Worker                f = f.removesuffix(".js") + ".d.ts"
104*6777b538SAndroid Build Coastguard Worker                if ctx.fs.exists(f) and not f in files:
105*6777b538SAndroid Build Coastguard Worker                    files[f] = True
106*6777b538SAndroid Build Coastguard Worker
107*6777b538SAndroid Build Coastguard Worker    # Infer gen files from source file.
108*6777b538SAndroid Build Coastguard Worker    if gen_dir:
109*6777b538SAndroid Build Coastguard Worker        for f in cmd.inputs + inputs:
110*6777b538SAndroid Build Coastguard Worker            if f.endswith(".ts"):
111*6777b538SAndroid Build Coastguard Worker                f = path.join(gen_dir, f)
112*6777b538SAndroid Build Coastguard Worker                f = f.removesuffix(".ts") + ".d.ts"
113*6777b538SAndroid Build Coastguard Worker                if ctx.fs.exists(f) and not f in files:
114*6777b538SAndroid Build Coastguard Worker                    files[f] = True
115*6777b538SAndroid Build Coastguard Worker            if f.endswith(".js"):
116*6777b538SAndroid Build Coastguard Worker                f = path.join(gen_dir, f)
117*6777b538SAndroid Build Coastguard Worker                f = f.removesuffix(".js") + ".d.ts"
118*6777b538SAndroid Build Coastguard Worker                if ctx.fs.exists(f) and not f in files:
119*6777b538SAndroid Build Coastguard Worker                    files[f] = True
120*6777b538SAndroid Build Coastguard Worker
121*6777b538SAndroid Build Coastguard Worker    ctx.actions.fix(inputs = cmd.inputs + inputs + sources + files.keys())
122*6777b538SAndroid Build Coastguard Worker
123*6777b538SAndroid Build Coastguard Workerdevtools_frontend = module(
124*6777b538SAndroid Build Coastguard Worker    "devtools_frontend",
125*6777b538SAndroid Build Coastguard Worker    step_config = __step_config,
126*6777b538SAndroid Build Coastguard Worker    handlers = {
127*6777b538SAndroid Build Coastguard Worker        "devtools_frontend/typescript_ts_library": _ts_library,
128*6777b538SAndroid Build Coastguard Worker    },
129*6777b538SAndroid Build Coastguard Worker    filegroups = __filegroups,
130*6777b538SAndroid Build Coastguard Worker)
131