tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

jpegli.cmake (5919B)


      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    GTest::GTest
     92    GTest::Main
     93    ${JPEG_LIBRARIES}
     94  )
     95  set_target_properties(${TESTNAME} PROPERTIES LINK_FLAGS "${JPEGXL_COVERAGE_LINK_FLAGS}")
     96  # Output test targets in the test directory.
     97  set_target_properties(${TESTNAME} PROPERTIES PREFIX "tests/")
     98  if (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
     99    set_target_properties(${TESTNAME} PROPERTIES COMPILE_FLAGS "-Wno-error")
    100  endif ()
    101  # 240 seconds because some build types (e.g. coverage) can be quite slow.
    102  gtest_discover_tests(${TESTNAME} DISCOVERY_TIMEOUT 240)
    103 endforeach ()
    104 endif()
    105 
    106 #
    107 # Build libjpeg.so that links to libjpeg-static
    108 #
    109 
    110 if (JPEGXL_ENABLE_JPEGLI_LIBJPEG AND NOT APPLE AND NOT WIN32 AND NOT EMSCRIPTEN)
    111 add_library(jpegli-libjpeg-obj OBJECT "${JPEGXL_INTERNAL_JPEGLI_WRAPPER_SOURCES}")
    112 target_compile_options(jpegli-libjpeg-obj PRIVATE ${JPEGXL_INTERNAL_FLAGS})
    113 target_compile_options(jpegli-libjpeg-obj PUBLIC ${JPEGXL_COVERAGE_FLAGS})
    114 set_property(TARGET jpegli-libjpeg-obj PROPERTY POSITION_INDEPENDENT_CODE ON)
    115 target_include_directories(jpegli-libjpeg-obj PRIVATE
    116  "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>"
    117  "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include/jpegli>"
    118 )
    119 target_compile_definitions(jpegli-libjpeg-obj PUBLIC
    120  ${JPEGLI_LIBJPEG_OBJ_COMPILE_DEFINITIONS}
    121 )
    122 set(JPEGLI_LIBJPEG_INTERNAL_OBJECTS $<TARGET_OBJECTS:jpegli-libjpeg-obj>)
    123 
    124 file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/jpegli)
    125 add_library(jpeg SHARED ${JPEGLI_LIBJPEG_INTERNAL_OBJECTS})
    126 target_link_libraries(jpeg PUBLIC ${JPEGXL_COVERAGE_FLAGS})
    127 target_link_libraries(jpeg PRIVATE jpegli-static)
    128 set_target_properties(jpeg PROPERTIES
    129  VERSION ${JPEGLI_LIBJPEG_LIBRARY_VERSION}
    130  SOVERSION ${JPEGLI_LIBJPEG_LIBRARY_SOVERSION}
    131  LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/jpegli"
    132  RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/jpegli")
    133 
    134 # Add a jpeg.version file as a version script to tag symbols with the
    135 # appropriate version number.
    136 set_target_properties(jpeg PROPERTIES
    137  LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/jpegli/jpeg.version.${JPEGLI_LIBJPEG_LIBRARY_SOVERSION})
    138 set_property(TARGET jpeg APPEND_STRING PROPERTY
    139  LINK_FLAGS " -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/jpegli/jpeg.version.${JPEGLI_LIBJPEG_LIBRARY_SOVERSION}")
    140 
    141 if (JPEGXL_INSTALL_JPEGLI_LIBJPEG)
    142  install(TARGETS jpeg
    143    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    144    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    145    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
    146  install(
    147    DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include/jpegli/"
    148    DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
    149 endif()
    150 
    151 # This hides the default visibility symbols from static libraries bundled into
    152 # the shared library. In particular this prevents exposing symbols from hwy
    153 # in the shared library.
    154 if(LINKER_SUPPORT_EXCLUDE_LIBS)
    155  set_property(TARGET jpeg APPEND_STRING PROPERTY
    156    LINK_FLAGS " ${LINKER_EXCLUDE_LIBS_FLAG}")
    157 endif()
    158 endif()