xref: /aosp_15_r20/external/angle/build/config/siso/clang_exception.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"""workaround for exceptional clang actions. e.g. exit=137 (OOM?),
6*8975f5c5SAndroid Build Coastguard Worker or DeadlineExceeded.
7*8975f5c5SAndroid Build Coastguard Worker"""
8*8975f5c5SAndroid Build Coastguard Worker
9*8975f5c5SAndroid Build Coastguard Workerload("@builtin//runtime.star", "runtime")
10*8975f5c5SAndroid Build Coastguard Workerload("@builtin//struct.star", "module")
11*8975f5c5SAndroid Build Coastguard Worker
12*8975f5c5SAndroid Build Coastguard Workerdef __step_config(ctx, step_config):
13*8975f5c5SAndroid Build Coastguard Worker    exceptions = [
14*8975f5c5SAndroid Build Coastguard Worker        {
15*8975f5c5SAndroid Build Coastguard Worker            # TODO: crbug.com/380755128 - Make each compile unit smaller.
16*8975f5c5SAndroid Build Coastguard Worker            "name": "fuzzer_large_compile",
17*8975f5c5SAndroid Build Coastguard Worker            "action_outs": [
18*8975f5c5SAndroid Build Coastguard Worker                "./obj/chrome/test/fuzzing/htmlfuzzer_proto_gen/htmlfuzzer_sub.pb.o",
19*8975f5c5SAndroid Build Coastguard Worker                "./obj/chrome/test/fuzzing/jsfuzzer/jsfuzzer.o",
20*8975f5c5SAndroid Build Coastguard Worker                "./obj/chrome/test/fuzzing/jsfuzzer_proto_gen/jsfuzzer.pb.o",
21*8975f5c5SAndroid Build Coastguard Worker                "./obj/chrome/test/fuzzing/jsfuzzer_proto_gen/jsfuzzer_sub.pb.o",
22*8975f5c5SAndroid Build Coastguard Worker                "./obj/chrome/test/fuzzing/webidl_fuzzing/webidl_fuzzer_grammar/webidl_fuzzer_grammar.o",
23*8975f5c5SAndroid Build Coastguard Worker                "./obj/chrome/test/fuzzing/webidl_fuzzing/webidl_fuzzer_grammar_proto_gen/webidl_fuzzer_grammar.pb.o",
24*8975f5c5SAndroid Build Coastguard Worker                "./obj/chrome/test/fuzzing/webidl_fuzzing/webidlfuzzer/webidlfuzzer.o",
25*8975f5c5SAndroid Build Coastguard Worker                "./obj/chrome/test/fuzzing/webidl_fuzzing/webidlfuzzer_proto_gen/webidlfuzzer.pb.o",
26*8975f5c5SAndroid Build Coastguard Worker                "./obj/chrome/test/fuzzing/webidl_fuzzing/webidlfuzzer_proto_gen/webidlfuzzer_sub.pb.o",
27*8975f5c5SAndroid Build Coastguard Worker            ],
28*8975f5c5SAndroid Build Coastguard Worker            "timeout": "15m",
29*8975f5c5SAndroid Build Coastguard Worker            # need 9G for debug build
30*8975f5c5SAndroid Build Coastguard Worker            "use_large": True,
31*8975f5c5SAndroid Build Coastguard Worker        },
32*8975f5c5SAndroid Build Coastguard Worker    ]
33*8975f5c5SAndroid Build Coastguard Worker    new_rules = []
34*8975f5c5SAndroid Build Coastguard Worker    for rule in step_config["rules"]:
35*8975f5c5SAndroid Build Coastguard Worker        if not rule["name"].endswith("/cxx"):
36*8975f5c5SAndroid Build Coastguard Worker            new_rules.append(rule)
37*8975f5c5SAndroid Build Coastguard Worker            continue
38*8975f5c5SAndroid Build Coastguard Worker        if "action_outs" in rule:
39*8975f5c5SAndroid Build Coastguard Worker            fail("unexpeced \"action_outs\" in cxx rule %s" % rule["name"])
40*8975f5c5SAndroid Build Coastguard Worker        for ex in exceptions:
41*8975f5c5SAndroid Build Coastguard Worker            r = {}
42*8975f5c5SAndroid Build Coastguard Worker            r.update(rule)
43*8975f5c5SAndroid Build Coastguard Worker            r["name"] += "/exception/" + ex["name"]
44*8975f5c5SAndroid Build Coastguard Worker            outs = ex["action_outs"]
45*8975f5c5SAndroid Build Coastguard Worker            if runtime.os == "windows":
46*8975f5c5SAndroid Build Coastguard Worker                outs = [obj.removesuffix(".o") + ".obj" for obj in outs if obj.startswith("./obj/")]
47*8975f5c5SAndroid Build Coastguard Worker            r["action_outs"] = outs
48*8975f5c5SAndroid Build Coastguard Worker            if "timeout" in ex:
49*8975f5c5SAndroid Build Coastguard Worker                r["timeout"] = ex["timeout"]
50*8975f5c5SAndroid Build Coastguard Worker            if "use_large" in ex and ex["use_large"]:
51*8975f5c5SAndroid Build Coastguard Worker                # use `_large` variant of platform if it doesn't use default platform,
52*8975f5c5SAndroid Build Coastguard Worker                # i.e. mac/win case.
53*8975f5c5SAndroid Build Coastguard Worker                if "platform_ref" in r:
54*8975f5c5SAndroid Build Coastguard Worker                    r["platform_ref"] = r["platform_ref"] + "_large"
55*8975f5c5SAndroid Build Coastguard Worker                else:
56*8975f5c5SAndroid Build Coastguard Worker                    r["platform_ref"] = "large"
57*8975f5c5SAndroid Build Coastguard Worker            if r.get("handler") == "rewrite_rewrapper":
58*8975f5c5SAndroid Build Coastguard Worker                r["handler"] = "rewrite_rewrapper_large"
59*8975f5c5SAndroid Build Coastguard Worker            new_rules.append(r)
60*8975f5c5SAndroid Build Coastguard Worker        new_rules.append(rule)
61*8975f5c5SAndroid Build Coastguard Worker    step_config["rules"] = new_rules
62*8975f5c5SAndroid Build Coastguard Worker    return step_config
63*8975f5c5SAndroid Build Coastguard Worker
64*8975f5c5SAndroid Build Coastguard Workerclang_exception = module(
65*8975f5c5SAndroid Build Coastguard Worker    "clang_exception",
66*8975f5c5SAndroid Build Coastguard Worker    step_config = __step_config,
67*8975f5c5SAndroid Build Coastguard Worker)
68