blob: 4d26953d74b96a2815c982621a2c5d69f00e8dfc [file] [log] [blame]
Éanna Ó Catháin919c14e2020-09-14 17:36:49 +01001# Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
2# SPDX-License-Identifier: MIT
3
4set(OPENCV_VERSION 4.0.0)
5set(FFMPEG_VERSION 4.2.1)
6set(LIBX264_VERSION stable)
7
8set(OPENCV_LIB OpenCV${OPENCV_VERSION})
9set(FFMPEG_LIB ffmpeg${FFMPEG_VERSION})
10set(X264_LIB x264${LIBX264_VERSION})
11
12set(OPENCV_NAMES
13 libopencv_core.so.${OPENCV_VERSION}
14 libopencv_imgproc.so.${OPENCV_VERSION}
15 libopencv_imgcodecs.so.${OPENCV_VERSION}
16 libopencv_videoio.so.${OPENCV_VERSION}
17 libopencv_video.so.${OPENCV_VERSION}
18 libopencv_highgui.so.${OPENCV_VERSION})
19
20set(OPENCV_LIBS)
21set(FFMPEG_LIBS)
22
23foreach(opencv_lib ${OPENCV_NAMES})
24 find_library(OPENCV_${opencv_lib}
25 NAMES
26 ${opencv_lib}
27 HINTS
28 ${OPENCV_LIB_DIR}
29 PATHS
30 ${OPENCV_LIB_DIR}
31 PATH_SUFFIXES
32 "lib"
33 "lib64")
34 if(OPENCV_${opencv_lib})
35 message("Found library ${OPENCV_${opencv_lib}}")
36 list(APPEND OPENCV_LIBS ${OPENCV_${opencv_lib}})
37 get_filename_component(OPENCV_LIB_DIR ${OPENCV_${opencv_lib}} DIRECTORY)
38 get_filename_component(OPENCV_ROOT_DIR ${OPENCV_LIB_DIR} DIRECTORY)
39 set(OPENCV_INCLUDE_DIR ${OPENCV_ROOT_DIR}/include/opencv4)
40 endif()
41endforeach()
42
43if(OPENCV_LIBS)
44 message("OpenCV libraries found")
45 set(OPENCV_LIBS_FOUND TRUE)
46else()
47 set(OPENCV_ROOT_DIR ${DEPENDENCIES_DIR}/opencv)
48 set(OPENCV_DEPENDENCIES_ARGS)
49 set(OPENCV_EXTRA_LINKER_ARGS)
50 set(OPENCV_PKGCONFIG)
51
52 if(CMAKE_CROSSCOMPILING)
53 set(FFMPEG_ROOT_DIR ${DEPENDENCIES_DIR}/ffmpeg)
54 set(LIBX264_ROOT_DIR ${DEPENDENCIES_DIR}/x264)
55
56 if (CMAKE_BUILD_TYPE STREQUAL Debug)
57 set(CONFIGURE_DEBUG --enable-debug)
58 set(OPENCV_DEBUG "-DBUILD_WITH_DEBUG_INFO=ON")
59 endif()
60
61
62 ExternalProject_Add(${X264_LIB}
63 URL "https://code.videolan.org/videolan/x264/-/archive/${LIBX264_VERSION}/x264-${LIBX264_VERSION}.tar.gz"
64 URL_HASH MD5=07eae2352f6ba201999be45fece0c26c
65 DOWNLOAD_DIR ${LIBX264_ROOT_DIR}
66 PREFIX ${LIBX264_ROOT_DIR}
67 CONFIGURE_COMMAND <SOURCE_DIR>/configure
68 --host=${GNU_MACHINE}
69 --enable-static
70 --enable-shared
71 --cross-prefix=${CROSS_PREFIX}
72 --prefix=${CMAKE_BINARY_DIR}
73 --extra-ldflags=-static-libstdc++
74 --extra-cflags=-fPIC
75 ${CONFIGURE_DEBUG}
76 INSTALL_DIR ${CMAKE_BINARY_DIR}
77 BUILD_COMMAND $(MAKE)
78 INSTALL_COMMAND $(MAKE) install
79 )
80
81 set(FFMPEG_Config
82 --enable-shared
83 --enable-cross-compile
84 --cross-prefix=${CROSS_PREFIX}
85 --arch=${CMAKE_SYSTEM_PROCESSOR}
86 --target-os=linux
87 --prefix=${CMAKE_BINARY_DIR}
88 --enable-gpl
89 --enable-nonfree
90 --enable-libx264
91 --extra-cflags=-I${CMAKE_BINARY_DIR}/include
92 --extra-cflags=-fPIC
93 --extra-ldflags=-L${CMAKE_BINARY_DIR}/lib
94 --extra-libs=-ldl
95 --extra-libs=-static-libstdc++
96 )
97
98 ExternalProject_Add(${FFMPEG_LIB}
99 URL "https://github.com/FFmpeg/FFmpeg/archive/n${FFMPEG_VERSION}.tar.gz"
100 URL_HASH MD5=05792c611d1e3ebdf2c7003ff4467390
101 DOWNLOAD_DIR ${FFMPEG_ROOT_DIR}
102 PREFIX ${FFMPEG_ROOT_DIR}
103 CONFIGURE_COMMAND <SOURCE_DIR>/configure ${FFMPEG_Config} ${CONFIGURE_DEBUG}
104 INSTALL_DIR ${CMAKE_BINARY_DIR}
105 BUILD_COMMAND $(MAKE) VERBOSE=1
106 INSTALL_COMMAND $(MAKE) install
107 )
108
109 set(OPENCV_DEPENDENCIES_ARGS "-static-libstdc++ -Wl,-rpath,${CMAKE_BINARY_DIR}/lib")
110 set(OPENCV_EXTRA_LINKER_ARGS "-DOPENCV_EXTRA_EXE_LINKER_FLAGS=${OPENCV_DEPENDENCIES_ARGS}")
111
112 set(OPENCV_PKGCONFIG "PKG_CONFIG_LIBDIR=${CMAKE_BINARY_DIR}/lib/pkgconfig")
113
114 set(FFMPEG_NAMES
115 libavcodec.so
116 libavformat.so
117 libavutil.so
118 libswscale.so
119 )
120
121 foreach(ffmpeg_lib ${FFMPEG_NAMES})
122 add_library(FFMPEG_${ffmpeg_lib} SHARED IMPORTED)
123 set_target_properties(FFMPEG_${ffmpeg_lib} PROPERTIES IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/${ffmpeg_lib})
124 list(APPEND OPENCV_LIBS FFMPEG_${ffmpeg_lib})
125 endforeach()
126
127 add_library(X264_lib264.so SHARED IMPORTED)
128 set_target_properties(X264_lib264.so PROPERTIES IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/libx264.so)
129 list(APPEND OPENCV_LIBS X264_lib264.so)
130 endif()
131
132 set(OPENCV_CMAKE_ARGS
133 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
134 -DCMAKE_C_FLAGS=-fPIC
135 -DCMAKE_CXX_FLAGS=-fPIC
136 -DWITH_GTK=OFF
137 -DWITH_JPEG=ON
138 -DWITH_IPP=OFF
139 -DBUILD_opencv_java_bindings_generator=OFF
140 -DBUILD_opencv_ml=OFF
141 -DBUILD_opencv_objdetect=OFF
142 -DBUILD_opencv_photo=OFF
143 -DBUILD_opencv_python_bindings_generator=OFF
144 -DBUILD_opencv_stitching=OFF
145 -DBUILD_opencv_gapi=OFF
146 -DBUILD_opencv_features2d=OFF
147 -DBUILD_opencv_dnn=OFF
148 -DBUILD_opencv_flann=OFF
149 -DBUILD_opencv_calib3d=OFF
150 -DBUILD_opencv_python2=OFF
151 -DBUILD_opencv_python3=OFF
152 -DBUILD_opencv_java=OFF
153 -DBUILD_opencv_js=OFF
154 -DBUILD_opencv_ts=OFF
155 -DBUILD_JPEG=ON
156 -DBUILD_JPEG_TURBO_DISABLE=ON
157 -DBUILD_PNG=ON
158 -DBUILD_TIFF=ON
159 -DZLIB_FOUND=OFF
160 -DBUILD_ZLIB=ON
161 -DBUILD_PERF_TESTS=OFF
162 -DBUILD_TESTS=OFF
163 -DBUILD_DOCS=OFF
164 -DBUILD_opencv_apps=OFF
165 -DBUILD_EXAMPLES=OFF
166 -DWITH_V4L=ON
167 -DWITH_LIBV4L=OFF
168 -DWITH_FFMPEG=ON
169 -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}
170 -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
171 -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
172 -DCMAKE_INSTALL_RPATH=\$ORIGIN:\$ORIGIN/lib:\$ORIGIN/../lib
173 -DCMAKE_SHARED_LINKER_FLAGS=-static-libstdc++
174 ${OPENCV_DEBUG}
175 )
176
177 ExternalProject_Add(${OPENCV_LIB}
178 URL "https://codeload.github.com/opencv/opencv/tar.gz/${OPENCV_VERSION}"
179 URL_HASH MD5=f051c1ff7b327b60123d71b53801b316
180 DOWNLOAD_DIR ${OPENCV_ROOT_DIR}
181 PREFIX ${OPENCV_ROOT_DIR}
182 CONFIGURE_COMMAND ${OPENCV_PKGCONFIG}
183 ${CMAKE_COMMAND} ${OPENCV_CMAKE_ARGS} ${OPENCV_EXTRA_ARGS}
184 ${OPENCV_EXTRA_LINKER_ARGS} ${OPENCV_ROOT_DIR}/src/${OPENCV_LIB}
185 INSTALL_DIR ${CMAKE_BINARY_DIR}
186 BUILD_COMMAND $(MAKE)
187 INSTALL_COMMAND $(MAKE) install
188 )
189
190 if(CMAKE_CROSSCOMPILING)
191 ExternalProject_Add_StepDependencies(${FFMPEG_LIB} build ${X264_LIB})
192 ExternalProject_Add_StepDependencies(${OPENCV_LIB} build ${FFMPEG_LIB})
193 endif()
194
195 set(OPENCV_INCLUDE_DIR ${CMAKE_BINARY_DIR}/include/opencv4)
196 set(OPENCV_LIB_DIR ${CMAKE_BINARY_DIR}/lib)
197
198 foreach(opencv_lib ${OPENCV_NAMES})
199 add_library(OPENCV_${opencv_lib} SHARED IMPORTED)
200 set_target_properties(OPENCV_${opencv_lib} PROPERTIES IMPORTED_LOCATION ${OPENCV_LIB_DIR}/${opencv_lib})
201 list(APPEND OPENCV_LIBS OPENCV_${opencv_lib})
202 endforeach()
203
204endif()