subprojects: libyuv: Bump to version 1922

The libyuv wrap uses a libyuv commit between versions 1770 and 1772,
more than 5 years old. This specifies CMake 2.8 as the minimum required
version.

The most recent CMake has dropped compatibility with versions older than
3.5 in CMake 4.0. CMake 3.5 was released in 2016, and all distributions
we care about ship more recent versions. With CMake 4.0 or newer,
shipped for instance by Gentoo, compilation of the libyuv wrap fails.

Update the wrap to version 1922, which is the latest numbered version
(libyuv doesn't tag release by increases a version number in the
README.chromium file). This requires CMake 3.16, released 6 years ago,
and available in at least the last two LTS of major distributions.

This update introduces two issues. First, due to a bug in Meson (see
https://github.com/mesonbuild/meson/issues/10764), PIC handling is
broken when a CMake project wraps a static library into another static
library that has no additional source file. Work around it by wrapping
the libyuv static library again, manually setting 'pic' to true.

The second issue is that libyuv fails to compile for armhf platforms
that don't support NEON instructions. This is the case on Debian 12 and
13 that ship armhf toolchains with NEON disabled by default. The issue
causes CI failures. As the libyuv wrap is a convenience measure, disable
NEON optimization on armfd platforms the same way Debian does in its
armhf packages. If NEON support is important, the build environment
should provide a suitable libyuv.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Laurent Pinchart
2025-10-19 15:38:55 +03:00
parent 9ece9a1525
commit 6d19c813b0
3 changed files with 59 additions and 2 deletions

View File

@@ -55,7 +55,21 @@ if (pipelines.contains('virtual') or get_option('android').allowed()) and \
'-Wno-unused-parameter')
libyuv_vars.append_link_args('-ljpeg')
libyuv = cmake.subproject('libyuv', options : libyuv_vars)
libyuv_dep = libyuv.dependency('yuv')
# Meson fails to apply the -fPIC flag to static libraries produced by CMake
# that wraps other static libraries without adding any source file, despite
# setting CMAKE_POSITION_INDEPENDENT_CODE to ON. See
# https://github.com/mesonbuild/meson/issues/10764.
#
# Work around the issue by wrapping the libyuv static library into another
# static library with 'pic' set to true.
libyuv_static = static_library('libyuv-static',
dependencies : libyuv.dependency('yuv'),
pic : true,
install : false)
libyuv_include = libyuv.include_directories('yuv')
libyuv_dep = declare_dependency(link_with : libyuv_static,
include_directories : libyuv_include)
endif
# libcamera must be built first as a dependency to the other components.

View File

@@ -3,4 +3,5 @@
[wrap-git]
directory = libyuv
url = https://chromium.googlesource.com/libyuv/libyuv.git
revision = 93b1b332cd60b56ab90aea14182755e379c28a80
revision = 500f45652c459cfccd20f83f297eb66cb7b015cb
diff_files = libyuv/0004-CMakeLists.txt-Do-not-enable-NEON-for-armel-armhf.patch

View File

@@ -0,0 +1,42 @@
From: Boyuan Yang <byang@debian.org>
Date: Fri, 8 Nov 2024 08:07:01 -0500
Subject: CMakeLists.txt: Do not enable NEON for armel armhf
According to https://wiki.debian.org/ArchitectureSpecificsMemo#armel
the armhf architecture does not guarantee NEON. Do not enable NEON
on armhf. Also disable NEON for armel to prevent FTBFS
---
CMakeLists.txt | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index bf8be36..783c3d4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -95,16 +95,17 @@ endif()
if(NOT MSVC)
string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" arch_lowercase)
+# Debian-specific: Do not enable Arm Neon kernels on non-arm64 architectures.
if(arch_lowercase MATCHES "^arm" AND NOT arch_lowercase STREQUAL "arm64")
- # Enable Arm Neon kernels.
- add_definitions(-DLIBYUV_NEON=1)
- add_library(${ly_lib_name}_neon OBJECT
- ${ly_src_dir}/compare_neon.cc
- ${ly_src_dir}/rotate_neon.cc
- ${ly_src_dir}/row_neon.cc
- ${ly_src_dir}/scale_neon.cc)
- target_compile_options(${ly_lib_name}_neon PRIVATE -mfpu=neon)
- list(APPEND ly_lib_parts $<TARGET_OBJECTS:${ly_lib_name}_neon>)
+ message("Debian-specific: Not enabling NEON on ${arch_lowercase}.")
+# add_definitions(-DLIBYUV_NEON=1)
+# add_library(${ly_lib_name}_neon OBJECT
+# ${ly_src_dir}/compare_neon.cc
+# ${ly_src_dir}/rotate_neon.cc
+# ${ly_src_dir}/row_neon.cc
+# ${ly_src_dir}/scale_neon.cc)
+# target_compile_options(${ly_lib_name}_neon PRIVATE -mfpu=neon)
+# list(APPEND ly_lib_parts $<TARGET_OBJECTS:${ly_lib_name}_neon>)
endif()
if(arch_lowercase STREQUAL "aarch64" OR arch_lowercase STREQUAL "arm64")