diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /third_party/jpeg-xl/lib/jxl_extras.cmake | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/jpeg-xl/lib/jxl_extras.cmake')
-rw-r--r-- | third_party/jpeg-xl/lib/jxl_extras.cmake | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/third_party/jpeg-xl/lib/jxl_extras.cmake b/third_party/jpeg-xl/lib/jxl_extras.cmake new file mode 100644 index 0000000000..597f691554 --- /dev/null +++ b/third_party/jpeg-xl/lib/jxl_extras.cmake @@ -0,0 +1,169 @@ +# Copyright (c) the JPEG XL Project Authors. All rights reserved. +# +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +include(jxl_lists.cmake) + +# Object library for those parts of extras that do not depend on jxl internals +# or jpegli. We will create two versions of these object files, one with and one +# without external codec support compiled in. +list(APPEND JPEGXL_EXTRAS_CORE_SOURCES + "${JPEGXL_INTERNAL_EXTRAS_SOURCES}" + "${JPEGXL_INTERNAL_CODEC_APNG_SOURCES}" + "${JPEGXL_INTERNAL_CODEC_EXR_SOURCES}" + "${JPEGXL_INTERNAL_CODEC_JPG_SOURCES}" + "${JPEGXL_INTERNAL_CODEC_JXL_SOURCES}" + "${JPEGXL_INTERNAL_CODEC_PGX_SOURCES}" + "${JPEGXL_INTERNAL_CODEC_PNM_SOURCES}" + "${JPEGXL_INTERNAL_CODEC_NPY_SOURCES}" + extras/dec/gif.cc + extras/dec/gif.h +) +foreach(LIB jxl_extras_core-obj jxl_extras_core_nocodec-obj) + add_library("${LIB}" OBJECT "${JPEGXL_EXTRAS_CORE_SOURCES}") + list(APPEND JXL_EXTRAS_OBJECT_LIBRARIES "${LIB}") +endforeach() +list(APPEND JXL_EXTRAS_OBJECTS $<TARGET_OBJECTS:jxl_extras_core-obj>) + +# Object library for those parts of extras that depend on jxl internals. +add_library(jxl_extras_internal-obj OBJECT + "${JPEGXL_INTERNAL_EXTRAS_FOR_TOOLS_SOURCES}" +) +list(APPEND JXL_EXTRAS_OBJECT_LIBRARIES jxl_extras_internal-obj) +list(APPEND JXL_EXTRAS_OBJECTS $<TARGET_OBJECTS:jxl_extras_internal-obj>) + +set(JXL_EXTRAS_CODEC_INTERNAL_LIBRARIES) + +find_package(GIF 5.1) +if(GIF_FOUND) + target_include_directories(jxl_extras_core-obj PRIVATE "${GIF_INCLUDE_DIRS}") + target_compile_definitions(jxl_extras_core-obj PRIVATE -DJPEGXL_ENABLE_GIF=1) + list(APPEND JXL_EXTRAS_CODEC_INTERNAL_LIBRARIES ${GIF_LIBRARIES}) + if(JPEGXL_DEP_LICENSE_DIR) + configure_file("${JPEGXL_DEP_LICENSE_DIR}/libgif-dev/copyright" + ${PROJECT_BINARY_DIR}/LICENSE.libgif COPYONLY) + endif() # JPEGXL_DEP_LICENSE_DIR +endif() + +find_package(JPEG) +if(JPEG_FOUND) + target_include_directories(jxl_extras_core-obj PRIVATE "${JPEG_INCLUDE_DIRS}") + target_compile_definitions(jxl_extras_core-obj PRIVATE -DJPEGXL_ENABLE_JPEG=1) + list(APPEND JXL_EXTRAS_CODEC_INTERNAL_LIBRARIES ${JPEG_LIBRARIES}) + if(JPEGXL_DEP_LICENSE_DIR) + configure_file("${JPEGXL_DEP_LICENSE_DIR}/libjpeg-dev/copyright" + ${PROJECT_BINARY_DIR}/LICENSE.libjpeg COPYONLY) + endif() # JPEGXL_DEP_LICENSE_DIR +endif() + +if (JPEGXL_ENABLE_SJPEG) + target_compile_definitions(jxl_extras_core-obj PRIVATE + -DJPEGXL_ENABLE_SJPEG=1) + target_include_directories(jxl_extras_core-obj PRIVATE + ../third_party/sjpeg/src) + list(APPEND JXL_EXTRAS_CODEC_INTERNAL_LIBRARIES sjpeg) +endif() + +if(JPEGXL_ENABLE_JPEGLI) + add_library(jxl_extras_jpegli-obj OBJECT + "${JPEGXL_INTERNAL_CODEC_JPEGLI_SOURCES}" + ) + target_include_directories(jxl_extras_jpegli-obj PRIVATE + "${CMAKE_CURRENT_BINARY_DIR}/include/jpegli" + ) + list(APPEND JXL_EXTRAS_OBJECT_LIBRARIES jxl_extras_jpegli-obj) + list(APPEND JXL_EXTRAS_OBJECTS $<TARGET_OBJECTS:jxl_extras_jpegli-obj>) +endif() + +if(NOT JPEGXL_BUNDLE_LIBPNG) + find_package(PNG) +endif() +if(PNG_FOUND) + target_include_directories(jxl_extras_core-obj PRIVATE "${PNG_INCLUDE_DIRS}") + target_compile_definitions(jxl_extras_core-obj PRIVATE -DJPEGXL_ENABLE_APNG=1) + list(APPEND JXL_EXTRAS_CODEC_INTERNAL_LIBRARIES ${PNG_LIBRARIES}) + configure_file(extras/LICENSE.apngdis + ${PROJECT_BINARY_DIR}/LICENSE.apngdis COPYONLY) +endif() + +if (JPEGXL_ENABLE_OPENEXR) +pkg_check_modules(OpenEXR IMPORTED_TARGET OpenEXR) +if (OpenEXR_FOUND) + target_include_directories(jxl_extras_core-obj PRIVATE + "${OpenEXR_INCLUDE_DIRS}" + ) + target_compile_definitions(jxl_extras_core-obj PRIVATE -DJPEGXL_ENABLE_EXR=1) + list(APPEND JXL_EXTRAS_CODEC_INTERNAL_LIBRARIES PkgConfig::OpenEXR) + if(JPEGXL_DEP_LICENSE_DIR) + configure_file("${JPEGXL_DEP_LICENSE_DIR}/libopenexr-dev/copyright" + ${PROJECT_BINARY_DIR}/LICENSE.libopenexr COPYONLY) + endif() # JPEGXL_DEP_LICENSE_DIR + # OpenEXR generates exceptions, so we need exception support to catch them. + # Actually those flags counteract the ones set in JPEGXL_INTERNAL_FLAGS. + if (NOT WIN32) + set_source_files_properties( + extras/dec/exr.cc extras/enc/exr.cc PROPERTIES COMPILE_FLAGS -fexceptions) + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + set_source_files_properties( + extras/dec/exr.cc extras/enc/exr.cc PROPERTIES COMPILE_FLAGS + -fcxx-exceptions) + endif() + endif() +endif() # OpenEXR_FOUND +endif() # JPEGXL_ENABLE_OPENEXR + +# Common settings for the object libraries. +foreach(LIB ${JXL_EXTRAS_OBJECT_LIBRARIES}) + target_compile_options("${LIB}" PRIVATE "${JPEGXL_INTERNAL_FLAGS}") + target_compile_definitions("${LIB}" PRIVATE -DJXL_EXPORT=) + set_property(TARGET "${LIB}" PROPERTY POSITION_INDEPENDENT_CODE ON) + target_include_directories("${LIB}" PRIVATE + ${PROJECT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_CURRENT_BINARY_DIR}/include + ${JXL_HWY_INCLUDE_DIRS} + ) +endforeach() + +# Define an extras library that does not have the image codecs, only the core +# extras code. This is needed for some of the fuzzers. +add_library(jxl_extras_nocodec-internal STATIC EXCLUDE_FROM_ALL + $<TARGET_OBJECTS:jxl_extras_core_nocodec-obj> + $<TARGET_OBJECTS:jxl_extras_internal-obj> +) +target_link_libraries(jxl_extras_nocodec-internal PRIVATE jxl_threads) +target_link_libraries(jxl_extras_nocodec-internal PUBLIC jxl-internal) + +# We only define a static library jxl_extras since it uses internal parts of +# jxl library which are not accessible from outside the library in the +# shared library case. +add_library(jxl_extras-internal STATIC EXCLUDE_FROM_ALL ${JXL_EXTRAS_OBJECTS}) +target_link_libraries(jxl_extras-internal PRIVATE + ${JXL_EXTRAS_CODEC_INTERNAL_LIBRARIES} + jxl_threads +) +target_link_libraries(jxl_extras-internal PUBLIC jxl-internal) +if(JPEGXL_ENABLE_JPEGLI) + target_compile_definitions(jxl_extras-internal PUBLIC -DJPEGXL_ENABLE_JPEGLI=1) + target_link_libraries(jxl_extras-internal PRIVATE jpegli-static) +endif() + +### Library that does not depend on internal parts of jxl library. +### Used by cjxl and djxl binaries. +add_library(jxl_extras_codec + $<TARGET_OBJECTS:jxl_extras_core-obj> +) +target_link_libraries(jxl_extras_codec PRIVATE + ${JXL_EXTRAS_CODEC_INTERNAL_LIBRARIES} +) +target_link_libraries(jxl_extras_codec PUBLIC jxl) +set_target_properties(jxl_extras_codec PROPERTIES + VERSION ${JPEGXL_LIBRARY_VERSION} + SOVERSION ${JPEGXL_LIBRARY_SOVERSION} +) +install(TARGETS jxl_extras_codec + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} +) |