ladybird/Libraries/LibImageDecoders/CMakeLists.txt
Andreas Kling 37e7526367 LibGfx: Split image decoders into a separate library
Move the image loader sources and decoder-only dependencies from LibGfx
into a new LibImageDecoders library. This keeps the APNG-enabled PNG
loader out of processes that only need core graphics and image writers.

Link the ImageDecoder service, direct decoder tests, fuzzers, test-web,
and the image utility against LibImageDecoders where they still decode
images in-process.
2026-06-10 11:55:48 +02:00

74 lines
2.4 KiB
CMake

set(LIBGFX_IMAGE_FORMATS_DIR "${LADYBIRD_SOURCE_DIR}/Libraries/LibGfx/ImageFormats")
set(SOURCES
${LIBGFX_IMAGE_FORMATS_DIR}/AVIFLoader.cpp
${LIBGFX_IMAGE_FORMATS_DIR}/BMPLoader.cpp
${LIBGFX_IMAGE_FORMATS_DIR}/CCITTDecoder.cpp
${LIBGFX_IMAGE_FORMATS_DIR}/GIFLoader.cpp
${LIBGFX_IMAGE_FORMATS_DIR}/ICOLoader.cpp
${LIBGFX_IMAGE_FORMATS_DIR}/ImageDecoder.cpp
${LIBGFX_IMAGE_FORMATS_DIR}/JPEGLoader.cpp
${LIBGFX_IMAGE_FORMATS_DIR}/JPEGXLLoader.cpp
${LIBGFX_IMAGE_FORMATS_DIR}/PNGLoader.cpp
${LIBGFX_IMAGE_FORMATS_DIR}/TIFFLoader.cpp
${LIBGFX_IMAGE_FORMATS_DIR}/WebPLoader.cpp
)
ladybird_lib(LibImageDecoders imagedecoders)
target_link_libraries(LibImageDecoders PRIVATE
LibCompress
LibCore
LibCrypto
LibFileSystem
LibGfx
LibIPC
LibSync
LibTextCodec
LibUnicode
JPEG::JPEG
PNG::PNG
WebP::webp
WebP::webpdecoder
WebP::webpdemux
WebP::libwebpmux
avif
)
set(generated_sources TIFFMetadata.h TIFFTagHandler.cpp)
list(TRANSFORM generated_sources PREPEND "${CMAKE_BINARY_DIR}/Libraries/LibGfx/ImageFormats/")
add_custom_command(
OUTPUT ${generated_sources}
COMMAND ${Python3_EXECUTABLE} "${LADYBIRD_SOURCE_DIR}/Libraries/LibGfx/TIFFGenerator.py" -o "${CMAKE_BINARY_DIR}/Libraries/LibGfx/ImageFormats"
DEPENDS "${LADYBIRD_SOURCE_DIR}/Libraries/LibGfx/TIFFGenerator.py"
VERBATIM
)
target_sources(LibImageDecoders PRIVATE ${generated_sources})
add_custom_target(generate_tiff_files_handler DEPENDS ${generated_sources})
add_dependencies(ladybird_codegen_accumulator generate_tiff_files_handler)
add_dependencies(LibImageDecoders generate_tiff_files_handler)
if (ENABLE_INSTALL_HEADERS)
install(FILES ${generated_sources} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/LibGfx/ImageFormats")
endif()
set(CMAKE_REQUIRED_LIBRARIES PNG::PNG)
check_c_source_compiles([=[
#include <png.h>
#if !defined(PNG_APNG_SUPPORTED) || !defined(PNG_READ_APNG_SUPPORTED) || !defined(PNG_READ_APNG_SUPPORTED)
#error "APNG support is required"
#endif
int main() {}
]=] LIBPNG_HAS_APNG)
unset(CMAKE_REQUIRED_LIBRARIES)
if (NOT LIBPNG_HAS_APNG)
message(FATAL_ERROR "libpng does not support APNG, which is required by LibImageDecoders.")
endif()
if (NOT ANDROID)
target_link_libraries(LibImageDecoders PRIVATE PkgConfig::Jxl)
else()
target_link_libraries(LibImageDecoders PRIVATE libjxl::libjxl hwy::hwy)
endif()