From ffd7dc52d97e8ffb2967d9cf450f5816c2e5d9d5 Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Tue, 10 Mar 2026 00:48:40 -0400 Subject: [PATCH 1/5] Enable vcpkg everywhere --- master/master.cfg | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/master/master.cfg b/master/master.cfg index f332945..b8a2cec 100644 --- a/master/master.cfg +++ b/master/master.cfg @@ -452,8 +452,9 @@ def get_cmake_definitions(builder_type, halide_target="host", wasm_jit="wabt", e if builder_type.has_ccache() and not builder_type.sanitizer_preset(): cmake_definitions["Halide_CCACHE_BUILD"] = "ON" + cmake_definitions["CMAKE_TOOLCHAIN_FILE"] = Interpolate("%(prop:VCPKG_ROOT)s/scripts/buildsystems/vcpkg.cmake") + if builder_type.os == "windows": - cmake_definitions["CMAKE_TOOLCHAIN_FILE"] = Interpolate("%(prop:VCPKG_ROOT)s/scripts/buildsystems/vcpkg.cmake") # CMake on Windows can't reliably find our pip-installed PyBind11 unless we set pybind11_ROOT to point to it cmake_definitions["pybind11_ROOT"] = Property("VIRTUAL_ENV") From 64af00c0b45031c1c9537468afe87b0cd9ca09c3 Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Tue, 10 Mar 2026 21:00:14 -0400 Subject: [PATCH 2/5] Use the presets present in the Halide repo See https://github.com/halide/Halide/pull/9001 --- master/master.cfg | 79 +++++++++++++---------------------------------- 1 file changed, 21 insertions(+), 58 deletions(-) diff --git a/master/master.cfg b/master/master.cfg index b8a2cec..b4a7fb9 100644 --- a/master/master.cfg +++ b/master/master.cfg @@ -235,6 +235,12 @@ class HalideBuilder(BuilderConfig): return None + def cmake_preset(self): + if self.sanitizer: + return self.sanitizer_preset() + os_name = {"linux": "linux", "osx": "macos", "windows": "windows"}[self.os] + return f"ci-{os_name}-{self.arch}-{self.bits}" + def handles_hexagon(self): return self.arch == "x86" and self.os == "linux" and self.llvm_branch == LLVM_MAIN @@ -405,27 +411,11 @@ def get_msvc_config_steps(factory, builder_type): def get_cmake_options(builder_type, build_dir): - options = [] - - if builder_type.sanitizer: - assert builder_type.handles_sanitizers() - options.append(f"--preset={builder_type.sanitizer_preset()}") - # append *after* preset so we override the build dir - options += ["-B", build_dir] - - return options + return [f"--preset={builder_type.cmake_preset()}", "-B", build_dir] def get_ctest_options(builder_type): - if builder_type.sanitizer: - assert builder_type.handles_sanitizers() - # No, this won't work, see https://gitlab.kitware.com/cmake/cmake/-/issues/23982 -- - # fortunately, we don't need to specify the current sanitizer toolchains - # at test time (just at configure time). - # return {'preset': builder_type.sanitizer_preset(), 'test_dir': build_dir} - return {"build_config": builder_type.sanitizer_preset()} - - return {"build_config": "Release"} + return {"build_config": "RelWithDebInfo"} def get_cmake_definitions(builder_type, halide_target="host", wasm_jit="wabt", extra_cmake_defs=None): @@ -436,29 +426,15 @@ def get_cmake_definitions(builder_type, halide_target="host", wasm_jit="wabt", e "CMAKE_INSTALL_PREFIX": get_install_path(builder_type), "Halide_LLVM_ROOT": Property("HALIDE_LLVM_ROOT"), "Halide_TARGET": halide_target, - "WITH_PYTHON_BINDINGS": "ON" if builder_type.handles_python() else "OFF", - "WITH_TEST_FUZZ": "ON" if builder_type.sanitizer == "fuzzer" else "OFF", **extra_cmake_defs, } - if builder_type.sanitizer and builder_type.handles_sanitizers(): - # The sanitizer toolchain files reference ${LLVM_ROOT} for the compiler paths. - cmake_definitions["LLVM_ROOT"] = Property("HALIDE_LLVM_ROOT") - else: - cmake_definitions["CMAKE_BUILD_TYPE"] = "Release" - - # Sanitizer builds intermittently fail when using CCache for reasons that aren't - # clear ("precompiled header modified") -- for now, just ignore CCache for them - if builder_type.has_ccache() and not builder_type.sanitizer_preset(): + if builder_type.has_ccache(): cmake_definitions["Halide_CCACHE_BUILD"] = "ON" - cmake_definitions["CMAKE_TOOLCHAIN_FILE"] = Interpolate("%(prop:VCPKG_ROOT)s/scripts/buildsystems/vcpkg.cmake") - if builder_type.os == "windows": - # CMake on Windows can't reliably find our pip-installed PyBind11 unless we set pybind11_ROOT to point to it cmake_definitions["pybind11_ROOT"] = Property("VIRTUAL_ENV") - # Don't bother with anything Python-related if we are targeting WebAssembly. if "wasm" in halide_target: cmake_definitions["WITH_PYTHON_BINDINGS"] = "OFF" @@ -540,21 +516,7 @@ def add_env_setup_step(factory, builder_type): # do this first because the SetPropertyFromCommand step isn't smart enough to merge get_msvc_config_steps(factory, builder_type) - if builder_type.os == "linux": - cc = "gcc-9" - cxx = "g++-9" - elif builder_type.os == "windows": - cxx = "cl.exe" - cc = "cl.exe" - else: - cxx = "c++" - cc = "cc" - - env: dict[str, Renderable] = { - "CC": cc, - "CXX": cxx, - "LD": "ld", - } + env: dict[str, Renderable] = {} factory.addStep( SetPropertiesFromEnv( @@ -587,9 +549,7 @@ def add_env_setup_step(factory, builder_type): # This will have no effect on CPU testing, just Metal testing env["METAL_DEVICE_WRAPPER_TYPE"] = "1" - env["VCPKG_ROOT"] = Property("VCPKG_ROOT") - env["VCPKG_OVERLAY_PORTS"] = get_source_path("cmake/vcpkg") - env["VCPKG_MANIFEST_FEATURES"] = "developer" + env["VCPKG_INSTALLATION_ROOT"] = Property("VCPKG_INSTALLATION_ROOT") if builder_type.os == "windows": # Current NVidia drivers on our Windows buildbots can corrupt their own @@ -661,8 +621,8 @@ def add_vcpkg_step(factory, builder_type): factory.addStep( SetProperties( - name="Set VCPKG_ROOT", - properties={"VCPKG_ROOT": vcpkg_dir}, + name="Set VCPKG_INSTALLATION_ROOT", + properties={"VCPKG_INSTALLATION_ROOT": vcpkg_dir}, ) ) @@ -716,7 +676,6 @@ def add_build_steps(factory, builder_type): workdir=build_dir, env=Property("env"), path=source_dir, - generator="Ninja", definitions=get_cmake_definitions(builder_type), options=get_cmake_options(builder_type, build_dir), ) @@ -936,7 +895,6 @@ def add_test_steps(factory, builder_type): env=env, workdir=build_dir, path=source_dir, - generator="Ninja", definitions=cmake_defs, options=get_cmake_options(builder_type, build_dir), ) @@ -1036,8 +994,14 @@ def add_test_steps(factory, builder_type): apps_source_dir = get_source_path("apps") # We currently don't attempt to build any of the apps with wasm - apps_cmake_defs = get_cmake_definitions(builder_type, halide_target=halide_target) - apps_cmake_defs["CMAKE_PREFIX_PATH"] = get_install_path(builder_type) + apps_cmake_defs: dict[str, Renderable] = { + "CMAKE_BUILD_TYPE": "RelWithDebInfo", + "CMAKE_PREFIX_PATH": get_install_path(builder_type), + "CMAKE_TOOLCHAIN_FILE": Interpolate( + "%(prop:VCPKG_INSTALLATION_ROOT)s/scripts/buildsystems/vcpkg.cmake" + ), + "Halide_TARGET": halide_target, + } # apps/hannk is expensive to build and doesn't (yet) build on all systems, so special-case it here want_hannk = builder_type.has_tflite() and not halide_target.startswith("wasm-") @@ -1058,7 +1022,6 @@ def add_test_steps(factory, builder_type): path=apps_source_dir, generator="Ninja", definitions=apps_cmake_defs, - options=get_cmake_options(builder_type, build_dir), ) ) From cb483c78adc9ef7aacce88a05d7d20dff4f81dd1 Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Tue, 10 Mar 2026 21:00:40 -0400 Subject: [PATCH 3/5] HL_DISABLE_WINDOWS_ABORT_DIALOG no longer exists in main --- master/master.cfg | 3 --- 1 file changed, 3 deletions(-) diff --git a/master/master.cfg b/master/master.cfg index b4a7fb9..8069e93 100644 --- a/master/master.cfg +++ b/master/master.cfg @@ -557,9 +557,6 @@ def add_env_setup_step(factory, builder_type): # for now, pending NVidia investigation. env["CUDA_CACHE_DISABLE"] = "1" - # We don't ever want an Abort, Retry, Ignore dialog in our tests - env["HL_DISABLE_WINDOWS_ABORT_DIALOG"] = "1" - # UV virtual environments should not pollute the source directory env["UV_PROJECT_ENVIRONMENT"] = get_builddir_subpath(".venv") From b0c69a9951d4d6f2d90e8623e496f75995ed7d0a Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Tue, 10 Mar 2026 21:03:28 -0400 Subject: [PATCH 4/5] Re-enable CUDA caches The problem disabling them was meant to solve happened with drivers that are now six years old. If we need to re-disable the cache, we can take the opportunity to investigate more. --- master/master.cfg | 6 ------ 1 file changed, 6 deletions(-) diff --git a/master/master.cfg b/master/master.cfg index 8069e93..34ac6fe 100644 --- a/master/master.cfg +++ b/master/master.cfg @@ -551,12 +551,6 @@ def add_env_setup_step(factory, builder_type): env["VCPKG_INSTALLATION_ROOT"] = Property("VCPKG_INSTALLATION_ROOT") - if builder_type.os == "windows": - # Current NVidia drivers on our Windows buildbots can corrupt their own - # cache, leading to many spurious failures. Disable the cache - # for now, pending NVidia investigation. - env["CUDA_CACHE_DISABLE"] = "1" - # UV virtual environments should not pollute the source directory env["UV_PROJECT_ENVIRONMENT"] = get_builddir_subpath(".venv") From d9c6013e2381955c2094944adc96edc90fd3243f Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Tue, 10 Mar 2026 21:07:32 -0400 Subject: [PATCH 5/5] Consolidate env dict creation --- master/master.cfg | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/master/master.cfg b/master/master.cfg index 34ac6fe..6d58668 100644 --- a/master/master.cfg +++ b/master/master.cfg @@ -516,7 +516,10 @@ def add_env_setup_step(factory, builder_type): # do this first because the SetPropertyFromCommand step isn't smart enough to merge get_msvc_config_steps(factory, builder_type) - env: dict[str, Renderable] = {} + env: dict[str, Renderable] = { + "VCPKG_INSTALLATION_ROOT": Property("VCPKG_INSTALLATION_ROOT"), + "UV_PROJECT_ENVIRONMENT": get_builddir_subpath(".venv"), + } factory.addStep( SetPropertiesFromEnv( @@ -549,11 +552,6 @@ def add_env_setup_step(factory, builder_type): # This will have no effect on CPU testing, just Metal testing env["METAL_DEVICE_WRAPPER_TYPE"] = "1" - env["VCPKG_INSTALLATION_ROOT"] = Property("VCPKG_INSTALLATION_ROOT") - - # UV virtual environments should not pollute the source directory - env["UV_PROJECT_ENVIRONMENT"] = get_builddir_subpath(".venv") - # Leaving this here (but commented out) in case we need to temporarily # disable leak-checking in the future. #