libjxl

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

jpegli.cmake (5929B)


      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 set(JPEGLI_INTERNAL_LIBS
      9   hwy
     10   Threads::Threads
     11   ${ATOMICS_LIBRARIES}
     12 )
     13 
     14 # JPEGLIB setup
     15 set(BITS_IN_JSAMPLE 8)
     16 set(MEM_SRCDST_SUPPORTED 1)
     17 
     18 if(JPEGLI_LIBJPEG_LIBRARY_SOVERSION STREQUAL "62")
     19   set(JPEG_LIB_VERSION 62)
     20 elseif(JPEGLI_LIBJPEG_LIBRARY_SOVERSION STREQUAL "7")
     21   set(JPEG_LIB_VERSION 70)
     22 elseif(JPEGLI_LIBJPEG_LIBRARY_SOVERSION STREQUAL "8")
     23   set(JPEG_LIB_VERSION 80)
     24 endif()
     25 
     26 configure_file(
     27   ../third_party/libjpeg-turbo/jconfig.h.in include/jpegli/jconfig.h)
     28 configure_file(
     29   ../third_party/libjpeg-turbo/jpeglib.h include/jpegli/jpeglib.h COPYONLY)
     30 configure_file(
     31   ../third_party/libjpeg-turbo/jmorecfg.h include/jpegli/jmorecfg.h COPYONLY)
     32 
     33 add_library(jpegli-static STATIC EXCLUDE_FROM_ALL "${JPEGXL_INTERNAL_JPEGLI_SOURCES}")
     34 target_compile_options(jpegli-static PRIVATE "${JPEGXL_INTERNAL_FLAGS}")
     35 target_compile_options(jpegli-static PUBLIC ${JPEGXL_COVERAGE_FLAGS})
     36 set_property(TARGET jpegli-static PROPERTY POSITION_INDEPENDENT_CODE ON)
     37 target_include_directories(jpegli-static PRIVATE
     38   "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>"
     39   "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
     40   "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>"
     41   "${JXL_HWY_INCLUDE_DIRS}"
     42 )
     43 target_include_directories(jpegli-static PUBLIC
     44   "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include/jpegli>"
     45 )
     46 target_link_libraries(jpegli-static PUBLIC ${JPEGLI_INTERNAL_LIBS})
     47 
     48 #
     49 # Tests for jpegli-static
     50 #
     51 
     52 find_package(JPEG)
     53 if(JPEG_FOUND AND BUILD_TESTING)
     54 # TODO(eustas): merge into jxl_tests.cmake?
     55 
     56 add_library(jpegli_libjpeg_util-obj OBJECT
     57   ${JPEGXL_INTERNAL_JPEGLI_LIBJPEG_HELPER_FILES}
     58 )
     59 target_include_directories(jpegli_libjpeg_util-obj PRIVATE
     60   "${PROJECT_SOURCE_DIR}"
     61   "${JPEG_INCLUDE_DIRS}"
     62 )
     63 target_compile_options(jpegli_libjpeg_util-obj PRIVATE
     64   "${JPEGXL_INTERNAL_FLAGS}" "${JPEGXL_COVERAGE_FLAGS}")
     65 
     66 # Individual test binaries:
     67 file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/tests)
     68 foreach (TESTFILE IN LISTS JPEGXL_INTERNAL_JPEGLI_TESTS)
     69   # The TESTNAME is the name without the extension or directory.
     70   get_filename_component(TESTNAME ${TESTFILE} NAME_WE)
     71   add_executable(${TESTNAME} ${TESTFILE}
     72     $<TARGET_OBJECTS:jpegli_libjpeg_util-obj>
     73     ${JPEGXL_INTERNAL_JPEGLI_TESTLIB_FILES}
     74   )
     75   target_compile_options(${TESTNAME} PRIVATE
     76     ${JPEGXL_INTERNAL_FLAGS}
     77     # Add coverage flags to the test binary so code in the private headers of
     78     # the library is also instrumented when running tests that execute it.
     79     ${JPEGXL_COVERAGE_FLAGS}
     80   )
     81   target_compile_definitions(${TESTNAME} PRIVATE
     82     -DTEST_DATA_PATH="${JPEGXL_TEST_DATA_PATH}")
     83   target_include_directories(${TESTNAME} PRIVATE
     84     "${PROJECT_SOURCE_DIR}"
     85     "${CMAKE_CURRENT_SOURCE_DIR}/include"
     86     "${CMAKE_CURRENT_BINARY_DIR}/include"
     87   )
     88   target_link_libraries(${TESTNAME}
     89     hwy
     90     jpegli-static
     91     gmock
     92     GTest::GTest
     93     GTest::Main
     94     ${JPEG_LIBRARIES}
     95   )
     96   set_target_properties(${TESTNAME} PROPERTIES LINK_FLAGS "${JPEGXL_COVERAGE_LINK_FLAGS}")
     97   # Output test targets in the test directory.
     98   set_target_properties(${TESTNAME} PROPERTIES PREFIX "tests/")
     99   if (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
    100     set_target_properties(${TESTNAME} PROPERTIES COMPILE_FLAGS "-Wno-error")
    101   endif ()
    102   # 240 seconds because some build types (e.g. coverage) can be quite slow.
    103   gtest_discover_tests(${TESTNAME} DISCOVERY_TIMEOUT 240)
    104 endforeach ()
    105 endif()
    106 
    107 #
    108 # Build libjpeg.so that links to libjpeg-static
    109 #
    110 
    111 if (JPEGXL_ENABLE_JPEGLI_LIBJPEG AND NOT APPLE AND NOT WIN32 AND NOT EMSCRIPTEN)
    112 add_library(jpegli-libjpeg-obj OBJECT "${JPEGXL_INTERNAL_JPEGLI_WRAPPER_SOURCES}")
    113 target_compile_options(jpegli-libjpeg-obj PRIVATE ${JPEGXL_INTERNAL_FLAGS})
    114 target_compile_options(jpegli-libjpeg-obj PUBLIC ${JPEGXL_COVERAGE_FLAGS})
    115 set_property(TARGET jpegli-libjpeg-obj PROPERTY POSITION_INDEPENDENT_CODE ON)
    116 target_include_directories(jpegli-libjpeg-obj PRIVATE
    117   "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>"
    118   "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include/jpegli>"
    119 )
    120 target_compile_definitions(jpegli-libjpeg-obj PUBLIC
    121   ${JPEGLI_LIBJPEG_OBJ_COMPILE_DEFINITIONS}
    122 )
    123 set(JPEGLI_LIBJPEG_INTERNAL_OBJECTS $<TARGET_OBJECTS:jpegli-libjpeg-obj>)
    124 
    125 file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/jpegli)
    126 add_library(jpeg SHARED ${JPEGLI_LIBJPEG_INTERNAL_OBJECTS})
    127 target_link_libraries(jpeg PUBLIC ${JPEGXL_COVERAGE_FLAGS})
    128 target_link_libraries(jpeg PRIVATE jpegli-static)
    129 set_target_properties(jpeg PROPERTIES
    130   VERSION ${JPEGLI_LIBJPEG_LIBRARY_VERSION}
    131   SOVERSION ${JPEGLI_LIBJPEG_LIBRARY_SOVERSION}
    132   LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/jpegli"
    133   RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/jpegli")
    134 
    135 # Add a jpeg.version file as a version script to tag symbols with the
    136 # appropriate version number.
    137 set_target_properties(jpeg PROPERTIES
    138   LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/jpegli/jpeg.version.${JPEGLI_LIBJPEG_LIBRARY_SOVERSION})
    139 set_property(TARGET jpeg APPEND_STRING PROPERTY
    140   LINK_FLAGS " -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/jpegli/jpeg.version.${JPEGLI_LIBJPEG_LIBRARY_SOVERSION}")
    141 
    142 if (JPEGXL_INSTALL_JPEGLI_LIBJPEG)
    143   install(TARGETS jpeg
    144     RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    145     LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    146     ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
    147   install(
    148     DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include/jpegli/"
    149     DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
    150 endif()
    151 
    152 # This hides the default visibility symbols from static libraries bundled into
    153 # the shared library. In particular this prevents exposing symbols from hwy
    154 # in the shared library.
    155 if(LINKER_SUPPORT_EXCLUDE_LIBS)
    156   set_property(TARGET jpeg APPEND_STRING PROPERTY
    157     LINK_FLAGS " ${LINKER_EXCLUDE_LIBS_FLAG}")
    158 endif()
    159 endif()