From 6ab9c86a1c1e8519904c4691e5bceba5eef5c5f4 Mon Sep 17 00:00:00 2001 From: Juan Cruz Viotti Date: Fri, 24 Apr 2026 16:07:56 -0400 Subject: [PATCH 1/2] Fix LibDeflate sudden ARM issues on GitHub Actions Signed-off-by: Juan Cruz Viotti --- cmake/FindLibDeflate.cmake | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/cmake/FindLibDeflate.cmake b/cmake/FindLibDeflate.cmake index d135edac6..af36836dd 100644 --- a/cmake/FindLibDeflate.cmake +++ b/cmake/FindLibDeflate.cmake @@ -26,6 +26,29 @@ if(NOT LibDeflate_FOUND) add_library(libdeflate STATIC ${LIBDEFLATE_SOURCES}) sourcemeta_add_default_options(PRIVATE libdeflate) + # Check if the assembler supports ARM dot-product (udot) instructions. + # GCC 14+ assumes binutils is new enough, but some CI environments + # pair GCC 14 with older binutils that lack udot support + if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64|ARM64") + include(CheckCSourceCompiles) + set(CMAKE_REQUIRED_FLAGS "-march=armv8.2-a+dotprod") + check_c_source_compiles(" + #include + int main(void) { + uint32x4_t a = vdupq_n_u32(0); + uint8x16_t b = vdupq_n_u8(0); + uint8x16_t c = vdupq_n_u8(0); + a = vdotq_u32(a, b, c); + return 0; + } + " LIBDEFLATE_HAS_DOTPROD_ASSEMBLER) + unset(CMAKE_REQUIRED_FLAGS) + if(NOT LIBDEFLATE_HAS_DOTPROD_ASSEMBLER) + target_compile_definitions(libdeflate PRIVATE + LIBDEFLATE_ASSEMBLER_DOES_NOT_SUPPORT_DOTPROD) + endif() + endif() + target_include_directories(libdeflate PUBLIC "$" "$") From 33890501ce1ec7180576d8dcc9e8b72c359bea06 Mon Sep 17 00:00:00 2001 From: Juan Cruz Viotti Date: Fri, 24 Apr 2026 16:11:00 -0400 Subject: [PATCH 2/2] Fix Signed-off-by: Juan Cruz Viotti --- cmake/FindLibDeflate.cmake | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cmake/FindLibDeflate.cmake b/cmake/FindLibDeflate.cmake index af36836dd..0ad087386 100644 --- a/cmake/FindLibDeflate.cmake +++ b/cmake/FindLibDeflate.cmake @@ -31,7 +31,8 @@ if(NOT LibDeflate_FOUND) # pair GCC 14 with older binutils that lack udot support if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64|ARM64") include(CheckCSourceCompiles) - set(CMAKE_REQUIRED_FLAGS "-march=armv8.2-a+dotprod") + set(LIBDEFLATE_SAVED_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -march=armv8.2-a+dotprod") check_c_source_compiles(" #include int main(void) { @@ -42,7 +43,7 @@ if(NOT LibDeflate_FOUND) return 0; } " LIBDEFLATE_HAS_DOTPROD_ASSEMBLER) - unset(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS "${LIBDEFLATE_SAVED_CMAKE_REQUIRED_FLAGS}") if(NOT LIBDEFLATE_HAS_DOTPROD_ASSEMBLER) target_compile_definitions(libdeflate PRIVATE LIBDEFLATE_ASSEMBLER_DOES_NOT_SUPPORT_DOTPROD)