1 cmake_minimum_required(VERSION 2.8.12)
2 # When using CMake 3.4 and later, don't export symbols from executables unless
3 # the CMAKE_ENABLE_EXPORTS variable is set.
5 cmake_policy(SET CMP0065 NEW)
8 if(CMAKE_EXECUTABLE_SUFFIX)
9 set(CMAKE_EXECUTABLE_SUFFIX_TMP ${CMAKE_EXECUTABLE_SUFFIX})
12 project(libjpeg-turbo C)
14 set(COPYRIGHT_YEAR "1991-2022")
15 string(REPLACE "." ";" VERSION_TRIPLET ${VERSION})
16 list(GET VERSION_TRIPLET 0 VERSION_MAJOR)
17 list(GET VERSION_TRIPLET 1 VERSION_MINOR)
18 list(GET VERSION_TRIPLET 2 VERSION_REVISION)
19 function(pad_number NUMBER OUTPUT_LEN)
20 string(LENGTH "${${NUMBER}}" INPUT_LEN)
21 if(INPUT_LEN LESS OUTPUT_LEN)
22 math(EXPR ZEROES "${OUTPUT_LEN} - ${INPUT_LEN} - 1")
24 foreach(C RANGE ${ZEROES})
27 set(${NUMBER} ${NUM} PARENT_SCOPE)
30 pad_number(VERSION_MINOR 3)
31 pad_number(VERSION_REVISION 3)
32 set(LIBJPEG_TURBO_VERSION_NUMBER ${VERSION_MAJOR}${VERSION_MINOR}${VERSION_REVISION})
34 # CMake 3.14 and later sets CMAKE_MACOSX_BUNDLE to TRUE by default when
35 # CMAKE_SYSTEM_NAME is iOS, tvOS, or watchOS, which breaks the libjpeg-turbo
36 # build. (Specifically, when CMAKE_MACOSX_BUNDLE is TRUE, executables for
37 # Apple platforms are built as application bundles, which causes CMake to
38 # complain that our install() directives for executables do not specify a
39 # BUNDLE DESTINATION. Even if CMake did not complain, building executables as
40 # application bundles would break our iOS packages.)
41 set(CMAKE_MACOSX_BUNDLE FALSE)
43 string(TIMESTAMP DEFAULT_BUILD "%Y%m%d")
44 set(BUILD ${DEFAULT_BUILD} CACHE STRING "Build string (default: ${DEFAULT_BUILD})")
46 # NOTE: On Windows, this does nothing except when using MinGW or Cygwin.
47 # CMAKE_BUILD_TYPE has no meaning in Visual Studio, and it always defaults to
48 # Debug when using NMake.
49 if(NOT CMAKE_BUILD_TYPE)
50 set(CMAKE_BUILD_TYPE Release)
52 message(STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
54 message(STATUS "VERSION = ${VERSION}, BUILD = ${BUILD}")
56 include(cmakescripts/PackageInfo.cmake)
58 # Detect CPU type and whether we're building 64-bit or 32-bit code
59 math(EXPR BITS "${CMAKE_SIZEOF_VOID_P} * 8")
60 string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} CMAKE_SYSTEM_PROCESSOR_LC)
62 foreach(ARCH ${CMAKE_OSX_ARCHITECTURES})
64 message(FATAL_ERROR "The libjpeg-turbo build system does not support multiple values in CMAKE_OSX_ARCHITECTURES.")
66 math(EXPR COUNT "${COUNT}+1")
68 if(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "x86_64" OR
69 CMAKE_SYSTEM_PROCESSOR_LC MATCHES "amd64" OR
70 CMAKE_SYSTEM_PROCESSOR_LC MATCHES "i[0-9]86" OR
71 CMAKE_SYSTEM_PROCESSOR_LC MATCHES "x86" OR
72 CMAKE_SYSTEM_PROCESSOR_LC MATCHES "ia32")
73 if(BITS EQUAL 64 OR CMAKE_C_COMPILER_ABI MATCHES "ELF X32")
78 if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL ${CPU_TYPE})
79 set(CMAKE_SYSTEM_PROCESSOR ${CPU_TYPE})
81 elseif(CMAKE_SYSTEM_PROCESSOR_LC STREQUAL "aarch64" OR
82 CMAKE_SYSTEM_PROCESSOR_LC MATCHES "^arm")
88 elseif(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "^ppc" OR
89 CMAKE_SYSTEM_PROCESSOR_LC MATCHES "^powerpc")
92 set(CPU_TYPE ${CMAKE_SYSTEM_PROCESSOR_LC})
94 if(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" OR
95 CMAKE_OSX_ARCHITECTURES MATCHES "arm64" OR
96 CMAKE_OSX_ARCHITECTURES MATCHES "i386")
97 set(CPU_TYPE ${CMAKE_OSX_ARCHITECTURES})
99 if(CMAKE_OSX_ARCHITECTURES MATCHES "ppc")
100 set(CPU_TYPE powerpc)
102 if(MSVC_IDE AND CMAKE_GENERATOR_PLATFORM MATCHES "arm64")
106 message(STATUS "${BITS}-bit build (${CPU_TYPE})")
109 ###############################################################################
110 # INSTALL DIRECTORIES
111 ###############################################################################
115 set(CMAKE_INSTALL_DEFAULT_PREFIX "c:/${CMAKE_PROJECT_NAME}")
117 set(CMAKE_INSTALL_DEFAULT_PREFIX "c:/${CMAKE_PROJECT_NAME}-gcc")
120 set(CMAKE_INSTALL_DEFAULT_PREFIX "${CMAKE_INSTALL_DEFAULT_PREFIX}64")
123 if(NOT CMAKE_INSTALL_DEFAULT_PREFIX)
124 set(CMAKE_INSTALL_DEFAULT_PREFIX /opt/${CMAKE_PROJECT_NAME})
127 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
128 set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_DEFAULT_PREFIX}" CACHE PATH
129 "Directory into which to install ${CMAKE_PROJECT_NAME} (default: ${CMAKE_INSTALL_DEFAULT_PREFIX})"
132 message(STATUS "CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}")
134 # When the prefix is /opt/${CMAKE_PROJECT_NAME}, we assume that an "official"
135 # build is being created, and thus we install things into specific locations.
137 if(CMAKE_INSTALL_PREFIX STREQUAL "${CMAKE_INSTALL_DEFAULT_PREFIX}")
138 set(CMAKE_INSTALL_DEFAULT_DATAROOTDIR "")
139 set(CMAKE_INSTALL_DEFAULT_DOCDIR "<CMAKE_INSTALL_DATAROOTDIR>/doc")
140 set(CMAKE_INSTALL_DEFAULT_JAVADIR "<CMAKE_INSTALL_DATAROOTDIR>/classes")
141 if(UNIX AND NOT APPLE)
143 set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib64")
144 elseif(CMAKE_C_COMPILER_ABI MATCHES "ELF X32")
145 set(CMAKE_INSTALL_DEFAULT_LIBDIR "libx32")
147 set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib32")
152 include(cmakescripts/GNUInstallDirs.cmake)
154 macro(report_directory var)
155 if(CMAKE_INSTALL_${var} STREQUAL CMAKE_INSTALL_FULL_${var})
156 message(STATUS "CMAKE_INSTALL_${var} = ${CMAKE_INSTALL_${var}}")
158 message(STATUS "CMAKE_INSTALL_${var} = ${CMAKE_INSTALL_${var}} (${CMAKE_INSTALL_FULL_${var}})")
160 mark_as_advanced(CLEAR CMAKE_INSTALL_${var})
163 set(DIRLIST "BINDIR;DATAROOTDIR;DOCDIR;INCLUDEDIR;LIBDIR")
165 list(APPEND DIRLIST "MANDIR")
167 foreach(dir ${DIRLIST})
168 report_directory(${dir})
172 ###############################################################################
173 # CONFIGURATION OPTIONS
174 ###############################################################################
176 macro(boolean_number var)
178 set(${var} 1 ${ARGN})
180 set(${var} 0 ${ARGN})
184 option(ENABLE_SHARED "Build shared libraries" TRUE)
185 boolean_number(ENABLE_SHARED)
186 option(ENABLE_STATIC "Build static libraries" TRUE)
187 boolean_number(ENABLE_STATIC)
188 option(REQUIRE_SIMD "Generate a fatal error if SIMD extensions are not available for this platform (default is to fall back to a non-SIMD build)" FALSE)
189 boolean_number(REQUIRE_SIMD)
190 option(WITH_12BIT "Encode/decode JPEG images with 12-bit samples (implies WITH_ARITH_DEC=0 WITH_ARITH_ENC=0 WITH_JAVA=0 WITH_SIMD=0 WITH_TURBOJPEG=0 )" FALSE)
191 boolean_number(WITH_12BIT)
192 option(WITH_ARITH_DEC "Include arithmetic decoding support when emulating the libjpeg v6b API/ABI" TRUE)
193 boolean_number(WITH_ARITH_DEC)
194 option(WITH_ARITH_ENC "Include arithmetic encoding support when emulating the libjpeg v6b API/ABI" TRUE)
195 boolean_number(WITH_ARITH_ENC)
196 if(CMAKE_C_COMPILER_ABI MATCHES "ELF X32")
199 option(WITH_JAVA "Build Java wrapper for the TurboJPEG API library (implies ENABLE_SHARED=1)" FALSE)
200 boolean_number(WITH_JAVA)
202 option(WITH_JPEG7 "Emulate libjpeg v7 API/ABI (this makes ${CMAKE_PROJECT_NAME} backward-incompatible with libjpeg v6b)" FALSE)
203 boolean_number(WITH_JPEG7)
204 option(WITH_JPEG8 "Emulate libjpeg v8 API/ABI (this makes ${CMAKE_PROJECT_NAME} backward-incompatible with libjpeg v6b)" FALSE)
205 boolean_number(WITH_JPEG8)
206 option(WITH_MEM_SRCDST "Include in-memory source/destination manager functions when emulating the libjpeg v6b or v7 API/ABI" TRUE)
207 boolean_number(WITH_MEM_SRCDST)
208 option(WITH_SIMD "Include SIMD extensions, if available for this platform" TRUE)
209 boolean_number(WITH_SIMD)
210 option(WITH_TURBOJPEG "Include the TurboJPEG API library and associated test programs" TRUE)
211 boolean_number(WITH_TURBOJPEG)
212 option(WITH_FUZZ "Build fuzz targets" FALSE)
214 macro(report_option var desc)
216 message(STATUS "${desc} enabled (${var} = ${${var}})")
218 message(STATUS "${desc} disabled (${var} = ${${var}})")
226 # Explicitly setting CMAKE_POSITION_INDEPENDENT_CODE=FALSE disables PIC for all
227 # targets, which will cause the shared library builds to fail. Thus, if shared
228 # libraries are enabled and CMAKE_POSITION_INDEPENDENT_CODE is explicitly set
229 # to FALSE, we need to unset it, thus restoring the default behavior
230 # (automatically using PIC for shared library targets.)
231 if(DEFINED CMAKE_POSITION_INDEPENDENT_CODE AND
232 NOT CMAKE_POSITION_INDEPENDENT_CODE AND ENABLE_SHARED)
233 unset(CMAKE_POSITION_INDEPENDENT_CODE CACHE)
236 report_option(ENABLE_SHARED "Shared libraries")
237 report_option(ENABLE_STATIC "Static libraries")
240 set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR})
243 if(WITH_JPEG8 OR WITH_JPEG7)
244 set(WITH_ARITH_ENC 1)
245 set(WITH_ARITH_DEC 1)
248 set(WITH_MEM_SRCDST 0)
252 set(WITH_ARITH_DEC 0)
253 set(WITH_ARITH_ENC 0)
256 set(WITH_TURBOJPEG 0)
257 set(BITS_IN_JSAMPLE 12)
259 set(BITS_IN_JSAMPLE 8)
261 report_option(WITH_12BIT "12-bit JPEG support")
264 set(D_ARITH_CODING_SUPPORTED 1)
267 report_option(WITH_ARITH_DEC "Arithmetic decoding support")
271 set(C_ARITH_CODING_SUPPORTED 1)
274 report_option(WITH_ARITH_ENC "Arithmetic encoding support")
278 report_option(WITH_TURBOJPEG "TurboJPEG API library")
279 report_option(WITH_JAVA "TurboJPEG Java wrapper")
283 set(MEM_SRCDST_SUPPORTED 1)
284 set(MEM_SRCDST_FUNCTIONS "global: jpeg_mem_dest; jpeg_mem_src;")
287 report_option(WITH_MEM_SRCDST "In-memory source/destination managers")
296 set(JPEG_LIB_VERSION 80)
298 set(JPEG_LIB_VERSION 70)
300 set(JPEG_LIB_VERSION 62)
303 math(EXPR JPEG_LIB_VERSION_DIV10 "${JPEG_LIB_VERSION} / 10")
304 math(EXPR JPEG_LIB_VERSION_MOD10 "${JPEG_LIB_VERSION} % 10")
305 if(JPEG_LIB_VERSION STREQUAL "62")
306 set(DEFAULT_SO_MAJOR_VERSION ${JPEG_LIB_VERSION})
308 set(DEFAULT_SO_MAJOR_VERSION ${JPEG_LIB_VERSION_DIV10})
310 if(JPEG_LIB_VERSION STREQUAL "80")
311 set(DEFAULT_SO_MINOR_VERSION 2)
313 set(DEFAULT_SO_MINOR_VERSION 0)
316 # This causes SO_MAJOR_VERSION/SO_MINOR_VERSION to reset to defaults if
317 # WITH_JPEG7 or WITH_JPEG8 has changed.
318 if((DEFINED WITH_JPEG7_INT AND NOT WITH_JPEG7 EQUAL WITH_JPEG7_INT) OR
319 (DEFINED WITH_JPEG8_INT AND NOT WITH_JPEG8 EQUAL WITH_JPEG8_INT))
320 set(FORCE_SO_VERSION "FORCE")
322 set(WITH_JPEG7_INT ${WITH_JPEG7} CACHE INTERNAL "")
323 set(WITH_JPEG8_INT ${WITH_JPEG8} CACHE INTERNAL "")
325 set(SO_MAJOR_VERSION ${DEFAULT_SO_MAJOR_VERSION} CACHE STRING
326 "Major version of the libjpeg API shared library (default: ${DEFAULT_SO_MAJOR_VERSION})"
328 set(SO_MINOR_VERSION ${DEFAULT_SO_MINOR_VERSION} CACHE STRING
329 "Minor version of the libjpeg API shared library (default: ${DEFAULT_SO_MINOR_VERSION})"
332 set(JPEG_LIB_VERSION_DECIMAL "${JPEG_LIB_VERSION_DIV10}.${JPEG_LIB_VERSION_MOD10}")
333 message(STATUS "Emulating libjpeg API/ABI v${JPEG_LIB_VERSION_DECIMAL} (WITH_JPEG7 = ${WITH_JPEG7}, WITH_JPEG8 = ${WITH_JPEG8})")
334 message(STATUS "libjpeg API shared library version = ${SO_MAJOR_VERSION}.${SO_AGE}.${SO_MINOR_VERSION}")
336 # Because the TurboJPEG API library uses versioned symbols and changes the
337 # names of functions whenever they are modified in a backward-incompatible
338 # manner, it is always backward-ABI-compatible with itself, so the major and
339 # minor SO versions don't change. However, we increase the middle number (the
340 # SO "age") whenever functions are added to the API.
341 set(TURBOJPEG_SO_MAJOR_VERSION 0)
342 set(TURBOJPEG_SO_AGE 2)
343 set(TURBOJPEG_SO_VERSION 0.${TURBOJPEG_SO_AGE}.0)
346 ###############################################################################
348 ###############################################################################
352 "Link all ${CMAKE_PROJECT_NAME} libraries and executables with the C run-time DLL (msvcr*.dll) instead of the static C run-time library (libcmt*.lib.) The default is to use the C run-time DLL only with the libraries and executables that need it."
355 # Use the static C library for all build types
356 foreach(var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
357 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
358 if(${var} MATCHES "/MD")
359 string(REGEX REPLACE "/MD" "/MT" ${var} "${${var}}")
363 add_definitions(-D_CRT_NONSTDC_NO_WARNINGS)
366 if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
367 # Use the maximum optimization level for release builds
368 foreach(var CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO)
369 if(${var} MATCHES "-O2")
370 string(REGEX REPLACE "-O2" "-O3" ${var} "${${var}}")
375 if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
376 if(CMAKE_C_COMPILER_ID MATCHES "SunPro")
377 # Use the maximum optimization level for release builds
378 foreach(var CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO)
379 if(${var} MATCHES "-xO3")
380 string(REGEX REPLACE "-xO3" "-xO5" ${var} "${${var}}")
382 if(${var} MATCHES "-xO2")
383 string(REGEX REPLACE "-xO2" "-xO5" ${var} "${${var}}")
389 string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UC)
391 set(EFFECTIVE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UC}}")
392 message(STATUS "Compiler flags = ${EFFECTIVE_C_FLAGS}")
394 set(EFFECTIVE_LD_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE_UC}}")
395 message(STATUS "Linker flags = ${EFFECTIVE_LD_FLAGS}")
397 include(CheckCSourceCompiles)
398 include(CheckIncludeFiles)
399 include(CheckTypeSize)
401 check_type_size("size_t" SIZE_T)
402 check_type_size("unsigned long" UNSIGNED_LONG)
404 if(SIZE_T EQUAL UNSIGNED_LONG)
405 check_c_source_compiles("int main(int argc, char **argv) { unsigned long a = argc; return __builtin_ctzl(a); }"
409 check_include_files("intrin.h" HAVE_INTRIN_H)
413 if(CMAKE_CROSSCOMPILING)
414 set(RIGHT_SHIFT_IS_UNSIGNED 0)
416 include(CheckCSourceRuns)
417 check_c_source_runs("
420 int is_shifting_signed (long arg) {
422 if (res == -0x7F7E80CL)
423 return 1; /* right shift is signed */
424 /* see if unsigned-shift hack will fix it. */
425 /* we can't just test exact value since it depends on width of long... */
426 res |= (~0L) << (32-4);
427 if (res == -0x7F7E80CL)
428 return 0; /* right shift is unsigned */
429 printf(\"Right shift isn't acting as I expect it to.\\\\n\");
430 printf(\"I fear the JPEG software will not work at all.\\\\n\\\\n\");
431 return 0; /* try it with unsigned anyway */
434 exit(is_shifting_signed(-0x7F7E80B1L));
435 }" RIGHT_SHIFT_IS_UNSIGNED)
440 set(INLINE_OPTIONS "__inline;inline")
442 set(INLINE_OPTIONS "__inline__;inline")
444 option(FORCE_INLINE "Force function inlining" TRUE)
445 boolean_number(FORCE_INLINE)
448 list(INSERT INLINE_OPTIONS 0 "__forceinline")
450 list(INSERT INLINE_OPTIONS 0 "inline __attribute__((always_inline))")
451 list(INSERT INLINE_OPTIONS 0 "__inline__ __attribute__((always_inline))")
454 foreach(inline ${INLINE_OPTIONS})
455 check_c_source_compiles("${inline} static int foo(void) { return 0; } int main(void) { return foo(); }"
458 set(INLINE ${inline})
463 message(FATAL_ERROR "Could not determine how to inline functions.")
465 message(STATUS "INLINE = ${INLINE} (FORCE_INLINE = ${FORCE_INLINE})")
469 set(THREAD_LOCAL "__declspec(thread)")
471 set(THREAD_LOCAL "__thread")
473 check_c_source_compiles("${THREAD_LOCAL} int i; int main(void) { i = 0; return i; }" HAVE_THREAD_LOCAL)
474 if(HAVE_THREAD_LOCAL)
475 message(STATUS "THREAD_LOCAL = ${THREAD_LOCAL}")
477 message(WARNING "Thread-local storage is not available. The TurboJPEG API library's global error handler will not be thread-safe.")
482 if(UNIX AND NOT APPLE)
483 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map "VERS_1 { global: *; };")
484 set(CMAKE_REQUIRED_FLAGS
485 "-Wl,--version-script,${CMAKE_CURRENT_BINARY_DIR}/conftest.map")
486 check_c_source_compiles("int main(void) { return 0; }" HAVE_VERSION_SCRIPT)
487 set(CMAKE_REQUIRED_FLAGS)
488 file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map)
489 if(HAVE_VERSION_SCRIPT)
490 message(STATUS "Linker supports GNU-style version scripts")
491 set(MAPFLAG "-Wl,--version-script,")
492 set(TJMAPFLAG "-Wl,--version-script,")
494 message(STATUS "Linker does not support GNU-style version scripts")
495 if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
496 # The Solaris linker doesn't like our version script for the libjpeg API
497 # library, but the version script for the TurboJPEG API library should
499 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map
500 "VERS_1 { global: foo; local: *; }; VERS_2 { global: foo2; } VERS_1;")
501 set(CMAKE_REQUIRED_FLAGS "-Wl,-M,${CMAKE_CURRENT_BINARY_DIR}/conftest.map -shared")
502 check_c_source_compiles("int foo() { return 0; } int foo2() { return 2; }"
504 set(CMAKE_REQUIRED_FLAGS)
505 file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map)
507 message(STATUS "Linker supports mapfiles")
508 set(TJMAPFLAG "-Wl,-M,")
510 message(STATUS "Linker does not support mapfiles")
518 configure_file(win/jconfig.h.in jconfig.h)
520 configure_file(jconfig.h.in jconfig.h)
522 configure_file(jconfigint.h.in jconfigint.h)
523 configure_file(jversion.h.in jversion.h)
525 configure_file(libjpeg.map.in libjpeg.map)
528 # Include directories and compiler definitions
529 include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
532 ###############################################################################
534 ###############################################################################
536 if(CMAKE_EXECUTABLE_SUFFIX_TMP)
537 set(CMAKE_EXECUTABLE_SUFFIX ${CMAKE_EXECUTABLE_SUFFIX_TMP})
539 message(STATUS "CMAKE_EXECUTABLE_SUFFIX = ${CMAKE_EXECUTABLE_SUFFIX}")
541 set(JPEG_SOURCES jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c
542 jcicc.c jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c
543 jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c jdatadst.c
544 jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c jdicc.c jdinput.c
545 jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c jdpostct.c jdsample.c
546 jdtrans.c jerror.c jfdctflt.c jfdctfst.c jfdctint.c jidctflt.c jidctfst.c
547 jidctint.c jidctred.c jquant1.c jquant2.c jutils.c jmemmgr.c jmemnobs.c)
549 if(WITH_ARITH_ENC OR WITH_ARITH_DEC)
550 set(JPEG_SOURCES ${JPEG_SOURCES} jaricom.c)
554 set(JPEG_SOURCES ${JPEG_SOURCES} jcarith.c)
558 set(JPEG_SOURCES ${JPEG_SOURCES} jdarith.c)
562 add_subdirectory(simd)
564 add_definitions(-DNEON_INTRINSICS)
566 elseif(NOT WITH_12BIT)
567 message(STATUS "SIMD extensions: None (WITH_SIMD = ${WITH_SIMD})")
570 message(STATUS "SIMD extensions: ${CPU_TYPE} (WITH_SIMD = ${WITH_SIMD})")
571 if(MSVC_IDE OR XCODE)
572 set_source_files_properties(${SIMD_OBJS} PROPERTIES GENERATED 1)
575 add_library(simd OBJECT jsimd_none.c)
576 if(NOT WIN32 AND (CMAKE_POSITION_INDEPENDENT_CODE OR ENABLE_SHARED))
577 set_target_properties(simd PROPERTIES POSITION_INDEPENDENT_CODE 1)
582 add_subdirectory(java)
586 add_subdirectory(sharedlib)
590 add_library(jpeg-static STATIC ${JPEG_SOURCES} $<TARGET_OBJECTS:simd>
593 set_target_properties(jpeg-static PROPERTIES OUTPUT_NAME jpeg)
599 set(TURBOJPEG_SOURCES ${JPEG_SOURCES} $<TARGET_OBJECTS:simd> ${SIMD_OBJS}
600 turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c rdbmp.c rdppm.c
602 set(TJMAPFILE ${CMAKE_CURRENT_SOURCE_DIR}/turbojpeg-mapfile)
604 set(TURBOJPEG_SOURCES ${TURBOJPEG_SOURCES} turbojpeg-jni.c)
605 include_directories(${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
606 set(TJMAPFILE ${CMAKE_CURRENT_SOURCE_DIR}/turbojpeg-mapfile.jni)
609 configure_file(${CMAKE_SOURCE_DIR}/win/turbojpeg.rc.in
610 ${CMAKE_BINARY_DIR}/win/turbojpeg.rc)
611 set(TURBOJPEG_SOURCES ${TURBOJPEG_SOURCES}
612 ${CMAKE_BINARY_DIR}/win/turbojpeg.rc)
614 add_library(turbojpeg SHARED ${TURBOJPEG_SOURCES})
615 set_property(TARGET turbojpeg PROPERTY COMPILE_FLAGS
616 "-DBMP_SUPPORTED -DPPM_SUPPORTED")
618 set_target_properties(turbojpeg PROPERTIES DEFINE_SYMBOL DLLDEFINE)
621 set_target_properties(turbojpeg PROPERTIES LINK_FLAGS -Wl,--kill-at)
623 if(APPLE AND (NOT CMAKE_OSX_DEPLOYMENT_TARGET OR
624 CMAKE_OSX_DEPLOYMENT_TARGET VERSION_GREATER 10.4))
625 if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG)
626 set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
628 set_target_properties(turbojpeg PROPERTIES MACOSX_RPATH 1)
630 set_target_properties(turbojpeg PROPERTIES
631 SOVERSION ${TURBOJPEG_SO_MAJOR_VERSION} VERSION ${TURBOJPEG_SO_VERSION})
633 set_target_properties(turbojpeg PROPERTIES
634 LINK_FLAGS "${TJMAPFLAG}${TJMAPFILE}")
637 add_executable(tjunittest tjunittest.c tjutil.c md5/md5.c md5/md5hl.c)
638 target_link_libraries(tjunittest turbojpeg)
640 add_executable(tjbench tjbench.c tjutil.c)
641 target_link_libraries(tjbench turbojpeg)
643 target_link_libraries(tjbench m)
646 add_executable(tjexample tjexample.c)
647 target_link_libraries(tjexample turbojpeg)
651 add_library(turbojpeg-static STATIC ${JPEG_SOURCES} $<TARGET_OBJECTS:simd>
652 ${SIMD_OBJS} turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c rdbmp.c
653 rdppm.c wrbmp.c wrppm.c)
654 set_property(TARGET turbojpeg-static PROPERTY COMPILE_FLAGS
655 "-DBMP_SUPPORTED -DPPM_SUPPORTED")
657 set_target_properties(turbojpeg-static PROPERTIES OUTPUT_NAME turbojpeg)
660 add_executable(tjunittest-static tjunittest.c tjutil.c md5/md5.c
662 target_link_libraries(tjunittest-static turbojpeg-static)
664 add_executable(tjbench-static tjbench.c tjutil.c)
665 target_link_libraries(tjbench-static turbojpeg-static)
667 target_link_libraries(tjbench-static m)
673 set(USE_SETMODE "-DUSE_SETMODE")
676 set(COMPILE_FLAGS "-DGIF_SUPPORTED -DPPM_SUPPORTED ${USE_SETMODE}")
678 set(COMPILE_FLAGS "-DBMP_SUPPORTED -DGIF_SUPPORTED -DPPM_SUPPORTED -DTARGA_SUPPORTED ${USE_SETMODE}")
679 set(CJPEG_BMP_SOURCES rdbmp.c rdtarga.c)
680 set(DJPEG_BMP_SOURCES wrbmp.c wrtarga.c)
684 add_executable(cjpeg-static cjpeg.c cdjpeg.c rdgif.c rdppm.c rdswitch.c
685 ${CJPEG_BMP_SOURCES})
686 set_property(TARGET cjpeg-static PROPERTY COMPILE_FLAGS ${COMPILE_FLAGS})
687 target_link_libraries(cjpeg-static jpeg-static)
689 add_executable(djpeg-static djpeg.c cdjpeg.c rdcolmap.c rdswitch.c wrgif.c
690 wrppm.c ${DJPEG_BMP_SOURCES})
691 set_property(TARGET djpeg-static PROPERTY COMPILE_FLAGS ${COMPILE_FLAGS})
692 target_link_libraries(djpeg-static jpeg-static)
694 add_executable(jpegtran-static jpegtran.c cdjpeg.c rdswitch.c transupp.c)
695 target_link_libraries(jpegtran-static jpeg-static)
696 set_property(TARGET jpegtran-static PROPERTY COMPILE_FLAGS "${USE_SETMODE}")
699 add_executable(rdjpgcom rdjpgcom.c)
701 add_executable(wrjpgcom wrjpgcom.c)
704 ###############################################################################
706 ###############################################################################
709 add_subdirectory(fuzz)
712 add_executable(strtest strtest.c)
714 add_subdirectory(md5)
716 if(MSVC_IDE OR XCODE)
717 set(OBJDIR "\${CTEST_CONFIGURATION_TYPE}/")
725 set(TESTORIG testorig12.jpg)
726 set(MD5_JPEG_RGB_ISLOW 9d7369207c520d37f2c1cbfcb82b2964)
727 set(MD5_JPEG_RGB_ISLOW2 a00bd20d8ae49684640ef7177d2e0b64)
728 set(MD5_PPM_RGB_ISLOW f3301d2219783b8b3d942b7239fa50c0)
729 set(MD5_JPEG_422_IFAST_OPT 7322e3bd2f127f7de4b40d4480ce60e4)
730 set(MD5_PPM_422_IFAST 79807fa552899e66a04708f533e16950)
731 set(MD5_JPEG_440_ISLOW e25c1912e38367be505a89c410c1c2d2)
732 set(MD5_PPM_440_ISLOW e7d2e26288870cfcb30f3114ad01e380)
733 set(MD5_PPM_422M_IFAST 07737bfe8a7c1c87aaa393a0098d16b0)
734 set(MD5_JPEG_420_IFAST_Q100_PROG 9447cef4803d9b0f74bcf333cc710a29)
735 set(MD5_PPM_420_Q100_IFAST 1b3730122709f53d007255e8dfd3305e)
736 set(MD5_PPM_420M_Q100_IFAST 980a1a3c5bf9510022869d30b7d26566)
737 set(MD5_JPEG_GRAY_ISLOW 235c90707b16e2e069f37c888b2636d9)
738 set(MD5_PPM_GRAY_ISLOW 7213c10af507ad467da5578ca5ee1fca)
739 set(MD5_PPM_GRAY_ISLOW_RGB e96ee81c30a6ed422d466338bd3de65d)
740 set(MD5_JPEG_420S_IFAST_OPT 7af8e60be4d9c227ec63ac9b6630855e)
742 set(MD5_JPEG_3x2_FLOAT_PROG_SSE a8c17daf77b457725ec929e215b603f8)
743 set(MD5_PPM_3x2_FLOAT_SSE 42876ab9e5c2f76a87d08db5fbd57956)
744 set(MD5_JPEG_3x2_FLOAT_PROG_NO_FP_CONTRACT a8c17daf77b457725ec929e215b603f8)
745 set(MD5_PPM_3x2_FLOAT_NO_FP_CONTRACT ${MD5_PPM_3x2_FLOAT_SSE})
746 set(MD5_JPEG_3x2_FLOAT_PROG_FP_CONTRACT
747 ${MD5_JPEG_3x2_FLOAT_PROG_NO_FP_CONTRACT})
748 set(MD5_PPM_3x2_FLOAT_FP_CONTRACT ${MD5_PPM_3x2_FLOAT_SSE})
749 set(MD5_JPEG_3x2_FLOAT_PROG_387 bc6dbbefac2872f6b9d6c4a0ae60c3c0)
750 set(MD5_PPM_3x2_FLOAT_387 bcc5723c61560463ac60f772e742d092)
751 set(MD5_JPEG_3x2_FLOAT_PROG_MSVC e27840755870fa849872e58aa0cd1400)
752 set(MD5_PPM_3x2_FLOAT_MSVC 6c2880b83bb1aa41dfe330e7a9768690)
754 set(MD5_JPEG_3x2_IFAST_PROG 1396cc2b7185cfe943d408c9d305339e)
755 set(MD5_PPM_3x2_IFAST 3975985ef6eeb0a2cdc58daa651ccc00)
756 set(MD5_PPM_420M_ISLOW_2_1 4ca6be2a6f326ff9eaab63e70a8259c0)
757 set(MD5_PPM_420M_ISLOW_15_8 12aa9f9534c1b3d7ba047322226365eb)
758 set(MD5_PPM_420M_ISLOW_13_8 f7e22817c7b25e1393e4ec101e9d4e96)
759 set(MD5_PPM_420M_ISLOW_11_8 800a16f9f4dc9b293197bfe11be10a82)
760 set(MD5_PPM_420M_ISLOW_9_8 06b7a92a9bc69f4dc36ec40f1937d55c)
761 set(MD5_PPM_420M_ISLOW_7_8 3ec444a14a4ab4eab88ffc49c48eca43)
762 set(MD5_PPM_420M_ISLOW_3_4 3e726b7ea872445b19437d1c1d4f0d93)
763 set(MD5_PPM_420M_ISLOW_5_8 a8a771abdc94301d20ffac119b2caccd)
764 set(MD5_PPM_420M_ISLOW_1_2 b419124dd5568b085787234866102866)
765 set(MD5_PPM_420M_ISLOW_3_8 343d19015531b7bbe746124127244fa8)
766 set(MD5_PPM_420M_ISLOW_1_4 35fd59d866e44659edfa3c18db2a3edb)
767 set(MD5_PPM_420M_ISLOW_1_8 ccaed48ac0aedefda5d4abe4013f4ad7)
768 set(MD5_PPM_420_ISLOW_SKIP15_31 86664cd9dc956536409e44e244d20a97)
769 set(MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71 452a21656115a163029cfba5c04fa76a)
770 set(MD5_PPM_444_ISLOW_SKIP1_6 ef63901f71ef7a75cd78253fc0914f84)
771 set(MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13 15b173fb5872d9575572fbcc1b05956f)
772 set(MD5_JPEG_CROP cdb35ff4b4519392690ea040c56ea99c)
774 set(TESTORIG testorig.jpg)
775 set(MD5_JPEG_RGB_ISLOW 1d44a406f61da743b5fd31c0a9abdca3)
776 set(MD5_JPEG_RGB_ISLOW2 31d121e57b6c2934c890a7fc7763bcd4)
777 set(MD5_PPM_RGB_ISLOW 00a257f5393fef8821f2b88ac7421291)
778 set(MD5_BMP_RGB_ISLOW_565 f07d2e75073e4bb10f6c6f4d36e2e3be)
779 set(MD5_BMP_RGB_ISLOW_565D 4cfa0928ef3e6bb626d7728c924cfda4)
780 set(MD5_JPEG_422_IFAST_OPT 2540287b79d913f91665e660303ab2c8)
781 set(MD5_PPM_422_IFAST 35bd6b3f833bad23de82acea847129fa)
782 set(MD5_JPEG_440_ISLOW 538bc02bd4b4658fd85de6ece6cbeda6)
783 set(MD5_PPM_440_ISLOW 11e7eab7ef7ef3276934bb7e7b6bb377)
784 set(MD5_PPM_422M_IFAST 8dbc65323d62cca7c91ba02dd1cfa81d)
785 set(MD5_BMP_422M_IFAST_565 3294bd4d9a1f2b3d08ea6020d0db7065)
786 set(MD5_BMP_422M_IFAST_565D da98c9c7b6039511be4a79a878a9abc1)
787 set(MD5_JPEG_420_IFAST_Q100_PROG 0ba15f9dab81a703505f835f9dbbac6d)
788 set(MD5_PPM_420_Q100_IFAST 5a732542015c278ff43635e473a8a294)
789 set(MD5_PPM_420M_Q100_IFAST ff692ee9323a3b424894862557c092f1)
790 set(MD5_JPEG_GRAY_ISLOW 72b51f894b8f4a10b3ee3066770aa38d)
791 set(MD5_PPM_GRAY_ISLOW 8d3596c56eace32f205deccc229aa5ed)
792 set(MD5_PPM_GRAY_ISLOW_RGB 116424ac07b79e5e801f00508eab48ec)
793 set(MD5_BMP_GRAY_ISLOW_565 12f78118e56a2f48b966f792fedf23cc)
794 set(MD5_BMP_GRAY_ISLOW_565D bdbbd616441a24354c98553df5dc82db)
795 set(MD5_JPEG_420S_IFAST_OPT 388708217ac46273ca33086b22827ed8)
797 set(MD5_JPEG_3x2_FLOAT_PROG_SSE 343e3f8caf8af5986ebaf0bdc13b5c71)
798 set(MD5_PPM_3x2_FLOAT_SSE 1a75f36e5904d6fc3a85a43da9ad89bb)
799 set(MD5_JPEG_3x2_FLOAT_PROG_NO_FP_CONTRACT 9bca803d2042bd1eb03819e2bf92b3e5)
800 set(MD5_PPM_3x2_FLOAT_NO_FP_CONTRACT f6bfab038438ed8f5522fbd33595dcdc)
801 set(MD5_JPEG_3x2_FLOAT_PROG_FP_CONTRACT
802 ${MD5_JPEG_3x2_FLOAT_PROG_NO_FP_CONTRACT})
803 set(MD5_PPM_3x2_FLOAT_FP_CONTRACT 0e917a34193ef976b679a6b069b1be26)
804 set(MD5_JPEG_3x2_FLOAT_PROG_387 1657664a410e0822c924b54f6f65e6e9)
805 set(MD5_PPM_3x2_FLOAT_387 cb0a1f027f3d2917c902b5640214e025)
806 set(MD5_JPEG_3x2_FLOAT_PROG_MSVC 7999ce9cd0ee9b6c7043b7351ab7639d)
807 set(MD5_PPM_3x2_FLOAT_MSVC 28cdc448a6b75e97892f0e0f8d4b21f3)
809 set(MD5_JPEG_3x2_IFAST_PROG 1ee5d2c1a77f2da495f993c8c7cceca5)
810 set(MD5_PPM_3x2_IFAST fd283664b3b49127984af0a7f118fccd)
811 set(MD5_JPEG_420_ISLOW_ARI e986fb0a637a8d833d96e8a6d6d84ea1)
812 set(MD5_JPEG_444_ISLOW_PROGARI 0a8f1c8f66e113c3cf635df0a475a617)
813 set(MD5_PPM_420M_IFAST_ARI 57251da28a35b46eecb7177d82d10e0e)
814 set(MD5_JPEG_420_ISLOW 9a68f56bc76e466aa7e52f415d0f4a5f)
815 set(MD5_PPM_420M_ISLOW_2_1 9f9de8c0612f8d06869b960b05abf9c9)
816 set(MD5_PPM_420M_ISLOW_15_8 b6875bc070720b899566cc06459b63b7)
817 set(MD5_PPM_420M_ISLOW_13_8 bc3452573c8152f6ae552939ee19f82f)
818 set(MD5_PPM_420M_ISLOW_11_8 d8cc73c0aaacd4556569b59437ba00a5)
819 set(MD5_PPM_420M_ISLOW_9_8 d25e61bc7eac0002f5b393aa223747b6)
820 set(MD5_PPM_420M_ISLOW_7_8 ddb564b7c74a09494016d6cd7502a946)
821 set(MD5_PPM_420M_ISLOW_3_4 8ed8e68808c3fbc4ea764fc9d2968646)
822 set(MD5_PPM_420M_ISLOW_5_8 a3363274999da2366a024efae6d16c9b)
823 set(MD5_PPM_420M_ISLOW_1_2 e692a315cea26b988c8e8b29a5dbcd81)
824 set(MD5_PPM_420M_ISLOW_3_8 79eca9175652ced755155c90e785a996)
825 set(MD5_PPM_420M_ISLOW_1_4 79cd778f8bf1a117690052cacdd54eca)
826 set(MD5_PPM_420M_ISLOW_1_8 391b3d4aca640c8567d6f8745eb2142f)
827 set(MD5_BMP_420_ISLOW_256 4980185e3776e89bd931736e1cddeee6)
828 set(MD5_BMP_420_ISLOW_565 bf9d13e16c4923b92e1faa604d7922cb)
829 set(MD5_BMP_420_ISLOW_565D 6bde71526acc44bcff76f696df8638d2)
830 set(MD5_BMP_420M_ISLOW_565 8dc0185245353cfa32ad97027342216f)
831 set(MD5_BMP_420M_ISLOW_565D ce034037d212bc403330df6f915c161b)
832 set(MD5_PPM_420_ISLOW_SKIP15_31 c4c65c1e43d7275cd50328a61e6534f0)
833 set(MD5_PPM_420_ISLOW_ARI_SKIP16_139 087c6b123db16ac00cb88c5b590bb74a)
834 set(MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71 26eb36ccc7d1f0cb80cdabb0ac8b5d99)
835 set(MD5_PPM_420_ISLOW_ARI_CROP53x53_4_4 886c6775af22370257122f8b16207e6d)
836 set(MD5_PPM_444_ISLOW_SKIP1_6 5606f86874cf26b8fcee1117a0a436a6)
837 set(MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13 db87dc7ce26bcdc7a6b56239ce2b9d6c)
838 set(MD5_PPM_444_ISLOW_ARI_CROP37x37_0_0 cb57b32bd6d03e35432362f7bf184b6d)
839 set(MD5_JPEG_CROP b4197f377e621c4e9b1d20471432610d)
844 ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
845 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
847 add_test(TJUnitTest-yuv
848 ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
849 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
851 add_test(TJUnitTest-yuv-nopad
852 ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
853 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
854 TJUnitTest -yuv -noyuvpad)
855 add_test(TJUnitTest-bi
856 ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
857 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
859 add_test(TJUnitTest-bi-yuv
860 ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
861 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
863 add_test(TJUnitTest-bi-yuv-nopad
864 ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
865 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
866 TJUnitTest -bi -yuv -noyuvpad)
869 set(TEST_LIBTYPES "")
871 set(TEST_LIBTYPES ${TEST_LIBTYPES} shared)
874 set(TEST_LIBTYPES ${TEST_LIBTYPES} static)
877 set(TESTIMAGES ${CMAKE_CURRENT_SOURCE_DIR}/testimages)
878 set(MD5CMP ${CMAKE_CURRENT_BINARY_DIR}/md5/md5cmp)
879 if(CMAKE_CROSSCOMPILING)
880 file(RELATIVE_PATH TESTIMAGES ${CMAKE_CURRENT_BINARY_DIR} ${TESTIMAGES})
881 file(RELATIVE_PATH MD5CMP ${CMAKE_CURRENT_BINARY_DIR} ${MD5CMP})
884 # The output of the floating point DCT/IDCT algorithms differs depending on the
885 # type of floating point math used, so the FLOATTEST CMake variable must be
886 # set in order to tell the testing system which floating point results it
889 # sse = validate against the expected results from the libjpeg-turbo SSE SIMD
891 # no-fp-contract = validate against the expected results from the C code when
892 # floating point expression contraction is disabled (the
893 # default with Clang, with GCC when building for platforms
894 # that lack fused multiply-add [FMA] instructions, or when
895 # passing -ffp-contract=off to the compiler)
896 # fp-contract = validate against the expected results from the C code when
897 # floating point expression contraction is enabled (the default
898 # with GCC when building for platforms that have fused multiply-
899 # add [FMA] instructions or when passing -ffp-contract=fast to
901 # 387 = validate against the expected results from the C code when the 387 FPU
902 # is being used for floating point math (which is generally the default
903 # with x86 compilers)
904 # msvc = validate against the expected results from the C code when compiled
905 # with a 32-bit version of Visual C++
907 if(CPU_TYPE STREQUAL "x86_64" OR CPU_TYPE STREQUAL "i386")
909 set(DEFAULT_FLOATTEST sse)
910 elseif(CPU_TYPE STREQUAL "x86_64")
911 set(DEFAULT_FLOATTEST no-fp-contract)
912 # else we can't really set an intelligent default for i386. The appropriate
913 # value could be no-fp-contract, fp-contract, 387, or msvc, depending on the
914 # compiler and compiler options. We leave it to the user to set FLOATTEST
918 if((CPU_TYPE STREQUAL "powerpc" OR CPU_TYPE STREQUAL "arm64") AND
919 NOT CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT MSVC)
920 set(DEFAULT_FLOATTEST fp-contract)
922 set(DEFAULT_FLOATTEST no-fp-contract)
926 # This causes FLOATTEST to reset to the default value if WITH_SIMD has
928 if(DEFINED WITH_SIMD_INT AND NOT WITH_SIMD EQUAL WITH_SIMD_INT)
929 set(FORCE_FLOATTEST "FORCE")
931 set(WITH_SIMD_INT ${WITH_SIMD} CACHE INTERNAL "")
932 set(FLOATTEST ${DEFAULT_FLOATTEST} CACHE STRING
933 "The type of floating point math used by the floating point DCT/IDCT algorithms. This tells the testing system which numerical results it should expect from those tests. [sse = libjpeg-turbo x86/x86-64 SIMD extensions, no-fp-contract = generic FPU with floating point expression contraction disabled, fp-contract = generic FPU with floating point expression contraction enabled, 387 = 387 FPU, msvc = 32-bit Visual Studio] (default = ${DEFAULT_FLOATTEST})"
935 message(STATUS "FLOATTEST = ${FLOATTEST}")
938 string(TOUPPER ${FLOATTEST} FLOATTEST_UC)
939 string(REGEX REPLACE "-" "_" FLOATTEST_UC ${FLOATTEST_UC})
940 string(TOLOWER ${FLOATTEST} FLOATTEST)
941 if(NOT FLOATTEST STREQUAL "sse" AND
942 NOT FLOATTEST STREQUAL "no-fp-contract" AND
943 NOT FLOATTEST STREQUAL "fp-contract" AND NOT FLOATTEST STREQUAL "387" AND
944 NOT FLOATTEST STREQUAL "msvc")
945 message(FATAL_ERROR "\"${FLOATTEST}\" is not a valid value for FLOATTEST.")
949 foreach(libtype ${TEST_LIBTYPES})
950 if(libtype STREQUAL "static")
954 add_test(tjunittest-${libtype}
955 ${CMAKE_CROSSCOMPILING_EMULATOR} tjunittest${suffix})
956 add_test(tjunittest-${libtype}-alloc
957 ${CMAKE_CROSSCOMPILING_EMULATOR} tjunittest${suffix} -alloc)
958 add_test(tjunittest-${libtype}-yuv
959 ${CMAKE_CROSSCOMPILING_EMULATOR} tjunittest${suffix} -yuv)
960 add_test(tjunittest-${libtype}-yuv-alloc
961 ${CMAKE_CROSSCOMPILING_EMULATOR} tjunittest${suffix} -yuv -alloc)
962 add_test(tjunittest-${libtype}-yuv-nopad
963 ${CMAKE_CROSSCOMPILING_EMULATOR} tjunittest${suffix} -yuv -noyuvpad)
964 add_test(tjunittest-${libtype}-bmp
965 ${CMAKE_CROSSCOMPILING_EMULATOR} tjunittest${suffix} -bmp)
967 set(MD5_PPM_GRAY_TILE 89d3ca21213d9d864b50b4e4e7de4ca6)
968 set(MD5_PPM_420_8x8_TILE 847fceab15c5b7b911cb986cf0f71de3)
969 set(MD5_PPM_420_16x16_TILE ca45552a93687e078f7137cc4126a7b0)
970 set(MD5_PPM_420_32x32_TILE d8676f1d6b68df358353bba9844f4a00)
971 set(MD5_PPM_420_64x64_TILE 4e4c1a3d7ea4bace4f868bcbe83b7050)
972 set(MD5_PPM_420_128x128_TILE f24c3429c52265832beab9df72a0ceae)
973 set(MD5_PPM_420M_8x8_TILE bc25320e1f4c31ce2e610e43e9fd173c)
974 set(MD5_PPM_420M_TILE 75ffdf14602258c5c189522af57fa605)
975 set(MD5_PPM_422_8x8_TILE d83dacd9fc73b0a6f10c09acad64eb1e)
976 set(MD5_PPM_422_16x16_TILE 35077fb610d72dd743b1eb0cbcfe10fb)
977 set(MD5_PPM_422_32x32_TILE e6902ed8a449ecc0f0d6f2bf945f65f7)
978 set(MD5_PPM_422_64x64_TILE 2b4502a8f316cedbde1da7bce3d2231e)
979 set(MD5_PPM_422_128x128_TILE f0b5617d578f5e13c8eee215d64d4877)
980 set(MD5_PPM_422M_8x8_TILE 828941d7f41cd6283abd6beffb7fd51d)
981 set(MD5_PPM_422M_TILE e877ae1324c4a280b95376f7f018172f)
982 set(MD5_PPM_444_TILE 7964e41e67cfb8d0a587c0aa4798f9c3)
984 # Test compressing from/decompressing to an arbitrary subregion of a larger
986 add_test(tjbench-${libtype}-tile-cp
987 ${CMAKE_COMMAND} -E copy_if_different ${TESTIMAGES}/testorig.ppm
989 add_test(tjbench-${libtype}-tile
990 ${CMAKE_CROSSCOMPILING_EMULATOR} tjbench${suffix} testout_tile.ppm 95
991 -rgb -quiet -tile -benchtime 0.01 -warmup 0)
992 set_tests_properties(tjbench-${libtype}-tile
993 PROPERTIES DEPENDS tjbench-${libtype}-tile-cp)
995 foreach(tile 8 16 32 64 128)
996 add_test(tjbench-${libtype}-tile-gray-${tile}x${tile}-cmp
997 ${CMAKE_CROSSCOMPILING_EMULATOR} ${MD5CMP} ${MD5_PPM_GRAY_TILE}
998 testout_tile_GRAY_Q95_${tile}x${tile}.ppm)
999 foreach(subsamp 420 422)
1000 add_test(tjbench-${libtype}-tile-${subsamp}-${tile}x${tile}-cmp
1001 ${CMAKE_CROSSCOMPILING_EMULATOR} ${MD5CMP}
1002 ${MD5_PPM_${subsamp}_${tile}x${tile}_TILE}
1003 testout_tile_${subsamp}_Q95_${tile}x${tile}.ppm)
1005 add_test(tjbench-${libtype}-tile-444-${tile}x${tile}-cmp
1006 ${CMAKE_CROSSCOMPILING_EMULATOR} ${MD5CMP} ${MD5_PPM_444_TILE}
1007 testout_tile_444_Q95_${tile}x${tile}.ppm)
1008 foreach(subsamp gray 420 422 444)
1009 set_tests_properties(tjbench-${libtype}-tile-${subsamp}-${tile}x${tile}-cmp
1010 PROPERTIES DEPENDS tjbench-${libtype}-tile)
1014 add_test(tjbench-${libtype}-tilem-cp
1015 ${CMAKE_COMMAND} -E copy_if_different ${TESTIMAGES}/testorig.ppm
1017 add_test(tjbench-${libtype}-tilem
1018 ${CMAKE_CROSSCOMPILING_EMULATOR} tjbench${suffix} testout_tilem.ppm 95
1019 -rgb -fastupsample -quiet -tile -benchtime 0.01 -warmup 0)
1020 set_tests_properties(tjbench-${libtype}-tilem
1021 PROPERTIES DEPENDS tjbench-${libtype}-tilem-cp)
1023 add_test(tjbench-${libtype}-tile-420m-8x8-cmp
1024 ${CMAKE_CROSSCOMPILING_EMULATOR} ${MD5CMP} ${MD5_PPM_420M_8x8_TILE}
1025 testout_tilem_420_Q95_8x8.ppm)
1026 add_test(tjbench-${libtype}-tile-422m-8x8-cmp
1027 ${CMAKE_CROSSCOMPILING_EMULATOR} ${MD5CMP} ${MD5_PPM_422M_8x8_TILE}
1028 testout_tilem_422_Q95_8x8.ppm)
1029 foreach(tile 16 32 64 128)
1030 foreach(subsamp 420 422)
1031 add_test(tjbench-${libtype}-tile-${subsamp}m-${tile}x${tile}-cmp
1032 ${CMAKE_CROSSCOMPILING_EMULATOR} ${MD5CMP}
1033 ${MD5_PPM_${subsamp}M_TILE}
1034 testout_tilem_${subsamp}_Q95_${tile}x${tile}.ppm)
1037 foreach(tile 8 16 32 64 128)
1038 foreach(subsamp 420 422)
1039 set_tests_properties(tjbench-${libtype}-tile-${subsamp}m-${tile}x${tile}-cmp
1040 PROPERTIES DEPENDS tjbench-${libtype}-tilem)
1045 # These tests are carefully crafted to provide full coverage of as many of
1046 # the underlying algorithms as possible (including all of the
1047 # SIMD-accelerated ones.)
1049 macro(add_bittest PROG NAME ARGS OUTFILE INFILE MD5SUM)
1050 add_test(${PROG}-${libtype}-${NAME}
1051 ${CMAKE_CROSSCOMPILING_EMULATOR} ${PROG}${suffix} ${ARGS}
1052 -outfile ${OUTFILE} ${INFILE})
1053 add_test(${PROG}-${libtype}-${NAME}-cmp
1054 ${CMAKE_CROSSCOMPILING_EMULATOR} ${MD5CMP} ${MD5SUM} ${OUTFILE})
1055 set_tests_properties(${PROG}-${libtype}-${NAME}-cmp PROPERTIES
1056 DEPENDS ${PROG}-${libtype}-${NAME})
1057 if(${ARGC} GREATER 6)
1058 set(DEPENDS ${ARGN})
1059 set_tests_properties(${PROG}-${libtype}-${NAME} PROPERTIES
1064 # CC: null SAMP: fullsize FDCT: islow ENT: huff
1065 add_bittest(cjpeg rgb-islow "-rgb;-dct;int;-icc;${TESTIMAGES}/test1.icc"
1066 testout_rgb_islow.jpg ${TESTIMAGES}/testorig.ppm
1067 ${MD5_JPEG_RGB_ISLOW})
1069 # CC: null SAMP: fullsize IDCT: islow ENT: huff
1070 add_bittest(djpeg rgb-islow "-dct;int;-ppm;-icc;testout_rgb_islow.icc"
1071 testout_rgb_islow.ppm testout_rgb_islow.jpg
1072 ${MD5_PPM_RGB_ISLOW} cjpeg-${libtype}-rgb-islow)
1074 add_test(djpeg-${libtype}-rgb-islow-icc-cmp
1075 ${CMAKE_CROSSCOMPILING_EMULATOR} ${MD5CMP}
1076 b06a39d730129122e85c1363ed1bbc9e testout_rgb_islow.icc)
1077 set_tests_properties(djpeg-${libtype}-rgb-islow-icc-cmp PROPERTIES
1078 DEPENDS djpeg-${libtype}-rgb-islow)
1080 add_bittest(jpegtran icc "-copy;all;-icc;${TESTIMAGES}/test2.icc"
1081 testout_rgb_islow2.jpg testout_rgb_islow.jpg
1082 ${MD5_JPEG_RGB_ISLOW2} cjpeg-${libtype}-rgb-islow)
1085 # CC: RGB->RGB565 SAMP: fullsize IDCT: islow ENT: huff
1086 add_bittest(djpeg rgb-islow-565 "-dct;int;-rgb565;-dither;none;-bmp"
1087 testout_rgb_islow_565.bmp testout_rgb_islow.jpg
1088 ${MD5_BMP_RGB_ISLOW_565} cjpeg-${libtype}-rgb-islow)
1090 # CC: RGB->RGB565 (dithered) SAMP: fullsize IDCT: islow ENT: huff
1091 add_bittest(djpeg rgb-islow-565D "-dct;int;-rgb565;-bmp"
1092 testout_rgb_islow_565D.bmp testout_rgb_islow.jpg
1093 ${MD5_BMP_RGB_ISLOW_565D} cjpeg-${libtype}-rgb-islow)
1096 # CC: RGB->YCC SAMP: fullsize/h2v1 FDCT: ifast ENT: 2-pass huff
1097 add_bittest(cjpeg 422-ifast-opt "-sample;2x1;-dct;fast;-opt"
1098 testout_422_ifast_opt.jpg ${TESTIMAGES}/testorig.ppm
1099 ${MD5_JPEG_422_IFAST_OPT})
1101 # CC: YCC->RGB SAMP: fullsize/h2v1 fancy IDCT: ifast ENT: huff
1102 add_bittest(djpeg 422-ifast "-dct;fast"
1103 testout_422_ifast.ppm testout_422_ifast_opt.jpg
1104 ${MD5_PPM_422_IFAST} cjpeg-${libtype}-422-ifast-opt)
1106 # CC: RGB->YCC SAMP: fullsize/h1v2 FDCT: islow ENT: huff
1107 add_bittest(cjpeg 440-islow "-sample;1x2;-dct;int"
1108 testout_440_islow.jpg ${TESTIMAGES}/testorig.ppm
1109 ${MD5_JPEG_440_ISLOW})
1111 # CC: YCC->RGB SAMP: fullsize/h1v2 fancy IDCT: islow ENT: huff
1112 add_bittest(djpeg 440-islow "-dct;int"
1113 testout_440_islow.ppm testout_440_islow.jpg
1114 ${MD5_PPM_440_ISLOW} cjpeg-${libtype}-440-islow)
1116 # CC: YCC->RGB SAMP: h2v1 merged IDCT: ifast ENT: huff
1117 add_bittest(djpeg 422m-ifast "-dct;fast;-nosmooth"
1118 testout_422m_ifast.ppm testout_422_ifast_opt.jpg
1119 ${MD5_PPM_422M_IFAST} cjpeg-${libtype}-422-ifast-opt)
1122 # CC: YCC->RGB565 SAMP: h2v1 merged IDCT: ifast ENT: huff
1123 add_bittest(djpeg 422m-ifast-565
1124 "-dct;int;-nosmooth;-rgb565;-dither;none;-bmp"
1125 testout_422m_ifast_565.bmp testout_422_ifast_opt.jpg
1126 ${MD5_BMP_422M_IFAST_565} cjpeg-${libtype}-422-ifast-opt)
1128 # CC: YCC->RGB565 (dithered) SAMP: h2v1 merged IDCT: ifast ENT: huff
1129 add_bittest(djpeg 422m-ifast-565D "-dct;int;-nosmooth;-rgb565;-bmp"
1130 testout_422m_ifast_565D.bmp testout_422_ifast_opt.jpg
1131 ${MD5_BMP_422M_IFAST_565D} cjpeg-${libtype}-422-ifast-opt)
1134 # CC: RGB->YCC SAMP: fullsize/h2v2 FDCT: ifast ENT: prog huff
1135 add_bittest(cjpeg 420-q100-ifast-prog
1136 "-sample;2x2;-quality;100;-dct;fast;-scans;${TESTIMAGES}/test.scan"
1137 testout_420_q100_ifast_prog.jpg ${TESTIMAGES}/testorig.ppm
1138 ${MD5_JPEG_420_IFAST_Q100_PROG})
1140 # CC: YCC->RGB SAMP: fullsize/h2v2 fancy IDCT: ifast ENT: prog huff
1141 add_bittest(djpeg 420-q100-ifast-prog "-dct;fast"
1142 testout_420_q100_ifast.ppm testout_420_q100_ifast_prog.jpg
1143 ${MD5_PPM_420_Q100_IFAST} cjpeg-${libtype}-420-q100-ifast-prog)
1145 # CC: YCC->RGB SAMP: h2v2 merged IDCT: ifast ENT: prog huff
1146 add_bittest(djpeg 420m-q100-ifast-prog "-dct;fast;-nosmooth"
1147 testout_420m_q100_ifast.ppm testout_420_q100_ifast_prog.jpg
1148 ${MD5_PPM_420M_Q100_IFAST} cjpeg-${libtype}-420-q100-ifast-prog)
1150 # CC: RGB->Gray SAMP: fullsize FDCT: islow ENT: huff
1151 add_bittest(cjpeg gray-islow "-gray;-dct;int"
1152 testout_gray_islow.jpg ${TESTIMAGES}/testorig.ppm
1153 ${MD5_JPEG_GRAY_ISLOW})
1155 # CC: Gray->Gray SAMP: fullsize IDCT: islow ENT: huff
1156 add_bittest(djpeg gray-islow "-dct;int"
1157 testout_gray_islow.ppm testout_gray_islow.jpg
1158 ${MD5_PPM_GRAY_ISLOW} cjpeg-${libtype}-gray-islow)
1160 # CC: Gray->RGB SAMP: fullsize IDCT: islow ENT: huff
1161 add_bittest(djpeg gray-islow-rgb "-dct;int;-rgb"
1162 testout_gray_islow_rgb.ppm testout_gray_islow.jpg
1163 ${MD5_PPM_GRAY_ISLOW_RGB} cjpeg-${libtype}-gray-islow)
1166 # CC: Gray->RGB565 SAMP: fullsize IDCT: islow ENT: huff
1167 add_bittest(djpeg gray-islow-565 "-dct;int;-rgb565;-dither;none;-bmp"
1168 testout_gray_islow_565.bmp testout_gray_islow.jpg
1169 ${MD5_BMP_GRAY_ISLOW_565} cjpeg-${libtype}-gray-islow)
1171 # CC: Gray->RGB565 (dithered) SAMP: fullsize IDCT: islow ENT: huff
1172 add_bittest(djpeg gray-islow-565D "-dct;int;-rgb565;-bmp"
1173 testout_gray_islow_565D.bmp testout_gray_islow.jpg
1174 ${MD5_BMP_GRAY_ISLOW_565D} cjpeg-${libtype}-gray-islow)
1177 # CC: RGB->YCC SAMP: fullsize smooth/h2v2 smooth FDCT: islow
1179 add_bittest(cjpeg 420s-ifast-opt "-sample;2x2;-smooth;1;-dct;int;-opt"
1180 testout_420s_ifast_opt.jpg ${TESTIMAGES}/testorig.ppm
1181 ${MD5_JPEG_420S_IFAST_OPT})
1184 # CC: RGB->YCC SAMP: fullsize/int FDCT: float ENT: prog huff
1185 add_bittest(cjpeg 3x2-float-prog "-sample;3x2;-dct;float;-prog"
1186 testout_3x2_float_prog.jpg ${TESTIMAGES}/testorig.ppm
1187 ${MD5_JPEG_3x2_FLOAT_PROG_${FLOATTEST_UC}})
1189 # CC: YCC->RGB SAMP: fullsize/int IDCT: float ENT: prog huff
1190 add_bittest(djpeg 3x2-float-prog "-dct;float"
1191 testout_3x2_float.ppm testout_3x2_float_prog.jpg
1192 ${MD5_PPM_3x2_FLOAT_${FLOATTEST_UC}} cjpeg-${libtype}-3x2-float-prog)
1195 # CC: RGB->YCC SAMP: fullsize/int FDCT: ifast ENT: prog huff
1196 add_bittest(cjpeg 3x2-ifast-prog "-sample;3x2;-dct;fast;-prog"
1197 testout_3x2_ifast_prog.jpg ${TESTIMAGES}/testorig.ppm
1198 ${MD5_JPEG_3x2_IFAST_PROG})
1200 # CC: YCC->RGB SAMP: fullsize/int IDCT: ifast ENT: prog huff
1201 add_bittest(djpeg 3x2-ifast-prog "-dct;fast"
1202 testout_3x2_ifast.ppm testout_3x2_ifast_prog.jpg
1203 ${MD5_PPM_3x2_IFAST} cjpeg-${libtype}-3x2-ifast-prog)
1206 # CC: YCC->RGB SAMP: fullsize/h2v2 FDCT: islow ENT: arith
1207 add_bittest(cjpeg 420-islow-ari "-dct;int;-arithmetic"
1208 testout_420_islow_ari.jpg ${TESTIMAGES}/testorig.ppm
1209 ${MD5_JPEG_420_ISLOW_ARI})
1211 add_bittest(jpegtran 420-islow-ari "-arithmetic"
1212 testout_420_islow_ari2.jpg ${TESTIMAGES}/testimgint.jpg
1213 ${MD5_JPEG_420_ISLOW_ARI})
1215 # CC: YCC->RGB SAMP: fullsize FDCT: islow ENT: prog arith
1216 add_bittest(cjpeg 444-islow-progari
1217 "-sample;1x1;-dct;int;-prog;-arithmetic"
1218 testout_444_islow_progari.jpg ${TESTIMAGES}/testorig.ppm
1219 ${MD5_JPEG_444_ISLOW_PROGARI})
1223 # CC: RGB->YCC SAMP: h2v2 merged IDCT: ifast ENT: arith
1224 add_bittest(djpeg 420m-ifast-ari "-fast;-skip;1,20;-ppm"
1225 testout_420m_ifast_ari.ppm ${TESTIMAGES}/testimgari.jpg
1226 ${MD5_PPM_420M_IFAST_ARI})
1228 add_bittest(jpegtran 420-islow ""
1229 testout_420_islow.jpg ${TESTIMAGES}/testimgari.jpg
1230 ${MD5_JPEG_420_ISLOW})
1233 # 2/1-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 16x16 islow ENT: huff
1234 # 15/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 15x15 islow ENT: huff
1235 # 13/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 13x13 islow ENT: huff
1236 # 11/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 11x11 islow ENT: huff
1237 # 9/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 9x9 islow ENT: huff
1238 # 7/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 7x7 islow/14x14 islow
1240 # 3/4-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 6x6 islow/12x12 islow
1242 # 5/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 5x5 islow/10x10 islow
1244 # 1/2-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 4x4 islow/8x8 islow
1246 # 3/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 3x3 islow/6x6 islow
1248 # 1/4-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 2x2 islow/4x4 islow
1250 # 1/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 1x1 islow/2x2 islow
1252 foreach(scale 2_1 15_8 13_8 11_8 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8)
1253 string(REGEX REPLACE "_" "/" scalearg ${scale})
1254 add_bittest(djpeg 420m-islow-${scale}
1255 "-dct;int;-scale;${scalearg};-nosmooth;-ppm"
1256 testout_420m_islow_${scale}.ppm ${TESTIMAGES}/${TESTORIG}
1257 ${MD5_PPM_420M_ISLOW_${scale}})
1261 # CC: YCC->RGB (dithered) SAMP: h2v2 fancy IDCT: islow ENT: huff
1262 add_bittest(djpeg 420-islow-256 "-dct;int;-colors;256;-bmp"
1263 testout_420_islow_256.bmp ${TESTIMAGES}/${TESTORIG}
1264 ${MD5_BMP_420_ISLOW_256})
1266 # CC: YCC->RGB565 SAMP: h2v2 fancy IDCT: islow ENT: huff
1267 add_bittest(djpeg 420-islow-565 "-dct;int;-rgb565;-dither;none;-bmp"
1268 testout_420_islow_565.bmp ${TESTIMAGES}/${TESTORIG}
1269 ${MD5_BMP_420_ISLOW_565})
1271 # CC: YCC->RGB565 (dithered) SAMP: h2v2 fancy IDCT: islow ENT: huff
1272 add_bittest(djpeg 420-islow-565D "-dct;int;-rgb565;-bmp"
1273 testout_420_islow_565D.bmp ${TESTIMAGES}/${TESTORIG}
1274 ${MD5_BMP_420_ISLOW_565D})
1276 # CC: YCC->RGB565 SAMP: h2v2 merged IDCT: islow ENT: huff
1277 add_bittest(djpeg 420m-islow-565
1278 "-dct;int;-nosmooth;-rgb565;-dither;none;-bmp"
1279 testout_420m_islow_565.bmp ${TESTIMAGES}/${TESTORIG}
1280 ${MD5_BMP_420M_ISLOW_565})
1282 # CC: YCC->RGB565 (dithered) SAMP: h2v2 merged IDCT: islow ENT: huff
1283 add_bittest(djpeg 420m-islow-565D "-dct;int;-nosmooth;-rgb565;-bmp"
1284 testout_420m_islow_565D.bmp ${TESTIMAGES}/${TESTORIG}
1285 ${MD5_BMP_420M_ISLOW_565D})
1288 # Partial decode tests. These tests are designed to cover all of the
1289 # possible code paths in jpeg_skip_scanlines().
1291 # Context rows: Yes Intra-iMCU row: Yes iMCU row prefetch: No ENT: huff
1292 add_bittest(djpeg 420-islow-skip15_31 "-dct;int;-skip;15,31;-ppm"
1293 testout_420_islow_skip15,31.ppm ${TESTIMAGES}/${TESTORIG}
1294 ${MD5_PPM_420_ISLOW_SKIP15_31})
1296 # Context rows: Yes Intra-iMCU row: No iMCU row prefetch: Yes ENT: arith
1298 add_bittest(djpeg 420-islow-ari-skip16_139 "-dct;int;-skip;16,139;-ppm"
1299 testout_420_islow_ari_skip16,139.ppm ${TESTIMAGES}/testimgari.jpg
1300 ${MD5_PPM_420_ISLOW_ARI_SKIP16_139})
1303 # Context rows: Yes Intra-iMCU row: No iMCU row prefetch: No ENT: prog huff
1304 add_test(cjpeg-${libtype}-420-islow-prog
1305 ${CMAKE_CROSSCOMPILING_EMULATOR} cjpeg${suffix} -dct int -prog
1306 -outfile testout_420_islow_prog.jpg ${TESTIMAGES}/testorig.ppm)
1307 add_bittest(djpeg 420-islow-prog-crop62x62_71_71
1308 "-dct;int;-crop;62x62+71+71;-ppm"
1309 testout_420_islow_prog_crop62x62,71,71.ppm testout_420_islow_prog.jpg
1310 ${MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71} cjpeg-${libtype}-420-islow-prog)
1312 # Context rows: Yes Intra-iMCU row: No iMCU row prefetch: No ENT: arith
1314 add_bittest(djpeg 420-islow-ari-crop53x53_4_4
1315 "-dct;int;-crop;53x53+4+4;-ppm"
1316 testout_420_islow_ari_crop53x53,4,4.ppm ${TESTIMAGES}/testimgari.jpg
1317 ${MD5_PPM_420_ISLOW_ARI_CROP53x53_4_4})
1320 # Context rows: No Intra-iMCU row: Yes ENT: huff
1321 add_test(cjpeg-${libtype}-444-islow
1322 ${CMAKE_CROSSCOMPILING_EMULATOR} cjpeg${suffix} -dct int -sample 1x1
1323 -outfile testout_444_islow.jpg ${TESTIMAGES}/testorig.ppm)
1324 add_bittest(djpeg 444-islow-skip1_6 "-dct;int;-skip;1,6;-ppm"
1325 testout_444_islow_skip1,6.ppm testout_444_islow.jpg
1326 ${MD5_PPM_444_ISLOW_SKIP1_6} cjpeg-${libtype}-444-islow)
1328 # Context rows: No Intra-iMCU row: No ENT: prog huff
1329 add_test(cjpeg-${libtype}-444-islow-prog
1330 ${CMAKE_CROSSCOMPILING_EMULATOR} cjpeg${suffix} -dct int -prog -sample 1x1
1331 -outfile testout_444_islow_prog.jpg ${TESTIMAGES}/testorig.ppm)
1332 add_bittest(djpeg 444-islow-prog-crop98x98_13_13
1333 "-dct;int;-crop;98x98+13+13;-ppm"
1334 testout_444_islow_prog_crop98x98,13,13.ppm testout_444_islow_prog.jpg
1335 ${MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13} cjpeg-${libtype}-444-islow-prog)
1337 # Context rows: No Intra-iMCU row: No ENT: arith
1339 add_test(cjpeg-${libtype}-444-islow-ari
1340 ${CMAKE_CROSSCOMPILING_EMULATOR} cjpeg${suffix} -dct int -arithmetic
1341 -sample 1x1 -outfile testout_444_islow_ari.jpg
1342 ${TESTIMAGES}/testorig.ppm)
1344 add_bittest(djpeg 444-islow-ari-crop37x37_0_0
1345 "-dct;int;-crop;37x37+0+0;-ppm"
1346 testout_444_islow_ari_crop37x37,0,0.ppm testout_444_islow_ari.jpg
1347 ${MD5_PPM_444_ISLOW_ARI_CROP37x37_0_0} cjpeg-${libtype}-444-islow-ari)
1351 add_bittest(jpegtran crop "-crop;120x90+20+50;-transpose;-perfect"
1352 testout_crop.jpg ${TESTIMAGES}/${TESTORIG}
1357 add_custom_target(testclean COMMAND ${CMAKE_COMMAND} -P
1358 ${CMAKE_CURRENT_SOURCE_DIR}/cmakescripts/testclean.cmake)
1360 configure_file(croptest.in croptest @ONLY)
1361 add_custom_target(croptest
1362 COMMAND echo croptest
1363 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/croptest)
1366 configure_file(tjbenchtest.in tjbenchtest @ONLY)
1367 configure_file(tjexampletest.in tjexampletest @ONLY)
1372 configure_file(tjbenchtest.java.in tjbenchtest.java @ONLY)
1373 configure_file(tjexampletest.java.in tjexampletest.java @ONLY)
1374 add_custom_target(tjtest
1375 COMMAND echo tjbenchtest
1376 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest
1377 COMMAND echo tjbenchtest -alloc
1378 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -alloc
1379 COMMAND echo tjbenchtest -yuv
1380 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -yuv
1381 COMMAND echo tjbenchtest -yuv -alloc
1382 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -yuv -alloc
1383 COMMAND echo tjbenchtest -progressive
1384 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -progressive
1385 COMMAND echo tjbenchtest -progressive -yuv
1386 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -progressive -yuv
1387 COMMAND echo tjexampletest
1388 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjexampletest
1389 COMMAND echo tjbenchtest.java
1390 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest.java
1391 COMMAND echo tjbenchtest.java -yuv
1392 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest.java -yuv
1393 COMMAND echo tjbenchtest.java -progressive
1394 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest.java -progressive
1395 COMMAND echo tjexampletest.java -progressive -yuv
1396 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest.java
1398 COMMAND echo tjexampletest.java
1399 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjexampletest.java
1400 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest
1401 ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest.java
1402 ${CMAKE_CURRENT_BINARY_DIR}/tjexampletest)
1404 add_custom_target(tjtest
1405 COMMAND echo tjbenchtest
1406 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest
1407 COMMAND echo tjbenchtest -alloc
1408 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -alloc
1409 COMMAND echo tjbenchtest -yuv
1410 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -yuv
1411 COMMAND echo tjbenchtest -yuv -alloc
1412 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -yuv -alloc
1413 COMMAND echo tjbenchtest -progressive
1414 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -progressive
1415 COMMAND echo tjbenchtest -progressive -yuv
1416 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -progressive -yuv
1417 COMMAND echo tjexampletest
1418 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjexampletest
1419 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest)
1424 ###############################################################################
1426 ###############################################################################
1428 set(EXE ${CMAKE_EXECUTABLE_SUFFIX})
1432 install(TARGETS turbojpeg EXPORT ${CMAKE_PROJECT_NAME}Targets
1433 INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
1434 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
1435 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
1436 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1437 install(TARGETS tjbench
1438 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1439 if(NOT CMAKE_VERSION VERSION_LESS "3.1" AND MSVC AND
1440 CMAKE_C_LINKER_SUPPORTS_PDB)
1441 install(FILES "$<TARGET_PDB_FILE:turbojpeg>"
1442 DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL)
1446 install(TARGETS turbojpeg-static EXPORT ${CMAKE_PROJECT_NAME}Targets
1447 INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
1448 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
1449 if(NOT ENABLE_SHARED)
1450 if(MSVC_IDE OR XCODE)
1451 set(DIR "${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}")
1453 set(DIR ${CMAKE_CURRENT_BINARY_DIR})
1455 install(PROGRAMS ${DIR}/tjbench-static${EXE}
1456 DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME tjbench${EXE})
1459 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/turbojpeg.h
1460 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
1464 install(TARGETS jpeg-static EXPORT ${CMAKE_PROJECT_NAME}Targets
1465 INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
1466 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
1467 if(NOT ENABLE_SHARED)
1468 if(MSVC_IDE OR XCODE)
1469 set(DIR "${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}")
1471 set(DIR ${CMAKE_CURRENT_BINARY_DIR})
1473 install(PROGRAMS ${DIR}/cjpeg-static${EXE}
1474 DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME cjpeg${EXE})
1475 install(PROGRAMS ${DIR}/djpeg-static${EXE}
1476 DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME djpeg${EXE})
1477 install(PROGRAMS ${DIR}/jpegtran-static${EXE}
1478 DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME jpegtran${EXE})
1482 install(TARGETS rdjpgcom wrjpgcom RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1484 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/README.ijg
1485 ${CMAKE_CURRENT_SOURCE_DIR}/README.md ${CMAKE_CURRENT_SOURCE_DIR}/example.txt
1486 ${CMAKE_CURRENT_SOURCE_DIR}/tjexample.c
1487 ${CMAKE_CURRENT_SOURCE_DIR}/libjpeg.txt
1488 ${CMAKE_CURRENT_SOURCE_DIR}/structure.txt
1489 ${CMAKE_CURRENT_SOURCE_DIR}/usage.txt ${CMAKE_CURRENT_SOURCE_DIR}/wizard.txt
1490 ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md DESTINATION ${CMAKE_INSTALL_DOCDIR})
1492 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/java/TJExample.java
1493 DESTINATION ${CMAKE_INSTALL_DOCDIR})
1497 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cjpeg.1
1498 ${CMAKE_CURRENT_SOURCE_DIR}/djpeg.1 ${CMAKE_CURRENT_SOURCE_DIR}/jpegtran.1
1499 ${CMAKE_CURRENT_SOURCE_DIR}/rdjpgcom.1
1500 ${CMAKE_CURRENT_SOURCE_DIR}/wrjpgcom.1
1501 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
1503 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/libjpeg.pc
1504 DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
1506 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/libturbojpeg.pc
1507 DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
1510 ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/${CMAKE_PROJECT_NAME}Config.cmake
1511 ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/${CMAKE_PROJECT_NAME}ConfigVersion.cmake
1512 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME})
1513 install(EXPORT ${CMAKE_PROJECT_NAME}Targets
1514 NAMESPACE ${CMAKE_PROJECT_NAME}::
1515 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME})
1517 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/jconfig.h
1518 ${CMAKE_CURRENT_SOURCE_DIR}/jerror.h ${CMAKE_CURRENT_SOURCE_DIR}/jmorecfg.h
1519 ${CMAKE_CURRENT_SOURCE_DIR}/jpeglib.h
1520 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
1522 include(cmakescripts/BuildPackages.cmake)
1524 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmakescripts/cmake_uninstall.cmake.in"
1525 "cmake_uninstall.cmake" IMMEDIATE @ONLY)
1527 add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P cmake_uninstall.cmake)