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