libjxl

FORK: libjxl patches used on blog
git clone https://git.neptards.moe/blog/libjxl.git
Log | Files | Refs | Submodules | README | LICENSE

jxl_extras.cmake (6631B)


      1 # Copyright (c) the JPEG XL Project Authors. All rights reserved.
      2 #
      3 # Use of this source code is governed by a BSD-style
      4 # license that can be found in the LICENSE file.
      5 
      6 include(jxl_lists.cmake)
      7 
      8 # Object library for those parts of extras that do not depend on jxl internals
      9 # or jpegli. We will create two versions of these object files, one with and one
     10 # without external codec support compiled in.
     11 list(APPEND JPEGXL_EXTRAS_CORE_SOURCES
     12   "${JPEGXL_INTERNAL_EXTRAS_SOURCES}"
     13   "${JPEGXL_INTERNAL_CODEC_APNG_SOURCES}"
     14   "${JPEGXL_INTERNAL_CODEC_EXR_SOURCES}"
     15   "${JPEGXL_INTERNAL_CODEC_JPG_SOURCES}"
     16   "${JPEGXL_INTERNAL_CODEC_JXL_SOURCES}"
     17   "${JPEGXL_INTERNAL_CODEC_PGX_SOURCES}"
     18   "${JPEGXL_INTERNAL_CODEC_PNM_SOURCES}"
     19   "${JPEGXL_INTERNAL_CODEC_NPY_SOURCES}"
     20   extras/dec/gif.cc
     21   extras/dec/gif.h
     22 )
     23 foreach(LIB jxl_extras_core-obj jxl_extras_core_nocodec-obj)
     24   add_library("${LIB}" OBJECT "${JPEGXL_EXTRAS_CORE_SOURCES}")
     25   list(APPEND JXL_EXTRAS_OBJECT_LIBRARIES "${LIB}")
     26 endforeach()
     27 list(APPEND JXL_EXTRAS_OBJECTS $<TARGET_OBJECTS:jxl_extras_core-obj>)
     28 
     29 # Object library for those parts of extras that depend on jxl internals.
     30 add_library(jxl_extras_internal-obj OBJECT
     31   "${JPEGXL_INTERNAL_EXTRAS_FOR_TOOLS_SOURCES}"
     32 )
     33 list(APPEND JXL_EXTRAS_OBJECT_LIBRARIES jxl_extras_internal-obj)
     34 list(APPEND JXL_EXTRAS_OBJECTS $<TARGET_OBJECTS:jxl_extras_internal-obj>)
     35 
     36 set(JXL_EXTRAS_CODEC_INTERNAL_LIBRARIES)
     37 
     38 find_package(GIF 5.1)
     39 if(GIF_FOUND)
     40   target_include_directories(jxl_extras_core-obj PRIVATE "${GIF_INCLUDE_DIRS}")
     41   target_compile_definitions(jxl_extras_core-obj PRIVATE -DJPEGXL_ENABLE_GIF=1)
     42   list(APPEND JXL_EXTRAS_CODEC_INTERNAL_LIBRARIES ${GIF_LIBRARIES})
     43   if(JPEGXL_DEP_LICENSE_DIR)
     44     configure_file("${JPEGXL_DEP_LICENSE_DIR}/libgif-dev/copyright"
     45                    ${PROJECT_BINARY_DIR}/LICENSE.libgif COPYONLY)
     46   endif()  # JPEGXL_DEP_LICENSE_DIR
     47 endif()
     48 
     49 find_package(JPEG)
     50 if(JPEG_FOUND)
     51   target_include_directories(jxl_extras_core-obj PRIVATE "${JPEG_INCLUDE_DIRS}")
     52   target_compile_definitions(jxl_extras_core-obj PRIVATE -DJPEGXL_ENABLE_JPEG=1)
     53   list(APPEND JXL_EXTRAS_CODEC_INTERNAL_LIBRARIES ${JPEG_LIBRARIES})
     54   if(JPEGXL_DEP_LICENSE_DIR)
     55     configure_file("${JPEGXL_DEP_LICENSE_DIR}/libjpeg-dev/copyright"
     56                    ${PROJECT_BINARY_DIR}/LICENSE.libjpeg COPYONLY)
     57   endif()  # JPEGXL_DEP_LICENSE_DIR
     58 endif()
     59 
     60 if (JPEGXL_ENABLE_SJPEG)
     61   target_compile_definitions(jxl_extras_core-obj PRIVATE
     62     -DJPEGXL_ENABLE_SJPEG=1)
     63   target_include_directories(jxl_extras_core-obj PRIVATE
     64     ../third_party/sjpeg/src)
     65   list(APPEND JXL_EXTRAS_CODEC_INTERNAL_LIBRARIES sjpeg)
     66 endif()
     67 
     68 if(JPEGXL_ENABLE_JPEGLI)
     69   add_library(jxl_extras_jpegli-obj OBJECT
     70     "${JPEGXL_INTERNAL_CODEC_JPEGLI_SOURCES}"
     71   )
     72   target_include_directories(jxl_extras_jpegli-obj PRIVATE
     73     "${CMAKE_CURRENT_BINARY_DIR}/include/jpegli"
     74   )
     75   list(APPEND JXL_EXTRAS_OBJECT_LIBRARIES jxl_extras_jpegli-obj)
     76   list(APPEND JXL_EXTRAS_OBJECTS $<TARGET_OBJECTS:jxl_extras_jpegli-obj>)
     77 endif()
     78 
     79 if(NOT JPEGXL_BUNDLE_LIBPNG)
     80   find_package(PNG)
     81 endif()
     82 if(PNG_FOUND)
     83   target_include_directories(jxl_extras_core-obj PRIVATE "${PNG_INCLUDE_DIRS}")
     84   target_compile_definitions(jxl_extras_core-obj PRIVATE -DJPEGXL_ENABLE_APNG=1)
     85   list(APPEND JXL_EXTRAS_CODEC_INTERNAL_LIBRARIES ${PNG_LIBRARIES})
     86   configure_file(extras/LICENSE.apngdis
     87                  ${PROJECT_BINARY_DIR}/LICENSE.apngdis COPYONLY)
     88 endif()
     89 
     90 if (JPEGXL_ENABLE_OPENEXR)
     91 pkg_check_modules(OpenEXR IMPORTED_TARGET OpenEXR)
     92 if (OpenEXR_FOUND)
     93   target_include_directories(jxl_extras_core-obj PRIVATE
     94     "${OpenEXR_INCLUDE_DIRS}"
     95   )
     96   target_compile_definitions(jxl_extras_core-obj PRIVATE -DJPEGXL_ENABLE_EXR=1)
     97   list(APPEND JXL_EXTRAS_CODEC_INTERNAL_LIBRARIES PkgConfig::OpenEXR)
     98   if(JPEGXL_DEP_LICENSE_DIR)
     99     configure_file("${JPEGXL_DEP_LICENSE_DIR}/libopenexr-dev/copyright"
    100                    ${PROJECT_BINARY_DIR}/LICENSE.libopenexr COPYONLY)
    101   endif()  # JPEGXL_DEP_LICENSE_DIR
    102   # OpenEXR generates exceptions, so we need exception support to catch them.
    103   # Actually those flags counteract the ones set in JPEGXL_INTERNAL_FLAGS.
    104   if (NOT WIN32)
    105     set_source_files_properties(
    106       extras/dec/exr.cc extras/enc/exr.cc PROPERTIES COMPILE_FLAGS -fexceptions)
    107     if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    108       set_source_files_properties(
    109 	extras/dec/exr.cc extras/enc/exr.cc PROPERTIES COMPILE_FLAGS
    110 	-fcxx-exceptions)
    111     endif()
    112   endif()
    113 endif() # OpenEXR_FOUND
    114 endif() # JPEGXL_ENABLE_OPENEXR
    115 
    116 # Common settings for the object libraries.
    117 foreach(LIB ${JXL_EXTRAS_OBJECT_LIBRARIES})
    118   target_compile_options("${LIB}" PRIVATE "${JPEGXL_INTERNAL_FLAGS}")
    119   target_compile_definitions("${LIB}" PRIVATE -DJXL_EXPORT=)
    120   set_property(TARGET "${LIB}" PROPERTY POSITION_INDEPENDENT_CODE ON)
    121   target_include_directories("${LIB}" PRIVATE
    122     ${PROJECT_SOURCE_DIR}
    123     ${CMAKE_CURRENT_SOURCE_DIR}/include
    124     ${CMAKE_CURRENT_BINARY_DIR}/include
    125     ${JXL_HWY_INCLUDE_DIRS}
    126   )
    127 endforeach()
    128 
    129 # Define an extras library that does not have the image codecs, only the core
    130 # extras code. This is needed for some of the fuzzers.
    131 add_library(jxl_extras_nocodec-internal STATIC EXCLUDE_FROM_ALL
    132   $<TARGET_OBJECTS:jxl_extras_core_nocodec-obj>
    133   $<TARGET_OBJECTS:jxl_extras_internal-obj>
    134 )
    135 target_link_libraries(jxl_extras_nocodec-internal PRIVATE jxl_threads)
    136 target_link_libraries(jxl_extras_nocodec-internal PUBLIC jxl-internal)
    137 
    138 # We only define a static library jxl_extras since it uses internal parts of
    139 # jxl library which are not accessible from outside the library in the
    140 # shared library case.
    141 add_library(jxl_extras-internal STATIC EXCLUDE_FROM_ALL ${JXL_EXTRAS_OBJECTS})
    142 target_link_libraries(jxl_extras-internal PRIVATE
    143   ${JXL_EXTRAS_CODEC_INTERNAL_LIBRARIES}
    144   jxl_threads
    145 )
    146 target_link_libraries(jxl_extras-internal PUBLIC jxl-internal)
    147 if(JPEGXL_ENABLE_JPEGLI)
    148   target_compile_definitions(jxl_extras-internal PUBLIC -DJPEGXL_ENABLE_JPEGLI=1)
    149   target_link_libraries(jxl_extras-internal PRIVATE jpegli-static)
    150 endif()
    151 
    152 ### Library that does not depend on internal parts of jxl library.
    153 ### Used by cjxl and djxl binaries.
    154 add_library(jxl_extras_codec
    155   $<TARGET_OBJECTS:jxl_extras_core-obj>
    156 )
    157 target_link_libraries(jxl_extras_codec PRIVATE
    158   ${JXL_EXTRAS_CODEC_INTERNAL_LIBRARIES}
    159 )
    160 target_link_libraries(jxl_extras_codec PUBLIC jxl)
    161 set_target_properties(jxl_extras_codec PROPERTIES
    162   VERSION ${JPEGXL_LIBRARY_VERSION}
    163   SOVERSION ${JPEGXL_LIBRARY_SOVERSION}
    164 )
    165 install(TARGETS jxl_extras_codec
    166   RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    167   LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    168   ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    169 )