-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
186 lines (167 loc) · 6.09 KB
/
Copy pathCMakeLists.txt
File metadata and controls
186 lines (167 loc) · 6.09 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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
cmake_minimum_required(VERSION 3.15)
add_compile_options(-Wall -Wextra -Wpedantic)
project(ibootvideoplayer VERSION 0.2.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include(GNUInstallDirs)
# CLI tool
add_executable(ibootvideoplayer
src/archive.cpp
src/common.cpp
src/device.cpp
src/embedded_image.cpp
src/frame_processing.cpp
src/ibootvideoplayer.cpp
src/playback.cpp
)
# Version control
find_package(Git REQUIRED)
add_custom_target(UPDATE_VERSION_HEADER
COMMAND ${CMAKE_COMMAND}
-D GIT_EXECUTABLE=${GIT_EXECUTABLE}
-D SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}
-D BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
-D PROJECT_VERSION_MAJOR=${PROJECT_VERSION_MAJOR}
-D PROJECT_VERSION_MINOR=${PROJECT_VERSION_MINOR}
-D PROJECT_VERSION_PATCH=${PROJECT_VERSION_PATCH}
-D PROJECT_VERSION=${PROJECT_VERSION}
-P "${CMAKE_CURRENT_SOURCE_DIR}/cmake/update_version_header.cmake"
BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/version.h"
)
add_dependencies(ibootvideoplayer UPDATE_VERSION_HEADER)
# Dependencies
find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBIRECOVERY REQUIRED libirecovery-1.0)
pkg_check_modules(LIBIMOBILEDEVICE_GLUE REQUIRED libimobiledevice-glue-1.0)
pkg_check_modules(IMG3TOOL REQUIRED libimg3tool)
pkg_check_modules(IMG4TOOL REQUIRED libimg4tool)
pkg_check_modules(IBOOTIM REQUIRED libibootim)
pkg_check_modules(LIBPNG REQUIRED libpng)
pkg_check_modules(ZLIB REQUIRED zlib)
pkg_check_modules(LIBAVCODEC REQUIRED libavcodec)
pkg_check_modules(LIBAVFORMAT REQUIRED libavformat)
pkg_check_modules(LIBAVUTIL REQUIRED libavutil)
pkg_check_modules(LIBSWRESAMPLE REQUIRED libswresample)
pkg_check_modules(LIBAVFILTER REQUIRED libavfilter)
pkg_check_modules(LIBSWSCALE REQUIRED libswscale)
target_include_directories(ibootvideoplayer
PRIVATE
${CMAKE_CURRENT_BINARY_DIR}
SYSTEM PRIVATE
${LIBIRECOVERY_INCLUDE_DIRS}
${LIBIMOBILEDEVICE_GLUE_INCLUDE_DIRS}
${IMG3TOOL_INCLUDE_DIRS}
${IMG4TOOL_INCLUDE_DIRS}
${IBOOTIM_INCLUDE_DIRS}
${LIBPNG_INCLUDE_DIRS}
${ZLIB_INCLUDE_DIRS}
${LIBAVCODEC_INCLUDE_DIRS}
${LIBAVFORMAT_INCLUDE_DIRS}
${LIBAVUTIL_INCLUDE_DIRS}
${LIBSWRESAMPLE_INCLUDE_DIRS}
${LIBAVFILTER_INCLUDE_DIRS}
${LIBSWSCALE_INCLUDE_DIRS}
)
target_link_directories(ibootvideoplayer PRIVATE
${LIBIRECOVERY_LIBRARY_DIRS}
${LIBIMOBILEDEVICE_GLUE_LIBRARY_DIRS}
${IMG3TOOL_LIBRARY_DIRS}
${IMG4TOOL_LIBRARY_DIRS}
${IBOOTIM_LIBRARY_DIRS}
${LIBPNG_LIBRARY_DIRS}
${ZLIB_LIBRARY_DIRS}
${LIBAVCODEC_LIBRARY_DIRS}
${LIBAVFORMAT_LIBRARY_DIRS}
${LIBAVUTIL_LIBRARY_DIRS}
${LIBSWRESAMPLE_lIBRARY_DIRS}
${LIBAVFILTER_LIBRARY_DIRS}
${LIBSWSCALE_LIBRARY_DIRS}
)
target_link_libraries(ibootvideoplayer PRIVATE
${LIBIRECOVERY_LINK_LIBRARIES}
${LIBIMOBILEDEVICE_GLUE_LINK_LIBRARIES}
${IMG3TOOL_LINK_LIBRARIES}
${IMG4TOOL_LINK_LIBRARIES}
${IBOOTIM_LINK_LIBRARIES}
${LIBPNG_LINK_LIBRARIES}
${ZLIB_LINK_LIBRARIES}
${LIBAVCODEC_LINK_LIBRARIES}
${LIBAVFORMAT_LINK_LIBRARIES}
${LIBAVUTIL_LINK_LIBRARIES}
${LIBSWRESAMPLE_LINK_LIBRARIES}
${LIBAVFILTER_LINK_LIBRARIES}
${LIBSWSCALE_LINK_LIBRARIES}
)
target_compile_options(ibootvideoplayer PRIVATE
${LIBIRECOVERY_CFLAGS_OTHER}
${LIBIMOBILEDEVICE_GLUE_CFLAGS_OTHER}
${IMG3TOOL_CFLAGS_OTHER}
${IMG4TOOL_CFLAGS_OTHER}
${IBOOTIM_CFLAGS_OTHER}
${LIBPNG_CFLAGS_OTHER}
${ZLIB_CFLAGS_OTHER}
${LIBAVCODEC_CFLAGS_OTHER}
${LIBAVFORMAT_CFLAGS_OTHER}
${LIBAVUTIL_CFLAGS_OTHER}
${LIBSWRESAMPLE_CFLAGS_OTHER}
${LIBAVFILTER_CFLAGS_OTHER}
${LIBSWSCALE_CFLAGS_OTHER}
-Wno-four-char-constants
)
if(APPLE)
find_library(BZ2_LIBRARY bz2 REQUIRED)
find_library(LIBICONV_LIBRARY iconv REQUIRED)
find_library(LZMA_LIBRARY lzma REQUIRED)
find_library(SECURITY_FRAMEWORK Security REQUIRED)
find_library(AUDIO_TOOLBOX_FRAMEWORK AudioToolbox REQUIRED)
find_library(CORE_MEDIA_FRAMEWORK CoreMedia REQUIRED)
find_library(CORE_VIDEO_FRAMEWORK CoreVideo REQUIRED)
find_library(VIDEO_TOOLBOX_FRAMEWORK VideoToolbox REQUIRED)
find_library(COREFOUNDATION_FRAMEWORK CoreFoundation REQUIRED)
find_library(IOKIT_FRAMEWORK IOKit REQUIRED)
find_library(COMPRESSION_FRAMEWORK Compression REQUIRED)
find_library(CORE_GRAPHICS_FRAMEWORK CoreGraphics REQUIRED)
find_library(CORE_OPENGL_FRAMEWORK OpenGL REQUIRED)
find_library(METAL_FRAMEWORK Metal REQUIRED)
find_library(FOUNDATION_FRAMEWORK Foundation REQUIRED)
find_library(CORE_IMAGE_FRAMEWORK CoreImage REQUIRED)
find_library(APPKIT_FRAMEWORK AppKit REQUIRED)
target_link_libraries(ibootvideoplayer PRIVATE
${BZ2_LIBRARY}
${LIBICONV_LIBRARY}
${LZMA_LIBRARY}
${SECURITY_FRAMEWORK}
${AUDIO_TOOLBOX_FRAMEWORK}
${CORE_MEDIA_FRAMEWORK}
${CORE_VIDEO_FRAMEWORK}
${VIDEO_TOOLBOX_FRAMEWORK}
${COREFOUNDATION_FRAMEWORK}
${IOKIT_FRAMEWORK}
${COMPRESSION_FRAMEWORK}
${CORE_GRAPHICS_FRAMEWORK}
${CORE_OPENGL_FRAMEWORK}
${METAL_FRAMEWORK}
${FOUNDATION_FRAMEWORK}
${CORE_IMAGE_FRAMEWORK}
${APPKIT_FRAMEWORK}
)
target_link_options(ibootvideoplayer PRIVATE -Wl)
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
target_compile_options(ibootvideoplayer PRIVATE
-Wno-ignored-qualifiers
)
endif()
# Install
install(TARGETS ibootvideoplayer
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
# Uninstall
configure_file(
${CMAKE_SOURCE_DIR}/cmake/uninstall.cmake.in
${CMAKE_BINARY_DIR}/uninstall.cmake
IMMEDIATE @ONLY
)
add_custom_target(uninstall
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/cmake_uninstall.cmake
)