Backed out 3 changesets (bug 1790375) for causing wd failures on fetch_error.py....
[gecko.git] / third_party / jpeg-xl / lib / jpegli.cmake
blobf06912f4387adf676ddc56971945e9dbc0189b73
1 # Copyright (c) the JPEG XL Project Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style
4 # license that can be found in the LICENSE file.
6 include(jxl_lists.cmake)
8 set(JPEGLI_INTERNAL_LIBS
9   hwy
10   Threads::Threads
11   ${ATOMICS_LIBRARIES}
14 # JPEGLIB setup
15 set(BITS_IN_JSAMPLE 8)
16 set(MEM_SRCDST_SUPPORTED 1)
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()
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)
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}"
43 target_include_directories(jpegli-static PUBLIC
44   "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include/jpegli>"
46 target_link_libraries(jpegli-static PUBLIC ${JPEGLI_INTERNAL_LIBS})
49 # Tests for jpegli-static
52 find_package(JPEG)
53 if(JPEG_FOUND AND BUILD_TESTING)
54 # TODO(eustas): merge into jxl_tests.cmake?
56 add_library(jpegli_libjpeg_util-obj OBJECT
57   ${JPEGXL_INTERNAL_JPEGLI_LIBJPEG_HELPER_FILES}
59 target_include_directories(jpegli_libjpeg_util-obj PRIVATE
60   "${PROJECT_SOURCE_DIR}"
61   "${JPEG_INCLUDE_DIRS}"
63 target_compile_options(jpegli_libjpeg_util-obj PRIVATE
64   "${JPEGXL_INTERNAL_FLAGS}" "${JPEGXL_COVERAGE_FLAGS}")
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()
108 # Build libjpeg.so that links to libjpeg-static
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>"
120 target_compile_definitions(jpegli-libjpeg-obj PUBLIC
121   ${JPEGLI_LIBJPEG_OBJ_COMPILE_DEFINITIONS}
123 set(JPEGLI_LIBJPEG_INTERNAL_OBJECTS $<TARGET_OBJECTS:jpegli-libjpeg-obj>)
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")
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}")
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()
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()