From 728866ba45b648bcdc9ced29637627761800b491 Mon Sep 17 00:00:00 2001 From: Timo Koch Date: Tue, 8 Sep 2026 11:16:09 +0200 Subject: [PATCH 1/3] [cmake] Fall back to CMake standard IPO if linker is not ld --- cmake/SetBuildType.cmake | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cmake/SetBuildType.cmake b/cmake/SetBuildType.cmake index 7cffb5e1..15da86f1 100644 --- a/cmake/SetBuildType.cmake +++ b/cmake/SetBuildType.cmake @@ -43,9 +43,12 @@ ELSE() MARK_AS_ADVANCED(FORCE CMAKE_GCC_NM) MARK_AS_ADVANCED(FORCE CMAKE_GCC_RANLIB) # Determine version of LD linker, since LTO linker plugins prior to version 2.35.2 as well as standard IPO cause segfaults - EXECUTE_PROCESS(COMMAND ld --version COMMAND grep "^GNU ld" COMMAND sed "s/^.* //g" OUTPUT_VARIABLE GNU_LD_VERSION) + EXECUTE_PROCESS(COMMAND ld --version COMMAND grep "^GNU ld" COMMAND sed "s/^.* //g" OUTPUT_VARIABLE GNU_LD_VERSION ERROR_QUIET) STRING(STRIP "${GNU_LD_VERSION}" GNU_LD_VERSION) - IF( ${GNU_LD_VERSION} VERSION_GREATER "2.35.2" ) + # Linkers other than GNU ld (Apple ld, LLD, mold) report no version here, so the plugin-based path does not apply + IF( NOT GNU_LD_VERSION ) + SET(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) # Fall back to standard IPO + ELSEIF( GNU_LD_VERSION VERSION_GREATER "2.35.2" ) IF( CMAKE_GCC_AR AND CMAKE_GCC_NM AND CMAKE_GCC_RANLIB ) MESSAGE(STATUS "Found GCC binutils wrappers for LTO. Enabling LTO linker plugin.") # Do not use the standard CMake LTO option for GNU (-flto -fno-fat-lto-objects), as it does not allow speed-up during linking From 7e1fb9097060dd7d3a6c169745fb42fd5635305d Mon Sep 17 00:00:00 2001 From: Timo Koch Date: Tue, 8 Sep 2026 11:20:43 +0200 Subject: [PATCH 2/3] zlib symbols are undefined refs in HDF5 search must not be restricted to defined symbols --- cmake/SetLibraries.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/SetLibraries.cmake b/cmake/SetLibraries.cmake index ae4b4909..93eeb5a5 100644 --- a/cmake/SetLibraries.cmake +++ b/cmake/SetLibraries.cmake @@ -236,7 +236,7 @@ IF(NOT LIBS_BUILD_HDF5) IF(NOT "${HDF5_C_LIBRARY_hdf5_c}" STREQUAL "") IF(APPLE) - EXECUTE_PROCESS(COMMAND nm -gU ${HDF5_C_LIBRARY_hdf5_c} COMMAND grep inflate OUTPUT_VARIABLE HDF5_USES_ZLIB RESULT_VARIABLE GREP_RESULT OUTPUT_STRIP_TRAILING_WHITESPACE) + EXECUTE_PROCESS(COMMAND nm -g ${HDF5_C_LIBRARY_hdf5_c} COMMAND grep inflate OUTPUT_VARIABLE HDF5_USES_ZLIB RESULT_VARIABLE GREP_RESULT OUTPUT_STRIP_TRAILING_WHITESPACE) ELSE() EXECUTE_PROCESS(COMMAND readelf -Ws ${HDF5_C_LIBRARY_hdf5_c} COMMAND grep inflate OUTPUT_VARIABLE HDF5_USES_ZLIB RESULT_VARIABLE GREP_RESULT OUTPUT_STRIP_TRAILING_WHITESPACE) ENDIF() From 04ee3f9320f8723a838053ca2eddac16d9160090 Mon Sep 17 00:00:00 2001 From: Timo Koch Date: Tue, 8 Sep 2026 11:31:11 +0200 Subject: [PATCH 3/3] [cmake][hdf5] Support szip via libaec (modern replacement with less restrictive license) --- cmake/SetLibraries.cmake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmake/SetLibraries.cmake b/cmake/SetLibraries.cmake index 93eeb5a5..f7b4e967 100644 --- a/cmake/SetLibraries.cmake +++ b/cmake/SetLibraries.cmake @@ -256,6 +256,9 @@ IF(NOT LIBS_BUILD_HDF5) ENDIF() ENDIF() + # HDF5 might reference szip, nowadays provided by libaec, in its imported targets without looking it up itself + FIND_PACKAGE(libaec QUIET) + # Set build status to system SET(HDF5_BUILD_STATUS "system") ELSE()