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