ADR-1041: Fix CI RED — Go metal option type + Rust AVX-512 test guard¶
- Status: Accepted
- Date: 2026-06-04
- Deciders: Lusoris
- Tags:
ci,build,go,rust,avx512,metal
Context¶
Two workflows were confirmed RED on master after the R8 unblock train:
1. Go CI (go-ci.yml line 55): -Denable_metal=false is passed to meson, but enable_metal is a feature-type option (valid values: enabled, disabled, auto). Meson rejects false as not one of the allowed string choices, aborting the libvmaf build step that the Go CI depends on to generate CGo bindings.
2. Rust CI (rust-ci.yml): builds with -Denable_avx512=false, so platform_specific_cpu_objects in core/src/meson.build contains no AVX-512 object archives. However, core/test/meson.build unconditionally compiled test_motion_avx512_parity on any x86/x86_64 host, linking it against platform_specific_cpu_objects. With the AVX-512 objects absent, the linker reported unresolved symbols for the AVX-512 kernel functions, causing the Rust CI build to fail.
Decision¶
-
Change
-Denable_metal=falseto-Denable_metal=disabledingo-ci.yml.disabledis the correct mesonfeaturestring that suppresses a backend. -
Add
and is_avx512_enabledto both theexecutable()definition guard and thetest()registration guard fortest_motion_avx512_parityincore/test/meson.build.is_avx512_enabledis defined incore/src/meson.build(line 69), which runs beforecore/test/meson.buildvia thesubdir('src')thensubdir('test')call order incore/meson.build.
Alternatives considered¶
- Runtime skip only: The test already calls
simd_test_have_avx512()at runtime to skip on hosts without the instruction set. This does not help for the linker failure at build time when the kernel object archives are absent. - Stub AVX-512 objects when disabled: Would complicate the build significantly for no benefit; the cleaner fix is not to build the test.
References¶
- R8 CI analysis:
r8-build-matrix-completeness— go-ci metal flag, rust-ci AVX-512 core/meson_options.txtline 21:option('enable_avx512', ...)core/src/meson.buildline 69:is_avx512_enabled = get_option('enable_avx512') == truecore/src/meson.buildline 813: existing AVX-512 guard pattern