1*795d594fSAndroid Build Coastguard Worker#!/usr/bin/env lucicfg 2*795d594fSAndroid Build Coastguard Worker# 3*795d594fSAndroid Build Coastguard Worker# Copyright (C) 2021 The Android Open Source Project 4*795d594fSAndroid Build Coastguard Worker# 5*795d594fSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 6*795d594fSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*795d594fSAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*795d594fSAndroid Build Coastguard Worker# 9*795d594fSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*795d594fSAndroid Build Coastguard Worker# 11*795d594fSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*795d594fSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 13*795d594fSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*795d594fSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*795d594fSAndroid Build Coastguard Worker# limitations under the License. 16*795d594fSAndroid Build Coastguard Worker# 17*795d594fSAndroid Build Coastguard Worker 18*795d594fSAndroid Build Coastguard Worker"""LUCI project configuration for the production instance of LUCI. 19*795d594fSAndroid Build Coastguard Worker 20*795d594fSAndroid Build Coastguard WorkerAfter modifying this file execute it ('./main.star') to regenerate the configs. 21*795d594fSAndroid Build Coastguard Worker""" 22*795d594fSAndroid Build Coastguard Worker 23*795d594fSAndroid Build Coastguard Workerlucicfg.check_version("1.30.9", "Please update depot_tools") 24*795d594fSAndroid Build Coastguard Worker 25*795d594fSAndroid Build Coastguard Workerluci.builder.defaults.experiments.set({ 26*795d594fSAndroid Build Coastguard Worker "luci.recipes.use_python3": 100, 27*795d594fSAndroid Build Coastguard Worker}) 28*795d594fSAndroid Build Coastguard Worker 29*795d594fSAndroid Build Coastguard Worker# Use LUCI Scheduler BBv2 names and add Scheduler realms configs. 30*795d594fSAndroid Build Coastguard Workerlucicfg.enable_experiment("crbug.com/1182002") 31*795d594fSAndroid Build Coastguard Worker 32*795d594fSAndroid Build Coastguard Worker# Tell lucicfg what files it is allowed to touch. 33*795d594fSAndroid Build Coastguard Workerlucicfg.config( 34*795d594fSAndroid Build Coastguard Worker config_dir = "generated", 35*795d594fSAndroid Build Coastguard Worker fail_on_warnings = True, 36*795d594fSAndroid Build Coastguard Worker lint_checks = ["default"], 37*795d594fSAndroid Build Coastguard Worker) 38*795d594fSAndroid Build Coastguard Worker 39*795d594fSAndroid Build Coastguard Worker# TODO: Switch to project-scoped service account. 40*795d594fSAndroid Build Coastguard Worker 41*795d594fSAndroid Build Coastguard Workerluci.project( 42*795d594fSAndroid Build Coastguard Worker name = "art", 43*795d594fSAndroid Build Coastguard Worker buildbucket = "cr-buildbucket.appspot.com", 44*795d594fSAndroid Build Coastguard Worker logdog = "luci-logdog.appspot.com", 45*795d594fSAndroid Build Coastguard Worker milo = "luci-milo.appspot.com", 46*795d594fSAndroid Build Coastguard Worker notify = "luci-notify.appspot.com", 47*795d594fSAndroid Build Coastguard Worker scheduler = "luci-scheduler.appspot.com", 48*795d594fSAndroid Build Coastguard Worker swarming = "chromium-swarm.appspot.com", 49*795d594fSAndroid Build Coastguard Worker acls = [ 50*795d594fSAndroid Build Coastguard Worker # Publicly readable. 51*795d594fSAndroid Build Coastguard Worker acl.entry( 52*795d594fSAndroid Build Coastguard Worker roles = [ 53*795d594fSAndroid Build Coastguard Worker acl.BUILDBUCKET_READER, 54*795d594fSAndroid Build Coastguard Worker acl.LOGDOG_READER, 55*795d594fSAndroid Build Coastguard Worker acl.PROJECT_CONFIGS_READER, 56*795d594fSAndroid Build Coastguard Worker acl.SCHEDULER_READER, 57*795d594fSAndroid Build Coastguard Worker ], 58*795d594fSAndroid Build Coastguard Worker groups = "all", 59*795d594fSAndroid Build Coastguard Worker ), 60*795d594fSAndroid Build Coastguard Worker acl.entry( 61*795d594fSAndroid Build Coastguard Worker roles = [ 62*795d594fSAndroid Build Coastguard Worker acl.BUILDBUCKET_OWNER, 63*795d594fSAndroid Build Coastguard Worker acl.SCHEDULER_OWNER, 64*795d594fSAndroid Build Coastguard Worker ], 65*795d594fSAndroid Build Coastguard Worker groups = "project-art-admins", 66*795d594fSAndroid Build Coastguard Worker ), 67*795d594fSAndroid Build Coastguard Worker acl.entry( 68*795d594fSAndroid Build Coastguard Worker roles = acl.LOGDOG_WRITER, 69*795d594fSAndroid Build Coastguard Worker groups = "luci-logdog-chromium-writers", 70*795d594fSAndroid Build Coastguard Worker ), 71*795d594fSAndroid Build Coastguard Worker ], 72*795d594fSAndroid Build Coastguard Worker bindings = [ 73*795d594fSAndroid Build Coastguard Worker luci.binding( 74*795d594fSAndroid Build Coastguard Worker roles = "role/swarming.poolOwner", 75*795d594fSAndroid Build Coastguard Worker groups = "project-art-admins", 76*795d594fSAndroid Build Coastguard Worker ), 77*795d594fSAndroid Build Coastguard Worker luci.binding( 78*795d594fSAndroid Build Coastguard Worker roles = "role/swarming.poolViewer", 79*795d594fSAndroid Build Coastguard Worker groups = "all", 80*795d594fSAndroid Build Coastguard Worker ), 81*795d594fSAndroid Build Coastguard Worker ], 82*795d594fSAndroid Build Coastguard Worker) 83*795d594fSAndroid Build Coastguard Worker 84*795d594fSAndroid Build Coastguard Worker# Per-service tweaks. 85*795d594fSAndroid Build Coastguard Workerluci.logdog(gs_bucket = "chromium-luci-logdog") 86*795d594fSAndroid Build Coastguard Workerluci.milo(logo = "https://storage.googleapis.com/chrome-infra-public/logo/art-logo.png") 87*795d594fSAndroid Build Coastguard Worker 88*795d594fSAndroid Build Coastguard Worker# Allow admins to use LED and "Debug" button on every builder and bot. 89*795d594fSAndroid Build Coastguard Workerluci.binding( 90*795d594fSAndroid Build Coastguard Worker realm = "@root", 91*795d594fSAndroid Build Coastguard Worker roles = "role/swarming.poolUser", 92*795d594fSAndroid Build Coastguard Worker groups = "project-art-admins", 93*795d594fSAndroid Build Coastguard Worker) 94*795d594fSAndroid Build Coastguard Workerluci.binding( 95*795d594fSAndroid Build Coastguard Worker realm = "@root", 96*795d594fSAndroid Build Coastguard Worker roles = "role/swarming.taskTriggerer", 97*795d594fSAndroid Build Coastguard Worker groups = "project-art-admins", 98*795d594fSAndroid Build Coastguard Worker) 99*795d594fSAndroid Build Coastguard Worker 100*795d594fSAndroid Build Coastguard Worker# Resources shared by all subprojects. 101*795d594fSAndroid Build Coastguard Worker 102*795d594fSAndroid Build Coastguard Workerluci.realm(name = "pools/ci") 103*795d594fSAndroid Build Coastguard Workerluci.bucket(name = "ci") 104*795d594fSAndroid Build Coastguard Worker 105*795d594fSAndroid Build Coastguard Worker# Shadow bucket is needed for LED. 106*795d594fSAndroid Build Coastguard Workerluci.bucket( 107*795d594fSAndroid Build Coastguard Worker name = "ci.shadow", 108*795d594fSAndroid Build Coastguard Worker shadows = "ci", 109*795d594fSAndroid Build Coastguard Worker bindings = [ 110*795d594fSAndroid Build Coastguard Worker luci.binding( 111*795d594fSAndroid Build Coastguard Worker roles = "role/buildbucket.creator", 112*795d594fSAndroid Build Coastguard Worker users = ["[email protected]"], 113*795d594fSAndroid Build Coastguard Worker ), 114*795d594fSAndroid Build Coastguard Worker luci.binding( 115*795d594fSAndroid Build Coastguard Worker roles = "role/buildbucket.triggerer", 116*795d594fSAndroid Build Coastguard Worker users = ["[email protected]"], 117*795d594fSAndroid Build Coastguard Worker ), 118*795d594fSAndroid Build Coastguard Worker ], 119*795d594fSAndroid Build Coastguard Worker constraints = luci.bucket_constraints( 120*795d594fSAndroid Build Coastguard Worker pools = ["luci.art.ci"], 121*795d594fSAndroid Build Coastguard Worker service_accounts = ["[email protected]"], 122*795d594fSAndroid Build Coastguard Worker ), 123*795d594fSAndroid Build Coastguard Worker dynamic = True, 124*795d594fSAndroid Build Coastguard Worker) 125*795d594fSAndroid Build Coastguard Worker 126*795d594fSAndroid Build Coastguard Workerluci.notifier_template( 127*795d594fSAndroid Build Coastguard Worker name = "default", 128*795d594fSAndroid Build Coastguard Worker body = io.read_file("luci-notify.template"), 129*795d594fSAndroid Build Coastguard Worker) 130*795d594fSAndroid Build Coastguard Worker 131*795d594fSAndroid Build Coastguard Workerluci.console_view( 132*795d594fSAndroid Build Coastguard Worker name = "luci", 133*795d594fSAndroid Build Coastguard Worker repo = "https://android.googlesource.com/platform/art", 134*795d594fSAndroid Build Coastguard Worker title = "ART LUCI Console", 135*795d594fSAndroid Build Coastguard Worker refs = ["refs/heads/master"], 136*795d594fSAndroid Build Coastguard Worker include_experimental_builds = True, 137*795d594fSAndroid Build Coastguard Worker) 138*795d594fSAndroid Build Coastguard Worker 139*795d594fSAndroid Build Coastguard Workerluci.notifier( 140*795d594fSAndroid Build Coastguard Worker name = "art-team+chromium-buildbot", 141*795d594fSAndroid Build Coastguard Worker on_new_status = [ 142*795d594fSAndroid Build Coastguard Worker "FAILURE", 143*795d594fSAndroid Build Coastguard Worker "INFRA_FAILURE", 144*795d594fSAndroid Build Coastguard Worker ], 145*795d594fSAndroid Build Coastguard Worker notify_emails = [ 146*795d594fSAndroid Build Coastguard Worker "[email protected]", 147*795d594fSAndroid Build Coastguard Worker ], 148*795d594fSAndroid Build Coastguard Worker) 149*795d594fSAndroid Build Coastguard Worker 150*795d594fSAndroid Build Coastguard Workerluci.gitiles_poller( 151*795d594fSAndroid Build Coastguard Worker name = "art", 152*795d594fSAndroid Build Coastguard Worker bucket = "ci", 153*795d594fSAndroid Build Coastguard Worker repo = "https://android.googlesource.com/platform/art", 154*795d594fSAndroid Build Coastguard Worker refs = ["refs/heads/master"], 155*795d594fSAndroid Build Coastguard Worker) 156*795d594fSAndroid Build Coastguard Worker 157*795d594fSAndroid Build Coastguard Workerluci.gitiles_poller( 158*795d594fSAndroid Build Coastguard Worker name = "libcore", 159*795d594fSAndroid Build Coastguard Worker bucket = "ci", 160*795d594fSAndroid Build Coastguard Worker repo = "https://android.googlesource.com/platform/libcore", 161*795d594fSAndroid Build Coastguard Worker refs = ["refs/heads/master"], 162*795d594fSAndroid Build Coastguard Worker) 163*795d594fSAndroid Build Coastguard Worker 164*795d594fSAndroid Build Coastguard Workerluci.gitiles_poller( 165*795d594fSAndroid Build Coastguard Worker name = "vogar", 166*795d594fSAndroid Build Coastguard Worker bucket = "ci", 167*795d594fSAndroid Build Coastguard Worker repo = "https://android.googlesource.com/platform/external/vogar", 168*795d594fSAndroid Build Coastguard Worker refs = ["refs/heads/master"], 169*795d594fSAndroid Build Coastguard Worker) 170*795d594fSAndroid Build Coastguard Worker 171*795d594fSAndroid Build Coastguard Workerluci.gitiles_poller( 172*795d594fSAndroid Build Coastguard Worker name = "manifest", 173*795d594fSAndroid Build Coastguard Worker bucket = "ci", 174*795d594fSAndroid Build Coastguard Worker repo = "https://android.googlesource.com/platform/manifest", 175*795d594fSAndroid Build Coastguard Worker refs = ["refs/heads/master-art"], 176*795d594fSAndroid Build Coastguard Worker) 177*795d594fSAndroid Build Coastguard Worker 178*795d594fSAndroid Build Coastguard Workerdef ci_builder(name, category, short_name, dimensions, properties={}, 179*795d594fSAndroid Build Coastguard Worker experiments={}, hidden=False): 180*795d594fSAndroid Build Coastguard Worker luci.builder( 181*795d594fSAndroid Build Coastguard Worker name = name, 182*795d594fSAndroid Build Coastguard Worker bucket = "ci", 183*795d594fSAndroid Build Coastguard Worker executable = luci.recipe( 184*795d594fSAndroid Build Coastguard Worker cipd_package = "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build", 185*795d594fSAndroid Build Coastguard Worker cipd_version = "refs/heads/main", 186*795d594fSAndroid Build Coastguard Worker name = "art", 187*795d594fSAndroid Build Coastguard Worker ), 188*795d594fSAndroid Build Coastguard Worker dimensions = dimensions | { 189*795d594fSAndroid Build Coastguard Worker "pool": "luci.art.ci", 190*795d594fSAndroid Build Coastguard Worker }, 191*795d594fSAndroid Build Coastguard Worker service_account = "[email protected]", 192*795d594fSAndroid Build Coastguard Worker 193*795d594fSAndroid Build Coastguard Worker # Maximum delay between scheduling a build and the build actually starting. 194*795d594fSAndroid Build Coastguard Worker # In a healthy state (enough free/idle devices), the delay is fairly small, 195*795d594fSAndroid Build Coastguard Worker # but if enough devices are offline, this timeout will cause INFRA_FAILURE. 196*795d594fSAndroid Build Coastguard Worker # Set the value reasonably high to prefer delayed builds over failing ones. 197*795d594fSAndroid Build Coastguard Worker # NB: LUCI also enforces (expiration_timeout + execution_timeout <= 47). 198*795d594fSAndroid Build Coastguard Worker expiration_timeout = 17 * time.hour, 199*795d594fSAndroid Build Coastguard Worker execution_timeout = 30 * time.hour, 200*795d594fSAndroid Build Coastguard Worker build_numbers = True, 201*795d594fSAndroid Build Coastguard Worker properties = properties, 202*795d594fSAndroid Build Coastguard Worker caches = [ 203*795d594fSAndroid Build Coastguard Worker # Directory called "art" that persists from build to build (one per bot). 204*795d594fSAndroid Build Coastguard Worker # We can checkout and build in this directory to get fast incremental builds. 205*795d594fSAndroid Build Coastguard Worker swarming.cache("art", name = "art"), 206*795d594fSAndroid Build Coastguard Worker ], 207*795d594fSAndroid Build Coastguard Worker notifies = ["art-team+chromium-buildbot"] if not hidden else [], 208*795d594fSAndroid Build Coastguard Worker triggered_by = [ 209*795d594fSAndroid Build Coastguard Worker "art", 210*795d594fSAndroid Build Coastguard Worker "libcore", 211*795d594fSAndroid Build Coastguard Worker "manifest", 212*795d594fSAndroid Build Coastguard Worker "vogar", 213*795d594fSAndroid Build Coastguard Worker ], 214*795d594fSAndroid Build Coastguard Worker experiments = experiments, 215*795d594fSAndroid Build Coastguard Worker ) 216*795d594fSAndroid Build Coastguard Worker if not hidden: 217*795d594fSAndroid Build Coastguard Worker luci.console_view_entry( 218*795d594fSAndroid Build Coastguard Worker console_view = "luci", 219*795d594fSAndroid Build Coastguard Worker builder = name, 220*795d594fSAndroid Build Coastguard Worker category = category, 221*795d594fSAndroid Build Coastguard Worker short_name = short_name, 222*795d594fSAndroid Build Coastguard Worker ) 223*795d594fSAndroid Build Coastguard Worker 224*795d594fSAndroid Build Coastguard Workerdef add_builder(mode, 225*795d594fSAndroid Build Coastguard Worker arch, 226*795d594fSAndroid Build Coastguard Worker bitness, 227*795d594fSAndroid Build Coastguard Worker ndebug=False, 228*795d594fSAndroid Build Coastguard Worker ngen=False, 229*795d594fSAndroid Build Coastguard Worker cmc=False, 230*795d594fSAndroid Build Coastguard Worker gcstress=False, 231*795d594fSAndroid Build Coastguard Worker poison=False, 232*795d594fSAndroid Build Coastguard Worker hidden=False): 233*795d594fSAndroid Build Coastguard Worker def check_arg(value, valid_values): 234*795d594fSAndroid Build Coastguard Worker if value not in valid_values: 235*795d594fSAndroid Build Coastguard Worker fail("Argument '{}' was expected to be on of {}".format(value, valid_values)) 236*795d594fSAndroid Build Coastguard Worker check_arg(mode, ["target", "host", "qemu"]) 237*795d594fSAndroid Build Coastguard Worker check_arg(arch, ["arm", "x86", "riscv"]) 238*795d594fSAndroid Build Coastguard Worker check_arg(bitness, [32, 64]) 239*795d594fSAndroid Build Coastguard Worker 240*795d594fSAndroid Build Coastguard Worker # Create builder name based on the configuaration parameters. 241*795d594fSAndroid Build Coastguard Worker name = mode + '.' + arch 242*795d594fSAndroid Build Coastguard Worker name += '.gsctress' if gcstress else '' 243*795d594fSAndroid Build Coastguard Worker name += '.poison' if poison else '' 244*795d594fSAndroid Build Coastguard Worker name += '.ngen' if ngen else '' 245*795d594fSAndroid Build Coastguard Worker name += '.cmc' if cmc else '' 246*795d594fSAndroid Build Coastguard Worker name += '.ndebug' if ndebug else '' 247*795d594fSAndroid Build Coastguard Worker name += '.' + str(bitness) 248*795d594fSAndroid Build Coastguard Worker name = name.replace("ngen.cmc", "ngen-cmc") 249*795d594fSAndroid Build Coastguard Worker 250*795d594fSAndroid Build Coastguard Worker # Define the LUCI console category (the tree layout). 251*795d594fSAndroid Build Coastguard Worker # The "|" splits the tree node into sub-categories. 252*795d594fSAndroid Build Coastguard Worker # Merge some name parts to reduce the tree depth. 253*795d594fSAndroid Build Coastguard Worker category = name.replace(".", "|") 254*795d594fSAndroid Build Coastguard Worker category = category.replace("host|", "host.") 255*795d594fSAndroid Build Coastguard Worker category = category.replace("target|", "target.") 256*795d594fSAndroid Build Coastguard Worker 257*795d594fSAndroid Build Coastguard Worker product = None 258*795d594fSAndroid Build Coastguard Worker if arch == "arm": 259*795d594fSAndroid Build Coastguard Worker product = "armv8" if bitness == 64 else "arm_krait" 260*795d594fSAndroid Build Coastguard Worker if arch == "riscv": 261*795d594fSAndroid Build Coastguard Worker product = "riscv64" 262*795d594fSAndroid Build Coastguard Worker 263*795d594fSAndroid Build Coastguard Worker dimensions = {"os": "Android" if mode == "target" else "Ubuntu"} 264*795d594fSAndroid Build Coastguard Worker if mode == "target": 265*795d594fSAndroid Build Coastguard Worker if cmc: 266*795d594fSAndroid Build Coastguard Worker # Request devices running Android 24Q3 (`AP1A` builds) for 267*795d594fSAndroid Build Coastguard Worker # (`userfaultfd`-based) Concurrent Mark-Compact GC configurations. 268*795d594fSAndroid Build Coastguard Worker # Currently (as of 2024-08-22), the only devices within the device pool 269*795d594fSAndroid Build Coastguard Worker # allocated to ART that are running `AP1A` builds are Pixel 6 devices 270*795d594fSAndroid Build Coastguard Worker # (all other device types are running older Android versions), which are 271*795d594fSAndroid Build Coastguard Worker # also the only device model supporting `userfaultfd` among that pool. 272*795d594fSAndroid Build Coastguard Worker dimensions |= {"device_os": "A"} 273*795d594fSAndroid Build Coastguard Worker else: 274*795d594fSAndroid Build Coastguard Worker # Run all other configurations on Android S since it is the oldest we support. 275*795d594fSAndroid Build Coastguard Worker # Other than the `AP1A` builds above, all other devices are flashed to `SP2A`. 276*795d594fSAndroid Build Coastguard Worker # This avoids allocating `userfaultfd` devices for tests that don't need it. 277*795d594fSAndroid Build Coastguard Worker dimensions |= {"device_os": "S"} 278*795d594fSAndroid Build Coastguard Worker elif mode == "host": 279*795d594fSAndroid Build Coastguard Worker dimensions |= {"cores": "8"} 280*795d594fSAndroid Build Coastguard Worker elif mode == "qemu": 281*795d594fSAndroid Build Coastguard Worker dimensions |= {"cores": "16"} 282*795d594fSAndroid Build Coastguard Worker 283*795d594fSAndroid Build Coastguard Worker testrunner_args = ['--verbose', '--host'] if mode == 'host' else ['--target', '--verbose'] 284*795d594fSAndroid Build Coastguard Worker testrunner_args += ['--ndebug'] if ndebug else ['--debug'] 285*795d594fSAndroid Build Coastguard Worker testrunner_args += ['--gcstress'] if gcstress else [] 286*795d594fSAndroid Build Coastguard Worker 287*795d594fSAndroid Build Coastguard Worker properties = { 288*795d594fSAndroid Build Coastguard Worker "builder_group": "client.art", 289*795d594fSAndroid Build Coastguard Worker "bitness": bitness, 290*795d594fSAndroid Build Coastguard Worker "build_only": ("build_only" in name), 291*795d594fSAndroid Build Coastguard Worker "debug": not ndebug, 292*795d594fSAndroid Build Coastguard Worker "device": None if mode == "host" else "-".join(name.split("-")[:2]), 293*795d594fSAndroid Build Coastguard Worker "on_virtual_machine": mode == "qemu", 294*795d594fSAndroid Build Coastguard Worker "product": product, 295*795d594fSAndroid Build Coastguard Worker "concurrent_collector": not cmc, 296*795d594fSAndroid Build Coastguard Worker "generational_cc": not ngen, 297*795d594fSAndroid Build Coastguard Worker "gcstress": gcstress, 298*795d594fSAndroid Build Coastguard Worker "heap_poisoning": poison, 299*795d594fSAndroid Build Coastguard Worker "testrunner_args": testrunner_args, 300*795d594fSAndroid Build Coastguard Worker } 301*795d594fSAndroid Build Coastguard Worker 302*795d594fSAndroid Build Coastguard Worker experiments = {"art.superproject": 100} if mode == "qemu" else {} 303*795d594fSAndroid Build Coastguard Worker 304*795d594fSAndroid Build Coastguard Worker ci_builder(name=name, 305*795d594fSAndroid Build Coastguard Worker category="|".join(category.split("|")[:-1]), 306*795d594fSAndroid Build Coastguard Worker short_name=category.split("|")[-1], 307*795d594fSAndroid Build Coastguard Worker dimensions=dimensions, 308*795d594fSAndroid Build Coastguard Worker properties={k:v for k, v in properties.items() if v}, 309*795d594fSAndroid Build Coastguard Worker experiments=experiments, 310*795d594fSAndroid Build Coastguard Worker hidden=hidden) 311*795d594fSAndroid Build Coastguard Worker 312*795d594fSAndroid Build Coastguard Workerdef add_builders(): 313*795d594fSAndroid Build Coastguard Worker for mode, arch in [("target", "arm"), ("host", "x86")]: 314*795d594fSAndroid Build Coastguard Worker for bitness in [32, 64]: 315*795d594fSAndroid Build Coastguard Worker # Add first to keep these builders together and left-aligned in the console. 316*795d594fSAndroid Build Coastguard Worker add_builder(mode, arch, bitness) 317*795d594fSAndroid Build Coastguard Worker for bitness in [32, 64]: 318*795d594fSAndroid Build Coastguard Worker add_builder(mode, arch, bitness, ndebug=True) 319*795d594fSAndroid Build Coastguard Worker if mode == "host": 320*795d594fSAndroid Build Coastguard Worker add_builder(mode, arch, bitness, ngen=True, cmc=True) 321*795d594fSAndroid Build Coastguard Worker add_builder(mode, arch, bitness, cmc=True) 322*795d594fSAndroid Build Coastguard Worker add_builder(mode, arch, bitness, poison=True) 323*795d594fSAndroid Build Coastguard Worker add_builder(mode, arch, bitness, gcstress=True) 324*795d594fSAndroid Build Coastguard Worker add_builder('qemu', 'arm', bitness=64) 325*795d594fSAndroid Build Coastguard Worker add_builder('qemu', 'riscv', bitness=64) 326*795d594fSAndroid Build Coastguard Worker 327*795d594fSAndroid Build Coastguard Workeradd_builders()