• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env lucicfg
2
3"""
4lucicfg definitions for BoringSSL's CI and CQ.
5"""
6
7lucicfg.check_version("1.30.9")
8
9# Use LUCI Scheduler BBv2 names and add Scheduler realms configs.
10lucicfg.enable_experiment("crbug.com/1182002")
11
12lucicfg.config(
13    lint_checks = ["default"],
14)
15
16REPO_URL = "https://boringssl.googlesource.com/boringssl"
17
18# The default recipe is "boringssl.py"
19RECIPE_BUNDLE = "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
20
21luci.project(
22    name = "boringssl",
23    buildbucket = "cr-buildbucket.appspot.com",
24    logdog = "luci-logdog.appspot.com",
25    milo = "luci-milo.appspot.com",
26    notify = "luci-notify.appspot.com",
27    scheduler = "luci-scheduler.appspot.com",
28    swarming = "chromium-swarm.appspot.com",
29    acls = [
30        acl.entry(
31            roles = [
32                acl.BUILDBUCKET_READER,
33                acl.LOGDOG_READER,
34                acl.PROJECT_CONFIGS_READER,
35                acl.SCHEDULER_READER,
36            ],
37            groups = "all",
38        ),
39        acl.entry(
40            roles = acl.CQ_COMMITTER,
41            groups = "project-boringssl-committers",
42        ),
43        acl.entry(
44            roles = acl.CQ_DRY_RUNNER,
45            groups = "project-boringssl-tryjob-access",
46        ),
47        acl.entry(
48            roles = acl.SCHEDULER_OWNER,
49            groups = "project-boringssl-admins",
50        ),
51        acl.entry(
52            roles = acl.LOGDOG_WRITER,
53            groups = "luci-logdog-chromium-writers",
54        ),
55    ],
56)
57
58luci.bucket(name = "ci")
59
60luci.bucket(
61    name = "try",
62    acls = [
63        # Allow launching tryjobs directly (in addition to doing it through CQ).
64        acl.entry(
65            roles = acl.BUILDBUCKET_TRIGGERER,
66            groups = [
67                "project-boringssl-tryjob-access",
68                "service-account-cq",
69            ],
70        ),
71    ],
72)
73
74luci.milo(
75    logo = "https://storage.googleapis.com/chrome-infra/boringssl-logo.png",
76)
77
78console_view = luci.console_view(
79    name = "main",
80    repo = REPO_URL,
81    refs = ["refs/heads/master"],
82    title = "BoringSSL Main Console",
83)
84
85luci.cq(
86    submit_max_burst = 4,
87    submit_burst_delay = 480 * time.second,
88    # TODO(davidben): Can this be removed? It is marked as optional and
89    # deprecated. It was included as part of porting over from commit-queue.cfg.
90    status_host = "chromium-cq-status.appspot.com",
91    honor_gerrit_linked_accounts = True,
92)
93
94cq_group = luci.cq_group(
95    name = "main-cq",
96    watch = cq.refset(REPO_URL, refs = ["refs/heads/.+"]),
97    retry_config = cq.RETRY_ALL_FAILURES,
98)
99
100poller = luci.gitiles_poller(
101    name = "master-gitiles-trigger",
102    bucket = "ci",
103    repo = REPO_URL,
104    refs = ["refs/heads/master"],
105)
106
107luci.logdog(
108    gs_bucket = "chromium-luci-logdog",
109)
110
111notifier = luci.notifier(
112    name = "all",
113    on_occurrence = ["FAILURE", "INFRA_FAILURE"],
114    on_new_status = ["SUCCESS"],
115    notify_emails = ["boringssl@google.com"],
116)
117
118DEFAULT_TIMEOUT = 30 * time.minute
119
120def ci_builder(
121        name,
122        host,
123        *,
124        recipe = "boringssl",
125        category = None,
126        short_name = None,
127        execution_timeout = None,
128        properties = {}):
129    dimensions = dict(host["dimensions"])
130    dimensions["pool"] = "luci.flex.ci"
131    caches = [swarming.cache("gocache"), swarming.cache("gopath")]
132    if "caches" in host:
133        caches += host["caches"]
134    properties = dict(properties)
135    properties["$gatekeeper"] = {"group": "client.boringssl"}
136    if execution_timeout == None:
137        execution_timeout = host.get("execution_timeout", DEFAULT_TIMEOUT)
138    builder = luci.builder(
139        name = name,
140        bucket = "ci",
141        executable = luci.recipe(
142            name = recipe,
143            cipd_package = RECIPE_BUNDLE,
144            use_python3 = True,
145        ),
146        service_account = "boringssl-ci-builder@chops-service-accounts.iam.gserviceaccount.com",
147        dimensions = dimensions,
148        execution_timeout = execution_timeout,
149        caches = caches,
150        notifies = [notifier],
151        triggered_by = [poller],
152        properties = properties,
153    )
154    luci.console_view_entry(
155        builder = builder,
156        console_view = console_view,
157        category = category,
158        short_name = short_name,
159    )
160
161def cq_builder(
162        name,
163        host,
164        *,
165        recipe = "boringssl",
166        cq_enabled = True,
167        execution_timeout = None,
168        properties = {}):
169    dimensions = dict(host["dimensions"])
170    dimensions["pool"] = "luci.flex.try"
171    if execution_timeout == None:
172        execution_timeout = host.get("execution_timeout", DEFAULT_TIMEOUT)
173    builder = luci.builder(
174        name = name,
175        bucket = "try",
176        executable = luci.recipe(
177            name = recipe,
178            cipd_package = RECIPE_BUNDLE,
179            use_python3 = True,
180        ),
181        service_account = "boringssl-try-builder@chops-service-accounts.iam.gserviceaccount.com",
182        dimensions = dimensions,
183        execution_timeout = host.get("execution_timeout", DEFAULT_TIMEOUT),
184        caches = host.get("caches"),
185        properties = properties,
186    )
187    luci.cq_tryjob_verifier(
188        builder = builder,
189        cq_group = cq_group,
190        includable_only = not cq_enabled,
191    )
192
193def both_builders(
194        name,
195        host,
196        *,
197        recipe = "boringssl",
198        category = None,
199        short_name = None,
200        cq_enabled = True,
201        cq_compile_only = None,
202        execution_timeout = None,
203        properties = {}):
204    ci_builder(
205        name,
206        host,
207        recipe = recipe,
208        category = category,
209        short_name = short_name,
210        execution_timeout = execution_timeout,
211        properties = properties,
212    )
213
214    # If cq_compile_only is specified, we generate both a disabled builder that
215    # matches the CI builder, and a compile-only builder. The compile-only
216    # builder is controlled by cq_enabled. cq_compile_only also specifies the
217    # host to run on, because the compile-only builder usually has weaker
218    # requirements.
219    cq_builder(
220        name,
221        host,
222        recipe = recipe,
223        cq_enabled = cq_enabled and not cq_compile_only,
224        execution_timeout = execution_timeout,
225        properties = properties,
226    )
227    if cq_compile_only:
228        compile_properties = dict(properties)
229        compile_properties["run_unit_tests"] = False
230        compile_properties["run_ssl_tests"] = False
231        cq_builder(
232            name + "_compile",
233            cq_compile_only,
234            recipe = recipe,
235            cq_enabled = cq_enabled,
236            execution_timeout = execution_timeout,
237            properties = compile_properties,
238        )
239
240LINUX_HOST = {
241    "dimensions": {
242        "os": "Ubuntu-22.04",
243        "cpu": "x86-64",
244    },
245}
246
247MAC_ARM64_HOST = {
248    "dimensions": {
249        "os": "Mac",
250        "cpu": "arm64",
251    },
252    "caches": [swarming.cache("osx_sdk")],
253    # xcode installation can take a while, particularly when running
254    # concurrently on multiple VMs on the same host. See crbug.com/1063870
255    # for more context.
256    "execution_timeout": 60 * time.minute,
257}
258
259MAC_X86_64_HOST = {
260    "dimensions": {
261        "os": "Mac-10.15|Mac-11",
262        "cpu": "x86-64",
263    },
264    "caches": [swarming.cache("osx_sdk")],
265    # xcode installation can take a while, particularly when running
266    # concurrently on multiple VMs on the same host. See crbug.com/1063870
267    # for more context.
268    "execution_timeout": 60 * time.minute,
269}
270
271WIN_HOST = {
272    "dimensions": {
273        "os": "Windows-10",
274        "cpu": "x86-64",
275    },
276    "caches": [swarming.cache("win_toolchain")],
277}
278
279# The Android tests take longer to run. See https://crbug.com/900953.
280ANDROID_TIMEOUT = 60 * time.minute
281
282WALLEYE_HOST = {
283    "dimensions": {
284        "device_type": "walleye",  # Pixel 2
285    },
286    "execution_timeout": ANDROID_TIMEOUT,
287}
288
289# SDE tests take longer to run.
290SDE_TIMEOUT = 3 * 60 * time.minute
291
292# TODO(davidben): Switch the BoringSSL recipe to specify most flags in
293# properties rather than parsing names. Then we can add new configurations
294# without having to touch multiple repositories.
295
296both_builders(
297    "android_aarch64",
298    WALLEYE_HOST,
299    category = "android|aarch64",
300    short_name = "dbg",
301    cq_compile_only = LINUX_HOST,
302    properties = {
303        "android": True,
304        "cmake_args": {
305            "ANDROID_ABI": "arm64-v8a",
306            "ANDROID_PLATFORM": "android-21",
307        },
308    },
309)
310both_builders(
311    "android_aarch64_rel",
312    WALLEYE_HOST,
313    category = "android|aarch64",
314    short_name = "rel",
315    cq_compile_only = LINUX_HOST,
316    cq_enabled = False,
317    properties = {
318        "android": True,
319        "cmake_args": {
320            "ANDROID_ABI": "arm64-v8a",
321            "ANDROID_PLATFORM": "android-21",
322            "CMAKE_BUILD_TYPE": "Release",
323        },
324    },
325)
326both_builders(
327    "android_aarch64_fips",
328    # The Android FIPS configuration requires a newer device.
329    WALLEYE_HOST,
330    category = "android|aarch64",
331    short_name = "fips",
332    cq_compile_only = LINUX_HOST,
333    properties = {
334        "android": True,
335        "cmake_args": {
336            "ANDROID_ABI": "arm64-v8a",
337            "ANDROID_PLATFORM": "android-21",
338            # FIPS mode on Android uses shared libraries.
339            "BUILD_SHARED_LIBS": "1",
340            "FIPS": "1",
341        },
342    },
343)
344
345both_builders(
346    "android_aarch64_fips_noasm",
347    # The Android FIPS configuration requires a newer device.
348    WALLEYE_HOST,
349    category = "android|aarch64",
350    short_name = "fips3",
351    cq_compile_only = LINUX_HOST,
352    properties = {
353        "android": True,
354        "cmake_args": {
355            "OPENSSL_NO_ASM": "1",
356            "ANDROID_ABI": "arm64-v8a",
357            "ANDROID_PLATFORM": "android-21",
358            # FIPS mode on Android uses shared libraries.
359            "BUILD_SHARED_LIBS": "1",
360            "FIPS": "1",
361        },
362    },
363)
364
365
366# delocate works on aarch64. Test this by also building the static library mode
367# for android_aarch64_fips. Additionally, urandom_test doesn't work in shared
368# library builds, so this gives Android FIPS coverage for urandom_test.
369both_builders(
370    "android_aarch64_fips_static",
371    # The Android FIPS configuration requires a newer device.
372    WALLEYE_HOST,
373    category = "android|aarch64",
374    short_name = "fips2",
375    cq_compile_only = LINUX_HOST,
376    properties = {
377        "android": True,
378        "cmake_args": {
379            "ANDROID_ABI": "arm64-v8a",
380            "ANDROID_PLATFORM": "android-21",
381            "FIPS": "1",
382        },
383    },
384)
385
386both_builders(
387    "android_arm",
388    WALLEYE_HOST,
389    category = "android|thumb",
390    short_name = "dbg",
391    cq_compile_only = LINUX_HOST,
392    properties = {
393        "android": True,
394        "cmake_args": {
395            "ANDROID_ABI": "armeabi-v7a",
396            # Newer versions of the Android NDK make NEON-only builds by
397            # default. We rely on making NEON-optional builds for some of our
398            # test coverage, but see https://crbug.com/boringssl/454.
399            "ANDROID_ARM_NEON": "FALSE",
400            "ANDROID_PLATFORM": "android-18",
401        },
402    },
403)
404both_builders(
405    "android_arm_rel",
406    WALLEYE_HOST,
407    category = "android|thumb",
408    short_name = "rel",
409    cq_compile_only = LINUX_HOST,
410    cq_enabled = False,
411    properties = {
412        "android": True,
413        "cmake_args": {
414            "ANDROID_ABI": "armeabi-v7a",
415            # Newer versions of the Android NDK make NEON-only builds by
416            # default. We rely on making NEON-optional builds for some of our
417            # test coverage, but see https://crbug.com/boringssl/454.
418            "ANDROID_ARM_NEON": "FALSE",
419            "ANDROID_PLATFORM": "android-18",
420            "CMAKE_BUILD_TYPE": "Release",
421        },
422    },
423)
424both_builders(
425    "android_arm_fips",
426    # The Android FIPS configuration requires a newer device.
427    WALLEYE_HOST,
428    category = "android|thumb",
429    short_name = "fips",
430    cq_compile_only = LINUX_HOST,
431    properties = {
432        "android": True,
433        "cmake_args": {
434            "ANDROID_ABI": "armeabi-v7a",
435            "ANDROID_PLATFORM": "android-21",
436            # FIPS mode on Android uses shared libraries.
437            "BUILD_SHARED_LIBS": "1",
438            "FIPS": "1",
439        },
440    },
441)
442both_builders(
443    "android_arm_armmode_rel",
444    WALLEYE_HOST,
445    category = "android|arm",
446    short_name = "rel",
447    cq_compile_only = LINUX_HOST,
448    properties = {
449        "android": True,
450        "cmake_args": {
451            "ANDROID_ABI": "armeabi-v7a",
452            "ANDROID_ARM_MODE": "arm",
453            # Newer versions of the Android NDK make NEON-only builds by
454            # default. We rely on making NEON-optional builds for some of our
455            # test coverage, but see https://crbug.com/boringssl/454.
456            "ANDROID_ARM_NEON": "FALSE",
457            "ANDROID_PLATFORM": "android-18",
458            "CMAKE_BUILD_TYPE": "Release",
459        },
460    },
461)
462both_builders(
463    "android_riscv64_compile_only",
464    LINUX_HOST,
465    category = "android|riscv64",
466    short_name = "rel",
467    properties = {
468        "android": True,
469        "cmake_args": {
470            "ANDROID_ABI": "riscv64",
471            "ANDROID_PLATFORM": "android-35",
472            "CMAKE_BUILD_TYPE": "Release",
473        },
474        # The default Android NDK cannot be updated until https://crbug.com/boringssl/454 is fixed.
475        # Meanwhile, RISC-V support requires a newer NDK, thus we override for this builder.
476        "gclient_vars": {
477            "android_ndk_revision": "wC8sJjVPRDPTbaZFlki_qXTC1lWJNbJi8glUO0woJ1MC",
478        },
479        "run_unit_tests": False,
480        "run_ssl_tests": False,
481    },
482)
483
484both_builders("docs", LINUX_HOST, recipe = "boringssl_docs", short_name = "doc")
485
486# For now, we use x86_64 Macs to build iOS because there are far more of them
487# in luci.flex.ci and luci.flex.try pools. When this changes, switch to
488# MAC_ARM64_HOST.
489both_builders(
490    "ios64_compile",
491    MAC_X86_64_HOST,
492    category = "ios",
493    short_name = "64",
494    properties = {
495        "cmake_args": {
496            "CMAKE_OSX_ARCHITECTURES": "arm64",
497            "CMAKE_OSX_SYSROOT": "iphoneos",
498        },
499        "run_unit_tests": False,
500        "run_ssl_tests": False,
501    },
502)
503both_builders(
504    "linux",
505    LINUX_HOST,
506    category = "linux",
507    short_name = "dbg",
508    properties = {
509        "check_stack": True,
510        "cmake_args": {
511            # Pick one builder to build with the C++ runtime allowed. The default
512            # configuration does not check pure virtuals
513            "BORINGSSL_ALLOW_CXX_RUNTIME": "1",
514        },
515    },
516)
517both_builders(
518    "linux_rel",
519    LINUX_HOST,
520    category = "linux",
521    short_name = "rel",
522    properties = {
523        "cmake_args": {
524            "CMAKE_BUILD_TYPE": "Release",
525        },
526    },
527)
528both_builders(
529    "linux32",
530    LINUX_HOST,
531    category = "linux|32",
532    short_name = "dbg",
533    properties = {
534        "check_stack": True,
535        "cmake_args": {
536            # 32-bit x86 is cross-compiled on the 64-bit bots.
537            "CMAKE_SYSTEM_NAME": "Linux",
538            "CMAKE_SYSTEM_PROCESSOR": "x86",
539            "CMAKE_ASM_FLAGS": "-m32 -msse2",
540            "CMAKE_CXX_FLAGS": "-m32 -msse2",
541            "CMAKE_C_FLAGS": "-m32 -msse2",
542        },
543    },
544)
545both_builders(
546    "linux32_rel",
547    LINUX_HOST,
548    category = "linux|32",
549    short_name = "rel",
550    properties = {
551        "cmake_args": {
552            "CMAKE_BUILD_TYPE": "Release",
553            # 32-bit x86 is cross-compiled on the 64-bit bots.
554            "CMAKE_SYSTEM_NAME": "Linux",
555            "CMAKE_SYSTEM_PROCESSOR": "x86",
556            "CMAKE_ASM_FLAGS": "-m32 -msse2",
557            "CMAKE_C_FLAGS": "-m32 -msse2",
558            "CMAKE_CXX_FLAGS": "-m32 -msse2",
559        },
560    },
561)
562both_builders(
563    "linux32_sde",
564    LINUX_HOST,
565    category = "linux|32",
566    short_name = "sde",
567    cq_enabled = False,
568    execution_timeout = SDE_TIMEOUT,
569    properties = {
570        "cmake_args": {
571            "CMAKE_BUILD_TYPE": "RelWithAsserts",
572            # 32-bit x86 is cross-compiled on the 64-bit bots.
573            "CMAKE_SYSTEM_NAME": "Linux",
574            "CMAKE_SYSTEM_PROCESSOR": "x86",
575            "CMAKE_ASM_FLAGS": "-m32 -msse2",
576            "CMAKE_C_FLAGS": "-m32 -msse2",
577            "CMAKE_CXX_FLAGS": "-m32 -msse2",
578        },
579        "run_ssl_tests": False,
580        "sde": True,
581    },
582)
583both_builders(
584    "linux32_nosse2_noasm",
585    LINUX_HOST,
586    category = "linux|32",
587    short_name = "nosse2",
588    properties = {
589        "cmake_args": {
590            "OPENSSL_NO_ASM": "1",
591            "OPENSSL_NO_SSE2_FOR_TESTING": "1",
592            # 32-bit x86 is cross-compiled on the 64-bit bots.
593            "CMAKE_SYSTEM_NAME": "Linux",
594            "CMAKE_SYSTEM_PROCESSOR": "x86",
595            "CMAKE_ASM_FLAGS": "-m32 -msse2",
596            "CMAKE_C_FLAGS": "-m32 -msse2",
597            "CMAKE_CXX_FLAGS": "-m32 -msse2",
598        },
599    },
600)
601both_builders(
602    "linux_clang_cfi",
603    LINUX_HOST,
604    category = "linux|clang",
605    short_name = "cfi",
606    cq_enabled = False,
607    properties = {
608        "clang": True,
609        "cmake_args": {
610            "CFI": "1",
611        },
612    },
613)
614both_builders(
615    "linux_clang_rel",
616    LINUX_HOST,
617    category = "linux|clang",
618    short_name = "rel",
619    properties = {
620        "clang": True,
621        "cmake_args": {
622            "CMAKE_BUILD_TYPE": "Release",
623        },
624    },
625)
626both_builders(
627    "linux_clang_rel_msan",
628    LINUX_HOST,
629    category = "linux|clang",
630    short_name = "msan",
631    properties = {
632        "clang": True,
633        "cmake_args": {
634            # TODO(davidben): Should this be RelWithAsserts?
635            "CMAKE_BUILD_TYPE": "Release",
636            "MSAN": "1",
637            "USE_CUSTOM_LIBCXX": "1",
638        },
639        "gclient_vars": {
640            "checkout_libcxx": True,
641        },
642    },
643)
644both_builders(
645    "linux_clang_rel_tsan",
646    LINUX_HOST,
647    category = "linux|clang",
648    short_name = "tsan",
649    cq_enabled = False,
650    properties = {
651        "clang": True,
652        "cmake_args": {
653            # TODO(davidben): Should this be RelWithAsserts?
654            "CMAKE_BUILD_TYPE": "Release",
655            "TSAN": "1",
656            "USE_CUSTOM_LIBCXX": "1",
657        },
658        "gclient_vars": {
659            "checkout_libcxx": True,
660        },
661        # SSL tests are all single-threaded, so running them under TSan is a
662        # waste of time.
663        "run_ssl_tests": False,
664    },
665)
666both_builders(
667    "linux_clang_ubsan",
668    LINUX_HOST,
669    category = "linux|clang",
670    short_name = "ubsan",
671    cq_enabled = True,
672    properties = {
673        "clang": True,
674        "cmake_args": {
675            "CMAKE_BUILD_TYPE": "RelWithAsserts",
676            "UBSAN": "1",
677        },
678    },
679)
680both_builders(
681    "linux_fips",
682    LINUX_HOST,
683    category = "linux|fips",
684    short_name = "dbg",
685    properties = {
686        "cmake_args": {
687            "FIPS": "1",
688        },
689    },
690)
691both_builders(
692    "linux_fips_rel",
693    LINUX_HOST,
694    category = "linux|fips",
695    short_name = "rel",
696    properties = {
697        "cmake_args": {
698            "CMAKE_BUILD_TYPE": "Release",
699            "FIPS": "1",
700        },
701    },
702)
703both_builders(
704    "linux_fips_clang",
705    LINUX_HOST,
706    category = "linux|fips|clang",
707    short_name = "dbg",
708    properties = {
709        "clang": True,
710        "cmake_args": {
711            "FIPS": "1",
712        },
713    },
714)
715both_builders(
716    "linux_fips_clang_rel",
717    LINUX_HOST,
718    category = "linux|fips|clang",
719    short_name = "rel",
720    properties = {
721        "clang": True,
722        "cmake_args": {
723            "CMAKE_BUILD_TYPE": "Release",
724            "FIPS": "1",
725        },
726    },
727)
728both_builders(
729    "linux_fips_noasm_asan",
730    LINUX_HOST,
731    category = "linux|fips",
732    short_name = "asan",
733    properties = {
734        "clang": True,
735        "cmake_args": {
736            "ASAN": "1",
737            "FIPS": "1",
738            "OPENSSL_NO_ASM": "1",
739        },
740    },
741)
742both_builders(
743    "linux_fuzz",
744    LINUX_HOST,
745    category = "linux",
746    short_name = "fuzz",
747    properties = {
748        "clang": True,
749        "cmake_args": {
750            "FUZZ": "1",
751            "LIBFUZZER_FROM_DEPS": "1",
752        },
753        "gclient_vars": {
754            "checkout_fuzzer": True,
755        },
756    },
757)
758both_builders(
759    "linux_noasm_asan",
760    LINUX_HOST,
761    category = "linux",
762    short_name = "asan",
763    properties = {
764        "clang": True,
765        "cmake_args": {
766            "ASAN": "1",
767            "OPENSSL_NO_ASM": "1",
768        },
769    },
770)
771
772both_builders(
773    "linux_nothreads",
774    LINUX_HOST,
775    category = "linux",
776    short_name = "not",
777    properties = {
778        "cmake_args": {
779            "CMAKE_C_FLAGS": "-DOPENSSL_NO_THREADS_CORRUPT_MEMORY_AND_LEAK_SECRETS_IF_THREADED=1",
780            "CMAKE_CXX_FLAGS": "-DOPENSSL_NO_THREADS_CORRUPT_MEMORY_AND_LEAK_SECRETS_IF_THREADED=1",
781        },
782    },
783)
784both_builders(
785    "linux_sde",
786    LINUX_HOST,
787    category = "linux",
788    short_name = "sde",
789    cq_enabled = False,
790    execution_timeout = SDE_TIMEOUT,
791    properties = {
792        "cmake_args": {
793            "CMAKE_BUILD_TYPE": "RelWithAsserts",
794        },
795        "run_ssl_tests": False,
796        "sde": True,
797    },
798)
799both_builders(
800    "linux_shared",
801    LINUX_HOST,
802    category = "linux",
803    short_name = "sh",
804    properties = {
805        "cmake_args": {
806            "BUILD_SHARED_LIBS": "1",
807        },
808        # The default Linux build may not depend on the C++ runtime. This is
809        # easy to check when building shared libraries.
810        "check_imported_libraries": True,
811    },
812)
813both_builders(
814    "linux_small",
815    LINUX_HOST,
816    category = "linux",
817    short_name = "sm",
818    properties = {
819        "cmake_args": {
820            "CMAKE_C_FLAGS": "-DOPENSSL_SMALL=1",
821            "CMAKE_CXX_FLAGS": "-DOPENSSL_SMALL=1",
822        },
823    },
824)
825both_builders(
826    "linux_nosse2_noasm",
827    LINUX_HOST,
828    category = "linux",
829    short_name = "nosse2",
830    properties = {
831        "cmake_args": {
832            "OPENSSL_NO_ASM": "1",
833            "OPENSSL_NO_SSE2_FOR_TESTING": "1",
834        },
835    },
836)
837both_builders(
838    "linux_bazel",
839    LINUX_HOST,
840    category = "linux",
841    short_name = "bzl",
842    recipe = "boringssl_bazel",
843)
844both_builders("mac", MAC_X86_64_HOST, category = "mac", short_name = "dbg")
845both_builders(
846    "mac_rel",
847    MAC_X86_64_HOST,
848    category = "mac",
849    short_name = "rel",
850    properties = {
851        "cmake_args": {
852            "CMAKE_BUILD_TYPE": "Release",
853        },
854    },
855)
856both_builders(
857    "mac_small",
858    MAC_X86_64_HOST,
859    category = "mac",
860    short_name = "sm",
861    properties = {
862        "cmake_args": {
863            "CMAKE_C_FLAGS": "-DOPENSSL_SMALL=1",
864            "CMAKE_CXX_FLAGS": "-DOPENSSL_SMALL=1",
865        },
866    },
867)
868both_builders("mac_arm64", MAC_ARM64_HOST, category = "mac", short_name = "arm64")
869both_builders(
870    "mac_arm64_bazel",
871    MAC_ARM64_HOST,
872    category = "mac",
873    short_name = "bzl",
874    recipe = "boringssl_bazel",
875)
876both_builders(
877    "win32",
878    WIN_HOST,
879    category = "win|x86",
880    short_name = "dbg",
881    cq_compile_only = WIN_HOST,  # Reduce CQ cycle times.
882    properties = {
883        "msvc_target": "x86",
884    },
885)
886both_builders(
887    "win32_rel",
888    WIN_HOST,
889    category = "win|x86",
890    short_name = "rel",
891    properties = {
892        "cmake_args": {
893            "CMAKE_BUILD_TYPE": "Release",
894        },
895        "msvc_target": "x86",
896    },
897)
898both_builders(
899    "win32_sde",
900    WIN_HOST,
901    category = "win|x86",
902    short_name = "sde",
903    cq_enabled = False,
904    execution_timeout = SDE_TIMEOUT,
905    properties = {
906        "cmake_args": {
907            "CMAKE_BUILD_TYPE": "RelWithAsserts",
908        },
909        "msvc_target": "x86",
910        "run_ssl_tests": False,
911        "sde": True,
912    },
913)
914both_builders(
915    "win32_small",
916    WIN_HOST,
917    category = "win|x86",
918    short_name = "sm",
919    properties = {
920        "cmake_args": {
921            "CMAKE_C_FLAGS": "-DOPENSSL_SMALL=1",
922            "CMAKE_CXX_FLAGS": "-DOPENSSL_SMALL=1",
923        },
924        "msvc_target": "x86",
925    },
926)
927
928both_builders(
929    "win32_clang",
930    WIN_HOST,
931    category = "win|x86",
932    short_name = "clang",
933    cq_compile_only = WIN_HOST,  # Reduce CQ cycle times.
934    properties = {
935        "clang": True,
936        "msvc_target": "x86",
937        "cmake_args": {
938            # Clang doesn't pick up 32-bit x86 from msvc_target. Specify it as a
939            # cross-compile.
940            "CMAKE_SYSTEM_NAME": "Windows",
941            "CMAKE_SYSTEM_PROCESSOR": "x86",
942            "CMAKE_ASM_FLAGS": "-m32 -msse2",
943            "CMAKE_C_FLAGS": "-m32 -msse2",
944            "CMAKE_CXX_FLAGS": "-m32 -msse2",
945        },
946    },
947)
948
949both_builders(
950    "win64",
951    WIN_HOST,
952    category = "win|x64",
953    short_name = "dbg",
954    cq_compile_only = WIN_HOST,  # Reduce CQ cycle times.
955    properties = {
956        "msvc_target": "x64",
957    },
958)
959both_builders(
960    "win64_rel",
961    WIN_HOST,
962    category = "win|x64",
963    short_name = "rel",
964    properties = {
965        "cmake_args": {
966            "CMAKE_BUILD_TYPE": "Release",
967        },
968        "msvc_target": "x64",
969    },
970)
971both_builders(
972    "win64_sde",
973    WIN_HOST,
974    category = "win|x64",
975    short_name = "sde",
976    cq_enabled = False,
977    execution_timeout = SDE_TIMEOUT,
978    properties = {
979        "cmake_args": {
980            "CMAKE_BUILD_TYPE": "RelWithAsserts",
981        },
982        "msvc_target": "x64",
983        "run_ssl_tests": False,
984        "sde": True,
985    },
986)
987both_builders(
988    "win64_small",
989    WIN_HOST,
990    category = "win|x64",
991    short_name = "sm",
992    properties = {
993        "cmake_args": {
994            "CMAKE_C_FLAGS": "-DOPENSSL_SMALL=1",
995            "CMAKE_CXX_FLAGS": "-DOPENSSL_SMALL=1",
996        },
997        "msvc_target": "x64",
998    },
999)
1000
1001both_builders(
1002    "win64_clang",
1003    WIN_HOST,
1004    category = "win|x64",
1005    short_name = "clg",
1006    cq_compile_only = WIN_HOST,  # Reduce CQ cycle times.
1007    properties = {
1008        "clang": True,
1009        "msvc_target": "x64",
1010    },
1011)
1012
1013both_builders(
1014    "win_arm64_compile",
1015    WIN_HOST,
1016    category = "win|arm64",
1017    short_name = "clang",
1018    properties = {
1019        "clang": True,
1020        "cmake_args": {
1021            # Clang doesn't pick up arm64 from msvc_target. Specify it as a
1022            # cross-compile.
1023            "CMAKE_SYSTEM_NAME": "Windows",
1024            "CMAKE_SYSTEM_PROCESSOR": "arm64",
1025            "CMAKE_ASM_FLAGS": "--target=arm64-windows",
1026            "CMAKE_C_FLAGS": "--target=arm64-windows",
1027            "CMAKE_CXX_FLAGS": "--target=arm64-windows",
1028        },
1029        "gclient_vars": {
1030            "checkout_nasm": False,
1031        },
1032        "msvc_target": "arm64",
1033        "run_unit_tests": False,
1034        "run_ssl_tests": False,
1035    },
1036)
1037
1038both_builders(
1039    "win_arm64_msvc_compile",
1040    WIN_HOST,
1041    category = "win|arm64",
1042    short_name = "msvc",
1043    properties = {
1044        "cmake_args": {
1045            # This is a cross-compile, so CMake needs to be told the processor.
1046            # MSVC will pick up the architecture from msvc_target.
1047            "CMAKE_SYSTEM_NAME": "Windows",
1048            "CMAKE_SYSTEM_PROCESSOR": "arm64",
1049            # We do not currently support Windows arm64 assembly with MSVC.
1050            "OPENSSL_NO_ASM": "1",
1051        },
1052        "gclient_vars": {
1053            "checkout_nasm": False,
1054        },
1055        "msvc_target": "arm64",
1056        "run_unit_tests": False,
1057        "run_ssl_tests": False,
1058    },
1059)
1060