#!/usr/bin/env lucicfg """ lucicfg definitions for BoringSSL's CI and CQ. """ lucicfg.check_version("1.30.9") # Use LUCI Scheduler BBv2 names and add Scheduler realms configs. lucicfg.enable_experiment("crbug.com/1182002") lucicfg.config( lint_checks = ["default"], ) REPO_URL = "https://boringssl.googlesource.com/boringssl" # The default recipe is "boringssl.py" RECIPE_BUNDLE = "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" luci.project( name = "boringssl", buildbucket = "cr-buildbucket.appspot.com", logdog = "luci-logdog.appspot.com", milo = "luci-milo.appspot.com", notify = "luci-notify.appspot.com", scheduler = "luci-scheduler.appspot.com", swarming = "chromium-swarm.appspot.com", acls = [ acl.entry( roles = [ acl.BUILDBUCKET_READER, acl.LOGDOG_READER, acl.PROJECT_CONFIGS_READER, acl.SCHEDULER_READER, ], groups = "all", ), acl.entry( roles = acl.CQ_COMMITTER, groups = "project-boringssl-committers", ), acl.entry( roles = acl.CQ_DRY_RUNNER, groups = "project-boringssl-tryjob-access", ), acl.entry( roles = acl.SCHEDULER_OWNER, groups = "project-boringssl-admins", ), acl.entry( roles = acl.LOGDOG_WRITER, groups = "luci-logdog-chromium-writers", ), ], ) luci.bucket(name = "ci") luci.bucket( name = "try", acls = [ # Allow launching tryjobs directly (in addition to doing it through CQ). acl.entry( roles = acl.BUILDBUCKET_TRIGGERER, groups = [ "project-boringssl-tryjob-access", "service-account-cq", ], ), ], ) luci.milo( logo = "https://storage.googleapis.com/chrome-infra/boringssl-logo.png", ) console_view = luci.console_view( name = "main", repo = REPO_URL, refs = ["refs/heads/master"], title = "BoringSSL Main Console", ) luci.cq( submit_max_burst = 4, submit_burst_delay = 480 * time.second, # TODO(davidben): Can this be removed? It is marked as optional and # deprecated. It was included as part of porting over from commit-queue.cfg. status_host = "chromium-cq-status.appspot.com", honor_gerrit_linked_accounts = True, ) cq_group = luci.cq_group( name = "main-cq", watch = cq.refset(REPO_URL, refs = ["refs/heads/.+"]), retry_config = cq.RETRY_ALL_FAILURES, ) poller = luci.gitiles_poller( name = "master-gitiles-trigger", bucket = "ci", repo = REPO_URL, refs = ["refs/heads/master"], ) luci.logdog( gs_bucket = "chromium-luci-logdog", ) notifier = luci.notifier( name = "all", on_occurrence = ["FAILURE", "INFRA_FAILURE"], on_new_status = ["SUCCESS"], notify_emails = ["boringssl@google.com"], ) DEFAULT_TIMEOUT = 30 * time.minute def ci_builder( name, host, *, recipe = "boringssl", category = None, short_name = None, execution_timeout = None, properties = {}): dimensions = dict(host["dimensions"]) dimensions["pool"] = "luci.flex.ci" caches = [swarming.cache("gocache"), swarming.cache("gopath")] if "caches" in host: caches += host["caches"] properties = dict(properties) properties["$gatekeeper"] = {"group": "client.boringssl"} if execution_timeout == None: execution_timeout = host.get("execution_timeout", DEFAULT_TIMEOUT) builder = luci.builder( name = name, bucket = "ci", executable = luci.recipe( name = recipe, cipd_package = RECIPE_BUNDLE, use_python3 = True, ), service_account = "boringssl-ci-builder@chops-service-accounts.iam.gserviceaccount.com", dimensions = dimensions, execution_timeout = execution_timeout, caches = caches, notifies = [notifier], triggered_by = [poller], properties = properties, ) luci.console_view_entry( builder = builder, console_view = console_view, category = category, short_name = short_name, ) def cq_builder( name, host, *, recipe = "boringssl", cq_enabled = True, execution_timeout = None, properties = {}): dimensions = dict(host["dimensions"]) dimensions["pool"] = "luci.flex.try" if execution_timeout == None: execution_timeout = host.get("execution_timeout", DEFAULT_TIMEOUT) builder = luci.builder( name = name, bucket = "try", executable = luci.recipe( name = recipe, cipd_package = RECIPE_BUNDLE, use_python3 = True, ), service_account = "boringssl-try-builder@chops-service-accounts.iam.gserviceaccount.com", dimensions = dimensions, execution_timeout = host.get("execution_timeout", DEFAULT_TIMEOUT), caches = host.get("caches"), properties = properties, ) luci.cq_tryjob_verifier( builder = builder, cq_group = cq_group, includable_only = not cq_enabled, ) def both_builders( name, host, *, recipe = "boringssl", category = None, short_name = None, cq_enabled = True, cq_compile_only = None, execution_timeout = None, properties = {}): ci_builder( name, host, recipe = recipe, category = category, short_name = short_name, execution_timeout = execution_timeout, properties = properties, ) # If cq_compile_only is specified, we generate both a disabled builder that # matches the CI builder, and a compile-only builder. The compile-only # builder is controlled by cq_enabled. cq_compile_only also specifies the # host to run on, because the compile-only builder usually has weaker # requirements. cq_builder( name, host, recipe = recipe, cq_enabled = cq_enabled and not cq_compile_only, execution_timeout = execution_timeout, properties = properties, ) if cq_compile_only: compile_properties = dict(properties) compile_properties["run_unit_tests"] = False compile_properties["run_ssl_tests"] = False cq_builder( name + "_compile", cq_compile_only, recipe = recipe, cq_enabled = cq_enabled, execution_timeout = execution_timeout, properties = compile_properties, ) LINUX_HOST = { "dimensions": { "os": "Ubuntu-22.04", "cpu": "x86-64", }, } MAC_ARM64_HOST = { "dimensions": { "os": "Mac", "cpu": "arm64", }, "caches": [swarming.cache("osx_sdk")], # xcode installation can take a while, particularly when running # concurrently on multiple VMs on the same host. See crbug.com/1063870 # for more context. "execution_timeout": 60 * time.minute, } MAC_X86_64_HOST = { "dimensions": { "os": "Mac-10.15|Mac-11", "cpu": "x86-64", }, "caches": [swarming.cache("osx_sdk")], # xcode installation can take a while, particularly when running # concurrently on multiple VMs on the same host. See crbug.com/1063870 # for more context. "execution_timeout": 60 * time.minute, } WIN_HOST = { "dimensions": { "os": "Windows-10", "cpu": "x86-64", }, "caches": [swarming.cache("win_toolchain")], } # The Android tests take longer to run. See https://crbug.com/900953. ANDROID_TIMEOUT = 60 * time.minute WALLEYE_HOST = { "dimensions": { "device_type": "walleye", # Pixel 2 }, "execution_timeout": ANDROID_TIMEOUT, } # SDE tests take longer to run. SDE_TIMEOUT = 3 * 60 * time.minute # TODO(davidben): Switch the BoringSSL recipe to specify most flags in # properties rather than parsing names. Then we can add new configurations # without having to touch multiple repositories. both_builders( "android_aarch64", WALLEYE_HOST, category = "android|aarch64", short_name = "dbg", cq_compile_only = LINUX_HOST, properties = { "android": True, "cmake_args": { "ANDROID_ABI": "arm64-v8a", "ANDROID_PLATFORM": "android-21", }, }, ) both_builders( "android_aarch64_rel", WALLEYE_HOST, category = "android|aarch64", short_name = "rel", cq_compile_only = LINUX_HOST, cq_enabled = False, properties = { "android": True, "cmake_args": { "ANDROID_ABI": "arm64-v8a", "ANDROID_PLATFORM": "android-21", "CMAKE_BUILD_TYPE": "Release", }, }, ) both_builders( "android_aarch64_fips", # The Android FIPS configuration requires a newer device. WALLEYE_HOST, category = "android|aarch64", short_name = "fips", cq_compile_only = LINUX_HOST, properties = { "android": True, "cmake_args": { "ANDROID_ABI": "arm64-v8a", "ANDROID_PLATFORM": "android-21", # FIPS mode on Android uses shared libraries. "BUILD_SHARED_LIBS": "1", "FIPS": "1", }, }, ) both_builders( "android_aarch64_fips_noasm", # The Android FIPS configuration requires a newer device. WALLEYE_HOST, category = "android|aarch64", short_name = "fips3", cq_compile_only = LINUX_HOST, properties = { "android": True, "cmake_args": { "OPENSSL_NO_ASM": "1", "ANDROID_ABI": "arm64-v8a", "ANDROID_PLATFORM": "android-21", # FIPS mode on Android uses shared libraries. "BUILD_SHARED_LIBS": "1", "FIPS": "1", }, }, ) # delocate works on aarch64. Test this by also building the static library mode # for android_aarch64_fips. Additionally, urandom_test doesn't work in shared # library builds, so this gives Android FIPS coverage for urandom_test. both_builders( "android_aarch64_fips_static", # The Android FIPS configuration requires a newer device. WALLEYE_HOST, category = "android|aarch64", short_name = "fips2", cq_compile_only = LINUX_HOST, properties = { "android": True, "cmake_args": { "ANDROID_ABI": "arm64-v8a", "ANDROID_PLATFORM": "android-21", "FIPS": "1", }, }, ) both_builders( "android_arm", WALLEYE_HOST, category = "android|thumb", short_name = "dbg", cq_compile_only = LINUX_HOST, properties = { "android": True, "cmake_args": { "ANDROID_ABI": "armeabi-v7a", # Newer versions of the Android NDK make NEON-only builds by # default. We rely on making NEON-optional builds for some of our # test coverage, but see https://crbug.com/boringssl/454. "ANDROID_ARM_NEON": "FALSE", "ANDROID_PLATFORM": "android-18", }, }, ) both_builders( "android_arm_rel", WALLEYE_HOST, category = "android|thumb", short_name = "rel", cq_compile_only = LINUX_HOST, cq_enabled = False, properties = { "android": True, "cmake_args": { "ANDROID_ABI": "armeabi-v7a", # Newer versions of the Android NDK make NEON-only builds by # default. We rely on making NEON-optional builds for some of our # test coverage, but see https://crbug.com/boringssl/454. "ANDROID_ARM_NEON": "FALSE", "ANDROID_PLATFORM": "android-18", "CMAKE_BUILD_TYPE": "Release", }, }, ) both_builders( "android_arm_fips", # The Android FIPS configuration requires a newer device. WALLEYE_HOST, category = "android|thumb", short_name = "fips", cq_compile_only = LINUX_HOST, properties = { "android": True, "cmake_args": { "ANDROID_ABI": "armeabi-v7a", "ANDROID_PLATFORM": "android-21", # FIPS mode on Android uses shared libraries. "BUILD_SHARED_LIBS": "1", "FIPS": "1", }, }, ) both_builders( "android_arm_armmode_rel", WALLEYE_HOST, category = "android|arm", short_name = "rel", cq_compile_only = LINUX_HOST, properties = { "android": True, "cmake_args": { "ANDROID_ABI": "armeabi-v7a", "ANDROID_ARM_MODE": "arm", # Newer versions of the Android NDK make NEON-only builds by # default. We rely on making NEON-optional builds for some of our # test coverage, but see https://crbug.com/boringssl/454. "ANDROID_ARM_NEON": "FALSE", "ANDROID_PLATFORM": "android-18", "CMAKE_BUILD_TYPE": "Release", }, }, ) both_builders( "android_riscv64_compile_only", LINUX_HOST, category = "android|riscv64", short_name = "rel", properties = { "android": True, "cmake_args": { "ANDROID_ABI": "riscv64", "ANDROID_PLATFORM": "android-35", "CMAKE_BUILD_TYPE": "Release", }, # The default Android NDK cannot be updated until https://crbug.com/boringssl/454 is fixed. # Meanwhile, RISC-V support requires a newer NDK, thus we override for this builder. "gclient_vars": { "android_ndk_revision": "wC8sJjVPRDPTbaZFlki_qXTC1lWJNbJi8glUO0woJ1MC", }, "run_unit_tests": False, "run_ssl_tests": False, }, ) both_builders("docs", LINUX_HOST, recipe = "boringssl_docs", short_name = "doc") # For now, we use x86_64 Macs to build iOS because there are far more of them # in luci.flex.ci and luci.flex.try pools. When this changes, switch to # MAC_ARM64_HOST. both_builders( "ios64_compile", MAC_X86_64_HOST, category = "ios", short_name = "64", properties = { "cmake_args": { "CMAKE_OSX_ARCHITECTURES": "arm64", "CMAKE_OSX_SYSROOT": "iphoneos", }, "run_unit_tests": False, "run_ssl_tests": False, }, ) both_builders( "linux", LINUX_HOST, category = "linux", short_name = "dbg", properties = { "check_stack": True, "cmake_args": { # Pick one builder to build with the C++ runtime allowed. The default # configuration does not check pure virtuals "BORINGSSL_ALLOW_CXX_RUNTIME": "1", }, }, ) both_builders( "linux_rel", LINUX_HOST, category = "linux", short_name = "rel", properties = { "cmake_args": { "CMAKE_BUILD_TYPE": "Release", }, }, ) both_builders( "linux32", LINUX_HOST, category = "linux|32", short_name = "dbg", properties = { "check_stack": True, "cmake_args": { # 32-bit x86 is cross-compiled on the 64-bit bots. "CMAKE_SYSTEM_NAME": "Linux", "CMAKE_SYSTEM_PROCESSOR": "x86", "CMAKE_ASM_FLAGS": "-m32 -msse2", "CMAKE_CXX_FLAGS": "-m32 -msse2", "CMAKE_C_FLAGS": "-m32 -msse2", }, }, ) both_builders( "linux32_rel", LINUX_HOST, category = "linux|32", short_name = "rel", properties = { "cmake_args": { "CMAKE_BUILD_TYPE": "Release", # 32-bit x86 is cross-compiled on the 64-bit bots. "CMAKE_SYSTEM_NAME": "Linux", "CMAKE_SYSTEM_PROCESSOR": "x86", "CMAKE_ASM_FLAGS": "-m32 -msse2", "CMAKE_C_FLAGS": "-m32 -msse2", "CMAKE_CXX_FLAGS": "-m32 -msse2", }, }, ) both_builders( "linux32_sde", LINUX_HOST, category = "linux|32", short_name = "sde", cq_enabled = False, execution_timeout = SDE_TIMEOUT, properties = { "cmake_args": { "CMAKE_BUILD_TYPE": "RelWithAsserts", # 32-bit x86 is cross-compiled on the 64-bit bots. "CMAKE_SYSTEM_NAME": "Linux", "CMAKE_SYSTEM_PROCESSOR": "x86", "CMAKE_ASM_FLAGS": "-m32 -msse2", "CMAKE_C_FLAGS": "-m32 -msse2", "CMAKE_CXX_FLAGS": "-m32 -msse2", }, "run_ssl_tests": False, "sde": True, }, ) both_builders( "linux32_nosse2_noasm", LINUX_HOST, category = "linux|32", short_name = "nosse2", properties = { "cmake_args": { "OPENSSL_NO_ASM": "1", "OPENSSL_NO_SSE2_FOR_TESTING": "1", # 32-bit x86 is cross-compiled on the 64-bit bots. "CMAKE_SYSTEM_NAME": "Linux", "CMAKE_SYSTEM_PROCESSOR": "x86", "CMAKE_ASM_FLAGS": "-m32 -msse2", "CMAKE_C_FLAGS": "-m32 -msse2", "CMAKE_CXX_FLAGS": "-m32 -msse2", }, }, ) both_builders( "linux_clang_cfi", LINUX_HOST, category = "linux|clang", short_name = "cfi", cq_enabled = False, properties = { "clang": True, "cmake_args": { "CFI": "1", }, }, ) both_builders( "linux_clang_rel", LINUX_HOST, category = "linux|clang", short_name = "rel", properties = { "clang": True, "cmake_args": { "CMAKE_BUILD_TYPE": "Release", }, }, ) both_builders( "linux_clang_rel_msan", LINUX_HOST, category = "linux|clang", short_name = "msan", properties = { "clang": True, "cmake_args": { # TODO(davidben): Should this be RelWithAsserts? "CMAKE_BUILD_TYPE": "Release", "MSAN": "1", "USE_CUSTOM_LIBCXX": "1", }, "gclient_vars": { "checkout_libcxx": True, }, }, ) both_builders( "linux_clang_rel_tsan", LINUX_HOST, category = "linux|clang", short_name = "tsan", cq_enabled = False, properties = { "clang": True, "cmake_args": { # TODO(davidben): Should this be RelWithAsserts? "CMAKE_BUILD_TYPE": "Release", "TSAN": "1", "USE_CUSTOM_LIBCXX": "1", }, "gclient_vars": { "checkout_libcxx": True, }, # SSL tests are all single-threaded, so running them under TSan is a # waste of time. "run_ssl_tests": False, }, ) both_builders( "linux_clang_ubsan", LINUX_HOST, category = "linux|clang", short_name = "ubsan", cq_enabled = True, properties = { "clang": True, "cmake_args": { "CMAKE_BUILD_TYPE": "RelWithAsserts", "UBSAN": "1", }, }, ) both_builders( "linux_fips", LINUX_HOST, category = "linux|fips", short_name = "dbg", properties = { "cmake_args": { "FIPS": "1", }, }, ) both_builders( "linux_fips_rel", LINUX_HOST, category = "linux|fips", short_name = "rel", properties = { "cmake_args": { "CMAKE_BUILD_TYPE": "Release", "FIPS": "1", }, }, ) both_builders( "linux_fips_clang", LINUX_HOST, category = "linux|fips|clang", short_name = "dbg", properties = { "clang": True, "cmake_args": { "FIPS": "1", }, }, ) both_builders( "linux_fips_clang_rel", LINUX_HOST, category = "linux|fips|clang", short_name = "rel", properties = { "clang": True, "cmake_args": { "CMAKE_BUILD_TYPE": "Release", "FIPS": "1", }, }, ) both_builders( "linux_fips_noasm_asan", LINUX_HOST, category = "linux|fips", short_name = "asan", properties = { "clang": True, "cmake_args": { "ASAN": "1", "FIPS": "1", "OPENSSL_NO_ASM": "1", }, }, ) both_builders( "linux_fuzz", LINUX_HOST, category = "linux", short_name = "fuzz", properties = { "clang": True, "cmake_args": { "FUZZ": "1", "LIBFUZZER_FROM_DEPS": "1", }, "gclient_vars": { "checkout_fuzzer": True, }, }, ) both_builders( "linux_noasm_asan", LINUX_HOST, category = "linux", short_name = "asan", properties = { "clang": True, "cmake_args": { "ASAN": "1", "OPENSSL_NO_ASM": "1", }, }, ) both_builders( "linux_nothreads", LINUX_HOST, category = "linux", short_name = "not", properties = { "cmake_args": { "CMAKE_C_FLAGS": "-DOPENSSL_NO_THREADS_CORRUPT_MEMORY_AND_LEAK_SECRETS_IF_THREADED=1", "CMAKE_CXX_FLAGS": "-DOPENSSL_NO_THREADS_CORRUPT_MEMORY_AND_LEAK_SECRETS_IF_THREADED=1", }, }, ) both_builders( "linux_sde", LINUX_HOST, category = "linux", short_name = "sde", cq_enabled = False, execution_timeout = SDE_TIMEOUT, properties = { "cmake_args": { "CMAKE_BUILD_TYPE": "RelWithAsserts", }, "run_ssl_tests": False, "sde": True, }, ) both_builders( "linux_shared", LINUX_HOST, category = "linux", short_name = "sh", properties = { "cmake_args": { "BUILD_SHARED_LIBS": "1", }, # The default Linux build may not depend on the C++ runtime. This is # easy to check when building shared libraries. "check_imported_libraries": True, }, ) both_builders( "linux_small", LINUX_HOST, category = "linux", short_name = "sm", properties = { "cmake_args": { "CMAKE_C_FLAGS": "-DOPENSSL_SMALL=1", "CMAKE_CXX_FLAGS": "-DOPENSSL_SMALL=1", }, }, ) both_builders( "linux_nosse2_noasm", LINUX_HOST, category = "linux", short_name = "nosse2", properties = { "cmake_args": { "OPENSSL_NO_ASM": "1", "OPENSSL_NO_SSE2_FOR_TESTING": "1", }, }, ) both_builders( "linux_bazel", LINUX_HOST, category = "linux", short_name = "bzl", recipe = "boringssl_bazel", ) both_builders("mac", MAC_X86_64_HOST, category = "mac", short_name = "dbg") both_builders( "mac_rel", MAC_X86_64_HOST, category = "mac", short_name = "rel", properties = { "cmake_args": { "CMAKE_BUILD_TYPE": "Release", }, }, ) both_builders( "mac_small", MAC_X86_64_HOST, category = "mac", short_name = "sm", properties = { "cmake_args": { "CMAKE_C_FLAGS": "-DOPENSSL_SMALL=1", "CMAKE_CXX_FLAGS": "-DOPENSSL_SMALL=1", }, }, ) both_builders("mac_arm64", MAC_ARM64_HOST, category = "mac", short_name = "arm64") both_builders( "mac_arm64_bazel", MAC_ARM64_HOST, category = "mac", short_name = "bzl", recipe = "boringssl_bazel", ) both_builders( "win32", WIN_HOST, category = "win|x86", short_name = "dbg", cq_compile_only = WIN_HOST, # Reduce CQ cycle times. properties = { "msvc_target": "x86", }, ) both_builders( "win32_rel", WIN_HOST, category = "win|x86", short_name = "rel", properties = { "cmake_args": { "CMAKE_BUILD_TYPE": "Release", }, "msvc_target": "x86", }, ) both_builders( "win32_sde", WIN_HOST, category = "win|x86", short_name = "sde", cq_enabled = False, execution_timeout = SDE_TIMEOUT, properties = { "cmake_args": { "CMAKE_BUILD_TYPE": "RelWithAsserts", }, "msvc_target": "x86", "run_ssl_tests": False, "sde": True, }, ) both_builders( "win32_small", WIN_HOST, category = "win|x86", short_name = "sm", properties = { "cmake_args": { "CMAKE_C_FLAGS": "-DOPENSSL_SMALL=1", "CMAKE_CXX_FLAGS": "-DOPENSSL_SMALL=1", }, "msvc_target": "x86", }, ) both_builders( "win32_clang", WIN_HOST, category = "win|x86", short_name = "clang", cq_compile_only = WIN_HOST, # Reduce CQ cycle times. properties = { "clang": True, "msvc_target": "x86", "cmake_args": { # Clang doesn't pick up 32-bit x86 from msvc_target. Specify it as a # cross-compile. "CMAKE_SYSTEM_NAME": "Windows", "CMAKE_SYSTEM_PROCESSOR": "x86", "CMAKE_ASM_FLAGS": "-m32 -msse2", "CMAKE_C_FLAGS": "-m32 -msse2", "CMAKE_CXX_FLAGS": "-m32 -msse2", }, }, ) both_builders( "win64", WIN_HOST, category = "win|x64", short_name = "dbg", cq_compile_only = WIN_HOST, # Reduce CQ cycle times. properties = { "msvc_target": "x64", }, ) both_builders( "win64_rel", WIN_HOST, category = "win|x64", short_name = "rel", properties = { "cmake_args": { "CMAKE_BUILD_TYPE": "Release", }, "msvc_target": "x64", }, ) both_builders( "win64_sde", WIN_HOST, category = "win|x64", short_name = "sde", cq_enabled = False, execution_timeout = SDE_TIMEOUT, properties = { "cmake_args": { "CMAKE_BUILD_TYPE": "RelWithAsserts", }, "msvc_target": "x64", "run_ssl_tests": False, "sde": True, }, ) both_builders( "win64_small", WIN_HOST, category = "win|x64", short_name = "sm", properties = { "cmake_args": { "CMAKE_C_FLAGS": "-DOPENSSL_SMALL=1", "CMAKE_CXX_FLAGS": "-DOPENSSL_SMALL=1", }, "msvc_target": "x64", }, ) both_builders( "win64_clang", WIN_HOST, category = "win|x64", short_name = "clg", cq_compile_only = WIN_HOST, # Reduce CQ cycle times. properties = { "clang": True, "msvc_target": "x64", }, ) both_builders( "win_arm64_compile", WIN_HOST, category = "win|arm64", short_name = "clang", properties = { "clang": True, "cmake_args": { # Clang doesn't pick up arm64 from msvc_target. Specify it as a # cross-compile. "CMAKE_SYSTEM_NAME": "Windows", "CMAKE_SYSTEM_PROCESSOR": "arm64", "CMAKE_ASM_FLAGS": "--target=arm64-windows", "CMAKE_C_FLAGS": "--target=arm64-windows", "CMAKE_CXX_FLAGS": "--target=arm64-windows", }, "gclient_vars": { "checkout_nasm": False, }, "msvc_target": "arm64", "run_unit_tests": False, "run_ssl_tests": False, }, ) both_builders( "win_arm64_msvc_compile", WIN_HOST, category = "win|arm64", short_name = "msvc", properties = { "cmake_args": { # This is a cross-compile, so CMake needs to be told the processor. # MSVC will pick up the architecture from msvc_target. "CMAKE_SYSTEM_NAME": "Windows", "CMAKE_SYSTEM_PROCESSOR": "arm64", # We do not currently support Windows arm64 assembly with MSVC. "OPENSSL_NO_ASM": "1", }, "gclient_vars": { "checkout_nasm": False, }, "msvc_target": "arm64", "run_unit_tests": False, "run_ssl_tests": False, }, )