From 2b992ade88e2e4236e8940827bfe2ea9e947e03b Mon Sep 17 00:00:00 2001 From: Green Sky Date: Sun, 6 Apr 2025 20:15:56 +0200 Subject: [PATCH] add cmake options to perfer system libs to libwebp --- .github/workflows/ci.yml | 4 ++-- external/libwebp/CMakeLists.txt | 40 +++++++++++++++++++++++++++---- external/sdl/CMakeLists.txt | 2 +- external/sdl_image/CMakeLists.txt | 2 +- flake.nix | 5 +++- src/CMakeLists.txt | 4 ++-- 6 files changed, 45 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2af01ea..783ad47 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -153,7 +153,7 @@ jobs: - name: Install Dependencies env: VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite" - run: vcpkg install pkgconf:x64-windows libsodium:x64-windows-static pthreads:x64-windows-static opus:x64-windows-static libvpx:x64-windows-static libpng:x64-windows-static libjpeg-turbo:x64-windows-static freetype:x64-windows-static + run: vcpkg install pkgconf:x64-windows libsodium:x64-windows-static pthreads:x64-windows-static opus:x64-windows-static libvpx:x64-windows-static libwebp:x64-windows-static libpng:x64-windows-static libjpeg-turbo:x64-windows-static freetype:x64-windows-static # setup vs env - uses: ilammy/msvc-dev-cmd@v1 @@ -170,7 +170,7 @@ jobs: # key: ${{github.event.repository.name}}-${{github.job}} - name: Configure CMake - run: cmake -G Ninja -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-static -DSDLIMAGE_VENDORED=OFF -DSDLIMAGE_DEPS_SHARED=OFF -DSDLIMAGE_JXL=OFF -DSDLIMAGE_AVIF=OFF -DPKG_CONFIG_EXECUTABLE=C:/vcpkg/installed/x64-windows/tools/pkgconf/pkgconf.exe + run: cmake -G Ninja -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-static -DTOMATO_DEP_LIBWEBP_USE_SYSTEM=ON -DSDLIMAGE_VENDORED=OFF -DSDLIMAGE_DEPS_SHARED=OFF -DSDLIMAGE_JXL=OFF -DSDLIMAGE_AVIF=OFF -DPKG_CONFIG_EXECUTABLE=C:/vcpkg/installed/x64-windows/tools/pkgconf/pkgconf.exe - name: Build run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -j 4 -t tomato diff --git a/external/libwebp/CMakeLists.txt b/external/libwebp/CMakeLists.txt index e673cb1..59cc3e9 100644 --- a/external/libwebp/CMakeLists.txt +++ b/external/libwebp/CMakeLists.txt @@ -1,8 +1,36 @@ -cmake_minimum_required(VERSION 3.14...3.24 FATAL_ERROR) +cmake_minimum_required(VERSION 3.16...3.24 FATAL_ERROR) include(FetchContent) -if (NOT TARGET libwebp) +option(TOMATO_DEP_LIBWEBP_USE_SYSTEM "Prefer system provided libwebp" OFF) + +if (TOMATO_DEP_LIBWEBP_USE_SYSTEM) + if (NOT TARGET WebP::libwebpmux) + find_package(WebP CONFIG GLOBAL QUIET COMPONENTS webp webpdemux libwebpmux) + endif() + + #if (NOT TARGET libwebp) + # find_package(WebP GLOBAL) + #endif() + + if (TARGET WebP::webp) + message(STATUS "found WebP::webp") + endif() + if (TARGET WebP::webpdemux) + message(STATUS "found WebP::webpdemux") + endif() + if (TARGET WebP::libwebpmux) + message(STATUS "found WebP::libwebpmux") + endif() + + if (TARGET WebP::libwebpmux) + message(STATUS "found system libwebp") + else() + message(STATUS "system libwebp not found") + endif() +endif() + +if (NOT TARGET WebP::libwebpmux) set(WEBP_LINK_STATIC ON CACHE BOOL "" FORCE) set(WEBP_BUILD_ANIM_UTILS OFF CACHE BOOL "" FORCE) set(WEBP_BUILD_CWEBP OFF CACHE BOOL "" FORCE) @@ -19,11 +47,13 @@ if (NOT TARGET libwebp) FetchContent_Declare(libwebp GIT_REPOSITORY https://github.com/webmproject/libwebp - GIT_TAG v1.4.0 + GIT_TAG v1.5.0 FIND_PACKAGE_ARGS ) FetchContent_MakeAvailable(libwebp) + + add_library(WebP::webp ALIAS webp) + add_library(WebP::webpdemux ALIAS webpdemux) + add_library(WebP::libwebpmux ALIAS libwebpmux) endif() -#add_subdirectory(./libwebp EXCLUDE_FROM_ALL) - diff --git a/external/sdl/CMakeLists.txt b/external/sdl/CMakeLists.txt index 9b30738..2fe8468 100644 --- a/external/sdl/CMakeLists.txt +++ b/external/sdl/CMakeLists.txt @@ -7,7 +7,7 @@ option(TOMATO_DEP_SDL_USE_SYSTEM "Prefer system provided SDL" OFF) if (TOMATO_DEP_SDL_USE_SYSTEM) if (NOT TARGET SDL3::SDL3) #find_package(SDL3 REQUIRED CONFIG REQUIRED COMPONENTS SDL3-shared) - find_package(SDL3 REQUIRED CONFIG GLOBAL QUIET) + find_package(SDL3 CONFIG GLOBAL QUIET) endif() if (TARGET SDL3::SDL3) diff --git a/external/sdl_image/CMakeLists.txt b/external/sdl_image/CMakeLists.txt index 0e5dfc4..3734f8b 100644 --- a/external/sdl_image/CMakeLists.txt +++ b/external/sdl_image/CMakeLists.txt @@ -6,7 +6,7 @@ option(TOMATO_DEP_SDL_IMAGE_USE_SYSTEM "Prefer system provided SDL_image" OFF) if (TOMATO_DEP_SDL_IMAGE_USE_SYSTEM) if (NOT TARGET SDL3_image::SDL3_image) - find_package(SDL3_image REQUIRED CONFIG GLOBAL QUIET) + find_package(SDL3_image CONFIG GLOBAL QUIET) endif() if (TARGET SDL3_image::SDL3_image) diff --git a/flake.nix b/flake.nix index 519a086..76b0867 100644 --- a/flake.nix +++ b/flake.nix @@ -90,6 +90,8 @@ libopus libvpx + libwebp + freetype ] ++ self.packages.${system}.default.dlopenBuildInputs; @@ -104,8 +106,9 @@ # TODO: use package instead "-DFETCHCONTENT_SOURCE_DIR_JSON=${nlohmann-json}" # we care about the version "-DFETCHCONTENT_SOURCE_DIR_ZSTD=${pkgs.zstd.src}" # we dont care about the version (we use 1.4.x features) - "-DFETCHCONTENT_SOURCE_DIR_LIBWEBP=${pkgs.libwebp.src}" "-DFETCHCONTENT_SOURCE_DIR_SDL3=${sdl3}" + #"-DFETCHCONTENT_SOURCE_DIR_LIBWEBP=${pkgs.libwebp.src}" + "-DTOMATO_DEP_LIBWEBP_USE_SYSTEM=ON" "-DFETCHCONTENT_SOURCE_DIR_SDL3_IMAGE=${sdl3_image}" "-DSDLIMAGE_JXL=ON" "-DFETCHCONTENT_SOURCE_DIR_PLUTOSVG=${plutosvg}" # not in pkgs diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 53274eb..d2f9c0a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -194,8 +194,8 @@ target_link_libraries(tomato PUBLIC stb_image stb_image_write - webpdemux - libwebpmux # the f why (needed for anim encode) + WebP::webpdemux + WebP::libwebpmux # the f why (needed for anim encode) qoi SDL3_image::SDL3_image )