From 09fab01205460ded0e975dd4c399d46c575751ad Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Sun, 15 Oct 2023 23:55:50 +0300
Subject: [PATCH] cmake: backport support for vendored libavif from SDL3_image
Hand-picked from commits d42d109b, 6ef1e21a, and c655da07.
---
.github/workflows/main.yml | 15 ++++++++-----
.gitmodules | 4 ++--
CMakeLists.txt | 41 ++++++++++++++++++++++++++++++----
Xcode/avif/dav1d/vcs_version.h | 2 +-
Xcode/avif/dav1d/version.h | 2 +-
external/dav1d | 2 +-
external/libavif | 2 +-
7 files changed, 53 insertions(+), 15 deletions(-)
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 1352288e..9c0415be 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -40,14 +40,15 @@ jobs:
${{ matrix.platform.msys-env }}-autotools
${{ matrix.platform.msys-env }}-cmake
${{ matrix.platform.msys-env }}-gcc
+ ${{ matrix.platform.msys-env }}-ninja
+ ${{ matrix.platform.msys-env }}-pkg-config
+ ${{ matrix.platform.msys-env }}-nasm
${{ matrix.platform.msys-env }}-libavif
${{ matrix.platform.msys-env }}-libjpeg-turbo
${{ matrix.platform.msys-env }}-libjxl
${{ matrix.platform.msys-env }}-libpng
${{ matrix.platform.msys-env }}-libtiff
${{ matrix.platform.msys-env }}-libwebp
- ${{ matrix.platform.msys-env }}-ninja
- ${{ matrix.platform.msys-env }}-pkg-config
${{ matrix.platform.msys-env }}-zlib
- name: Install Ninja
uses: turtlesec-no/get-ninja@main
@@ -72,6 +73,7 @@ jobs:
libpng \
libtiff \
libtool \
+ nasm \
ninja \
pkg-config \
webp \
@@ -91,10 +93,14 @@ jobs:
libtiff-dev \
libtool \
libwebp-dev \
+ nasm \
ninja-build \
pkg-config \
zlib1g-dev \
${NULL+}
+ - name: Set up NASM
+ uses: ilammy/setup-nasm@v1
+ if: ${{ matrix.platform.vendored && !contains(matrix.platform.shell, 'msys2') }}
- uses: actions/checkout@v3
with:
@@ -123,11 +129,10 @@ jobs:
-DSDL2IMAGE_SAMPLES=ON \
-DSDL2IMAGE_TESTS=ON \
-DSDL2IMAGE_TESTS_INSTALL=ON \
- -DSDL2IMAGE_AVIF=${{ !matrix.platform.vendored }} \
+ -DSDL2IMAGE_AVIF=ON \
-DSDL2IMAGE_JXL=ON \
-DSDL2IMAGE_TIF=ON \
-DSDL2IMAGE_WEBP=ON \
- -DSDL2IMAGE_VENDORED=${{ !!matrix.platform.vendored }} \
-DCMAKE_INSTALL_PREFIX=prefix_cmake \
${{ matrix.platform.cmake }}
- name: Build (CMake)
@@ -149,7 +154,7 @@ jobs:
export PATH="$sdl_binpath:$sdlimage_binpath:$PATH"
fi
- export SDL_IMAGE_TEST_REQUIRE_LOAD_AVIF=${{ (matrix.platform.vendored && '0') || '1' }}
+ export SDL_IMAGE_TEST_REQUIRE_LOAD_AVIF=1
export SDL_IMAGE_TEST_REQUIRE_LOAD_BMP=1
export SDL_IMAGE_TEST_REQUIRE_LOAD_CUR=1
export SDL_IMAGE_TEST_REQUIRE_LOAD_GIF=1
diff --git a/.gitmodules b/.gitmodules
index 5b93a7fe..48d987df 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -25,8 +25,8 @@
[submodule "external/libavif"]
path = external/libavif
url = https://github.com/libsdl-org/libavif.git
- branch = v0.10.1-SDL
+ branch = v1.0.1-SDL
[submodule "external/dav1d"]
path = external/dav1d
url = https://github.com/libsdl-org/dav1d.git
- branch = 1.0.0-SDL
+ branch = 1.2.1-SDL
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d0ce6f97..705ab0ad 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -103,6 +103,19 @@ endif()
cmake_dependent_option(SDL2IMAGE_AVIF_SHARED "Dynamically load AVIF support (requires shared libavif)"
${SDL2IMAGE_DEPS_SHARED} SDL2IMAGE_AVIF OFF)
+if(SDL2IMAGE_AVIF_VENDORED)
+ set(SDL2IMAGE_DAV1D ON)
+ set(SDL2IMAGE_DAV1D_VENDORED ON)
+else()
+ set(SDL2IMAGE_DAV1D OFF)
+ set(SDL2IMAGE_DAV1D_VENDORED OFF)
+endif()
+if(SDL2IMAGE_AVIF_SHARED)
+ set(SDL2IMAGE_DAV1D_SHARED ON)
+else()
+ set(SDL2IMAGE_DAV1D_SHARED OFF)
+endif()
+
if(SDL2IMAGE_VENDORED AND SDL2IMAGE_JPG AND NOT (SDL2IMAGE_BACKEND_WIC OR SDL2IMAGE_BACKEND_STB OR SDL2IMAGE_BACKEND_IMAGEIO))
set(SDL2IMAGE_JPG_VENDORED ON)
else()
@@ -352,20 +365,40 @@ if(SDL2IMAGE_ZLIB)
endif()
endif()
+if(SDL2IMAGE_DAV1D)
+ if(SDL2IMAGE_DAV1D_VENDORED)
+ message(STATUS "${PROJECT_NAME}: Using vendored dav1d")
+ add_subdirectory(external/dav1d)
+ set(DAV1D_LIBRARY dav1d)
+ list(APPEND INSTALL_EXTRA_TARGETS dav1d)
+ else()
+ message(FATAL_ERROR "Not implemented")
+ endif()
+endif()
+
if(SDL2IMAGE_AVIF)
target_compile_definitions(SDL2_image PRIVATE LOAD_AVIF)
if(SDL2IMAGE_AVIF_VENDORED)
message(STATUS "${PROJECT_NAME}: Using vendored libavif")
- message(FATAL_ERROR "libavif is not vendored (yet)")
sdl_check_project_in_subfolder(external/libavif libavif SDL2IMAGE_VENDORED)
set(BUILD_SHARED_LIBS ${SDL2IMAGE_AVIF_SHARED})
+ set(AVIF_CODEC_DAV1D ON CACHE BOOL "Use dav1d codec for decoding" FORCE)
+ set(AVIF_LOCAL_DAV1D OFF CACHE BOOL "Build dav1d by libaf" FORCE)
+ #FIXME: This requires upgrading vendored libwebp to >= 1.2.4.
+ #set(LIBAVIF_WITH_SHARPYUV_SDLIMAGE ${SDL2IMAGE_WEBP} CACHE BOOL "Build libavif with sharpyuv support (re-use sharpyuv built by libwebp)" FORCE)
add_subdirectory(external/libavif EXCLUDE_FROM_ALL)
- list(APPEND INSTALL_EXTRA_TARGETS libavif)
- set_target_properties(libavif PROPERTIES EXPORT_NAME external_libavif)
- add_library(SDL2_image::external_libavif ALIAS libavif)
+ list(APPEND INSTALL_EXTRA_TARGETS avif)
+ set_target_properties(avif PROPERTIES EXPORT_NAME external_libavif)
+ add_library(SDL2_image::external_libavif ALIAS avif)
if(NOT SDL2IMAGE_AVIF_SHARED)
list(APPEND PC_LIBS -l$<TARGET_FILE_BASE_NAME:avif>)
endif()
+ if(NOT MSVC)
+ check_linker_flag(C "-Wl,--no-undefined" LINKER_SUPPORTS_WL_NO_UNDEFINED)
+ if(LINKER_SUPPORTS_WL_NO_UNDEFINED)
+ target_link_options(avif PRIVATE "-Wl,--no-undefined")
+ endif()
+ endif()
else()
message(STATUS "${PROJECT_NAME}: Using system libavif")
find_package(libavif 1.0 QUIET)
diff --git a/Xcode/avif/dav1d/vcs_version.h b/Xcode/avif/dav1d/vcs_version.h
index 7e0425ea..9084bcab 100644
--- a/Xcode/avif/dav1d/vcs_version.h
+++ b/Xcode/avif/dav1d/vcs_version.h
@@ -1,2 +1,2 @@
/* auto-generated, do not edit */
-#define DAV1D_VERSION "1.0.0-0-g99172b1"
+#define DAV1D_VERSION "1.2.1-3-g5315741"
diff --git a/Xcode/avif/dav1d/version.h b/Xcode/avif/dav1d/version.h
index 5619d66b..176d3ac2 100644
--- a/Xcode/avif/dav1d/version.h
+++ b/Xcode/avif/dav1d/version.h
@@ -28,7 +28,7 @@
#define DAV1D_VERSION_H
#define DAV1D_API_VERSION_MAJOR 6
-#define DAV1D_API_VERSION_MINOR 6
+#define DAV1D_API_VERSION_MINOR 9
#define DAV1D_API_VERSION_PATCH 0
#endif /* DAV1D_VERSION_H */
diff --git a/external/dav1d b/external/dav1d
index 52d0c1f4..0e6d055b 160000
--- a/external/dav1d
+++ b/external/dav1d
@@ -1 +1 @@
-Subproject commit 52d0c1f44eff76c3773636a9805f69ec26633037
+Subproject commit 0e6d055b1165e29cfd67b39e564ead217363e6a2
diff --git a/external/libavif b/external/libavif
index a3e93154..dfc14a75 160000
--- a/external/libavif
+++ b/external/libavif
@@ -1 +1 @@
-Subproject commit a3e9315474deb60e39b6e3aad88798eee26dadea
+Subproject commit dfc14a758cb9ad398b78fd6b60ec2144e67e9651