libultrahdr: fix i686-linux build and unrestrict meta.platforms

https://github.com/NixOS/nixpkgs/issues/532626
This commit is contained in:
Michael Wang 2026-06-20 19:58:06 +10:00
commit 24a18b8315
2 changed files with 156 additions and 27 deletions

View file

@ -40,6 +40,13 @@ stdenv.mkDerivation (finalAttrs: {
(replaceVars ./gtest.patch {
GTEST_INCLUDE_DIRS = "${lib.getDev gtest}/include";
})
# Remove platform and architecture detection logic
# Also drop arch-specific compile and optimization flags to ensure
# packaging friendliness.
# Based on https://github.com/google/libultrahdr/pull/383
# modified to target 1.4.0 instead of main
./remove-platform-and-detection-logic.patch
];
# CMake incorrect absolute include/lib paths: https://github.com/NixOS/nixpkgs/issues/144170
@ -53,6 +60,12 @@ stdenv.mkDerivation (finalAttrs: {
'includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@'
'';
# use sse2 for floating point math to fix tests
env = lib.optionalAttrs stdenv.hostPlatform.isi686 {
CFLAGS = "-mfpmath=sse -msse2";
CXXFLAGS = "-mfpmath=sse -msse2";
};
cmakeFlags = [
(lib.cmakeBool "UHDR_BUILD_TESTS" true)
# Build disables install target in cross-compilation mode so
@ -102,33 +115,7 @@ stdenv.mkDerivation (finalAttrs: {
maintainers = with lib.maintainers; [
yzx9
];
# CMake script rejects non-approved platform targets
# https://github.com/google/libultrahdr/pull/383 would get rid of that
platforms =
let
# Values from the "Detect system" section in /CMakeLists.txt
# https://github.com/google/libultrahdr/blob/d52a0d13814ca399fc8a07e23de1d2c63f0e8404/CMakeLists.txt#L34
oss = [
"linux"
"windows"
"darwin"
];
archs = [
"i686"
"x86_64"
"aarch64"
"armv7l"
"riscv64"
"riscv32"
"loongarch64"
];
in
lib.lists.intersectLists lib.platforms.all (
lib.lists.crossLists (arch: os: "${arch}-${os}") [
archs
oss
]
);
platforms = lib.platforms.all;
license = with lib.licenses; [
asl20
];

View file

@ -0,0 +1,142 @@
From e2daed8da97d8857dcec2fd68d2f6f3326170f67 Mon Sep 17 00:00:00 2001
From: Kleis Auke Wolthuizen <github@kleisauke.nl>
Date: Wed, 10 Dec 2025 15:01:28 +0100
Subject: [PATCH] Remove platform and architecture detection logic
Also drop arch-specific compile and optimization flags to ensure
packaging friendliness.
---
CMakeLists.txt | 104 +++-----------------------------------------
cmake/package.cmake | 3 --
2 files changed, 5 insertions(+), 102 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 51283356..07ed9100 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -25,44 +25,6 @@ project(libuhdr
LANGUAGES C CXX
DESCRIPTION "Library for encoding and decoding ultrahdr images")
-###########################################################
-# Detect system
-###########################################################
-if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
-elseif(${CMAKE_SYSTEM_NAME} MATCHES "Emscripten")
-elseif(${CMAKE_SYSTEM_NAME} MATCHES "Android")
-elseif(WIN32)
-elseif(APPLE)
-else()
- message(FATAL_ERROR "Platform ${CMAKE_SYSTEM_NAME} not recognized")
-endif()
-
-if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")
- if(CMAKE_SIZEOF_VOID_P EQUAL 8)
- set(ARCH "amd64")
- else()
- set(ARCH "i386")
- endif()
-elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*")
- set(ARCH "i386")
-elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|arm64.*|ARM64.*)")
- if(CMAKE_SIZEOF_VOID_P EQUAL 8)
- set(ARCH "aarch64")
- else()
- set(ARCH "arm")
- endif()
-elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)")
- set(ARCH "arm")
-elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^riscv64")
- set(ARCH "riscv64")
-elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^riscv32")
- set(ARCH "riscv32")
-elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^loongarch64")
- set(ARCH "loong64")
-else()
- message(FATAL_ERROR "Architecture: ${CMAKE_SYSTEM_PROCESSOR} not recognized")
-endif()
-
###########################################################
# Directories
###########################################################
@@ -287,45 +228,9 @@ elseif(EMSCRIPTEN)
or try 'cmake -DUHDR_BUILD_DEPS=1'")
endif()
endif()
-else()
- add_compile_options(-ffunction-sections)
- add_compile_options(-fdata-sections)
- add_compile_options(-fomit-frame-pointer)
- add_compile_options(-ffp-contract=fast)
- if(ARCH STREQUAL "i386")
- add_compile_options(-m32)
- add_compile_options(-march=i386)
- add_compile_options(-mtune=generic)
- elseif(ARCH STREQUAL "amd64")
- add_compile_options(-m64)
- add_compile_options(-march=x86-64)
- add_compile_options(-mtune=generic)
- elseif(ARCH STREQUAL "arm")
- add_compile_options(-march=armv7-a)
- add_compile_options(-marm)
- if(NOT ANDROID_ABI)
- add_compile_options(-mfloat-abi=hard)
- endif()
- add_compile_options(-mfpu=neon-vfpv3)
- add_compile_options(-fno-lax-vector-conversions)
- elseif(ARCH STREQUAL "aarch64")
- add_compile_options(-march=armv8-a)
- add_compile_options(-fno-lax-vector-conversions)
- elseif(ARCH STREQUAL "riscv64")
- add_compile_options(-march=rv64gc)
- add_compile_options(-mabi=lp64d)
- elseif(ARCH STREQUAL "riscv32")
- add_compile_options(-march=rv32gc)
- add_compile_options(-mabi=ilp32d)
- elseif(ARCH STREQUAL "loong64")
- add_compile_options(-march=loongarch64)
- add_compile_options(-mabi=lp64d)
- endif()
-
- if(UHDR_ENABLE_WERROR)
- CheckCompilerOption("-Werror" SUPPORTS_WERROR)
- set(UHDR_WERROR_FLAGS "-Werror")
- endif()
+elseif(UHDR_ENABLE_WERROR)
+ CheckCompilerOption("-Werror" SUPPORTS_WERROR)
+ set(UHDR_WERROR_FLAGS "-Werror")
endif()
###########################################################
@@ -585,7 +490,8 @@ set_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
###########################################################
file(GLOB UHDR_CORE_SRCS_LIST "${SOURCE_DIR}/src/*.cpp")
if(UHDR_ENABLE_INTRINSICS)
- if(ARCH STREQUAL "arm" OR ARCH STREQUAL "aarch64")
+ string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} CMAKE_SYSTEM_PROCESSOR_LC)
+ if(CMAKE_SYSTEM_PROCESSOR_LC STREQUAL "aarch64" OR CMAKE_SYSTEM_PROCESSOR_LC MATCHES "^arm")
file(GLOB UHDR_CORE_NEON_SRCS_LIST "${SOURCE_DIR}/src/dsp/arm/*.cpp")
list(APPEND UHDR_CORE_SRCS_LIST ${UHDR_CORE_NEON_SRCS_LIST})
endif()
diff --git a/cmake/package.cmake b/cmake/package.cmake
index 2e3649aa..5a416c22 100644
--- a/cmake/package.cmake
+++ b/cmake/package.cmake
@@ -29,9 +29,7 @@ if("${CMAKE_SYSTEM_NAME}" STREQUAL "")
message(FATAL_ERROR "Failed to determine CPACK_SYSTEM_NAME. Is CMAKE_SYSTEM_NAME set?" )
endif()
string(TOLOWER "${CMAKE_SYSTEM_NAME}" CPACK_SYSTEM_NAME)
-set(CPACK_PACKAGE_ARCHITECTURE ${ARCH})
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}")
-set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}-${CPACK_PACKAGE_ARCHITECTURE}")
set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/LICENSE)
set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
@@ -46,7 +44,6 @@ elseif(UNIX)
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE ${CPACK_PACKAGE_HOMEPAGE_URL})
elseif(EXISTS "/etc/redhat-release")
set(CPACK_GENERATOR "RPM")
- set(CPACK_RPM_PACKAGE_ARCHITECTURE ${CPACK_PACKAGE_ARCHITECTURE})
set(CPACK_RPM_PACKAGE_RELEASE 1)
set(CPACK_RPM_PACKAGE_LICENSE "Apache 2.0")
set(CPACK_RPM_PACKAGE_URL ${CPACK_PACKAGE_HOMEPAGE_URL})