-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
119 lines (85 loc) · 4.83 KB
/
CMakeLists.txt
File metadata and controls
119 lines (85 loc) · 4.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
cmake_minimum_required (VERSION 3.2)
project(lossless-image-benchmark)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2")
# Kakadu SDK support
find_path(KDU_INCLUDE_DIR kdu_args.h PATH_SUFFIXES kakadu)
find_library(KDU_LIBRARY NAMES kdu_a84R)
if(KDU_INCLUDE_DIR AND KDU_LIBRARY)
set(KDU_PRESENT 1)
message("Kakadu SDK found: ${KDU_LIBRARY} and ${KDU_INCLUDE_DIR}")
include_directories(${KDU_INCLUDE_DIR})
else()
message("Kakadu SDK not found: ${KDU_LIBRARY} and ${KDU_INCLUDE_DIR}.")
endif()
# OpenJPH support
add_subdirectory(ext/OpenJPH EXCLUDE_FROM_ALL)
set_property(DIRECTORY ext/OpenJPH PROPERTY OJPH_ENABLE_TIFF_SUPPORT OFF)
include_directories(ext/OpenJPH/src/core/common)
# stb
include_directories(ext/stb)
# lodepng
include_directories(ext/lodepng)
# qoi
include_directories(ext/qoi)
# cxxopts
include_directories(ext/cxxopts/include)
# avif
set(AVIF_CODEC_AOM LOCAL CACHE INTERNAL "" FORCE)
set(AVIF_CODEC_DAV1D LOCAL CACHE INTERNAL "" FORCE)
set(AVIF_LIBYUV LOCAL CACHE INTERNAL "" FORCE)
add_subdirectory(ext/libavif EXCLUDE_FROM_ALL)
# jxl
set(JPEGXL_ENABLE_BENCHMARK FALSE CACHE INTERNAL "" FORCE)
set(JPEGXL_ENABLE_JNI FALSE CACHE INTERNAL "" FORCE)
set(JPEGXL_ENABLE_SJPEG FALSE CACHE INTERNAL "" FORCE)
set(JPEGXL_ENABLE_OPENEXR FALSE CACHE INTERNAL "" FORCE)
set(JPEGXL_ENABLE_TRANSCODE_JPEG FALSE CACHE INTERNAL "" FORCE)
set(JPEGXL_BUNDLE_SKCMS FALSE CACHE INTERNAL "" FORCE)
set(JPEGXL_ENABLE_MANPAGES FALSE CACHE INTERNAL "" FORCE)
set(JPEGXL_ENABLE_AVX512 TRUE CACHE INTERNAL "" FORCE)
add_subdirectory(ext/libjxl EXCLUDE_FROM_ALL)
# webp
add_subdirectory(ext/libwebp EXCLUDE_FROM_ALL)
# ffmpeg
# CONFIGURE_COMMAND ./configure --disable-avdevice --disable-avformat --disable-swresample --disable-swscale --disable-avfilter --disable-doc --disable-programs --prefix=${FFMPEG_INSTALL_DIR}
include(ExternalProject)
set(FFMPEG_INSTALL_DIR ${CMAKE_BINARY_DIR}/ext/ffmpeg)
ExternalProject_Add(ffmpeg
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ext/ffmpeg
CONFIGURE_COMMAND ./configure --disable-autodetect --disable-avdevice --disable-avformat --disable-swresample --disable-swscale --disable-avfilter --disable-doc --disable-programs --disable-everything --enable-encoder=ffv1 --enable-decoder=ffv1 --prefix=${FFMPEG_INSTALL_DIR}
BUILD_COMMAND make -j${CONCURRENCY}
BUILD_IN_SOURCE TRUE
)
include_directories(${PROJECT_BINARY_DIR}/ext/ffmpeg/include)
add_library(libavcodec STATIC IMPORTED)
target_link_libraries(libavcodec INTERFACE pthread)
add_dependencies(libavcodec ffmpeg)
set_target_properties(libavcodec PROPERTIES IMPORTED_LOCATION ${FFMPEG_INSTALL_DIR}/lib/libavcodec.a)
add_library(libavutil STATIC IMPORTED)
add_dependencies(libavutil ffmpeg)
set_target_properties(libavutil PROPERTIES IMPORTED_LOCATION ${FFMPEG_INSTALL_DIR}/lib/libavutil.a)
# md5
include_directories(ext/crypto-algorithms)
add_library(md5 ext/crypto-algorithms/md5.c)
# main executable
file(GLOB LIBENCH_SRC_FILES src/main/cpp/*)
add_executable(libench ${LIBENCH_SRC_FILES} ext/lodepng/lodepng.cpp)
target_link_libraries(libench openjph md5 avif jxl webp libavcodec libavutil ${KDU_LIBRARY} ${CMAKE_DL_LIBS})
# tests
enable_testing()
add_test(NAME "j2k_ht_ojph" COMMAND libench j2k_ht_ojph ${PROJECT_SOURCE_DIR}/src/test/resources/images/test1.png)
add_test(NAME "avif-rgb" COMMAND libench avif ${PROJECT_SOURCE_DIR}/src/test/resources/images/test1.png)
add_test(NAME "avif-rgba" COMMAND libench avif ${PROJECT_SOURCE_DIR}/src/test/resources/images/rgba.png)
add_test(NAME "qoi-rgb" COMMAND libench qoi ${PROJECT_SOURCE_DIR}/src/test/resources/images/test1.png)
add_test(NAME "qoi-rgba" COMMAND libench qoi ${PROJECT_SOURCE_DIR}/src/test/resources/images/rgba.png)
add_test(NAME "jxl-rgb" COMMAND libench jxl ${PROJECT_SOURCE_DIR}/src/test/resources/images/test1.png)
add_test(NAME "jxl-rgba" COMMAND libench jxl -r 1 --dir . ${PROJECT_SOURCE_DIR}/src/test/resources/images/rgba.png)
add_test(NAME "j2k_ht_kdu" COMMAND libench j2k_ht_kdu ${PROJECT_SOURCE_DIR}/src/test/resources/images/test1.png)
add_test(NAME "j2k_ht_kdu_yuv" COMMAND libench j2k_ht_kdu ${PROJECT_SOURCE_DIR}/src/test/resources/images/loc.720x243.yuv422p10le.yuv)
add_test(NAME "j2k_1_kdu" COMMAND libench j2k_1_kdu ${PROJECT_SOURCE_DIR}/src/test/resources/images/test1.png)
add_test(NAME "png" COMMAND libench png ${PROJECT_SOURCE_DIR}/src/test/resources/images/test1.png)
add_test(NAME "ffv1" COMMAND libench ffv1 ${PROJECT_SOURCE_DIR}/src/test/resources/images/test1.png)
add_test(NAME "ffv1-rgba" COMMAND libench ffv1 ${PROJECT_SOURCE_DIR}/src/test/resources/images/rgba.png)
add_test(NAME "ffv1-yuv" COMMAND libench ffv1 ${PROJECT_SOURCE_DIR}/src/test/resources/images/loc.720x243.yuv422p10le.yuv)
add_test(NAME "webp-rgb" COMMAND libench webp ${PROJECT_SOURCE_DIR}/src/test/resources/images/test1.png)
add_test(NAME "webp-rgba" COMMAND libench webp ${PROJECT_SOURCE_DIR}/src/test/resources/images/rgba.png)