From 91751ff9b4de2f8792180a1610837198704e3f61 Mon Sep 17 00:00:00 2001 From: Kaito Udagawa Date: Mon, 5 Feb 2024 18:03:50 +0900 Subject: [PATCH] Add option to specify external directories for OpenCV (#13) * Add option to specify external directories for sources * Add dep-opencv * Update BuildOpenCV.cmake * Update BuildOpenCV.cmake * Update BuildOpenCV.cmake * Update CMakeLists.txt --- .gitmodules | 3 +++ CMakeLists.txt | 28 ++++++++++++++----- cmake/BuildOpenCV.cmake | 36 +++++++++++++++++++++++++ vendor/obs-backgroundremoval-dep-opencv | 1 + 4 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 cmake/BuildOpenCV.cmake create mode 160000 vendor/obs-backgroundremoval-dep-opencv diff --git a/.gitmodules b/.gitmodules index f688d44..06c8a56 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "vendor/obs-ocr-deps"] path = vendor/obs-ocr-deps url = https://github.com/occ-ai/obs-ocr-deps.git +[submodule "vendor/obs-backgroundremoval-dep-opencv"] + path = vendor/obs-backgroundremoval-dep-opencv + url = https://github.com/occ-ai/obs-backgroundremoval-dep-opencv.git diff --git a/CMakeLists.txt b/CMakeLists.txt index a554413..6ce1a7e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,14 +37,30 @@ endif() set(USE_SYSTEM_OPENCV OFF CACHE STRING "Use system OpenCV") -if(USE_SYSTEM_OPENCV) - if(OS_LINUX) - find_package(OpenCV REQUIRED COMPONENTS core imgproc dnn) - target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE "${OpenCV_LIBRARIES}") - target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PUBLIC "${OpenCV_INCLUDE_DIRS}") - else() + +set(BUILD_OPENCV_FROM_SOURCE + OFF + CACHE STRING "Build OpenCV from tarball") + +if(OS_LINUX) + if(USE_SYSTEM_OPENCV AND BUILD_OPENCV_FROM_SOURCE) + message(FATAL_ERROR "Only one of USE_SYSTEM_OPENCV and BUILD_OPENCV_FROM_SOURCE can be enabled!") + endif() +else() + if(USE_SYSTEM_OPENCV) message(FATAL_ERROR "System OpenCV is only supported on Linux!") + elseif(BUILD_OPENCV_FROM_SOURCE) + message(FATAL_ERROR "Building OpenCV from source is only supported on Linux!") endif() +endif() + +if(USE_SYSTEM_OPENCV) + find_package(OpenCV REQUIRED COMPONENTS core imgproc) + target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE "${OpenCV_LIBRARIES}") + target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PUBLIC "${OpenCV_INCLUDE_DIRS}") +elseif(BUILD_OPENCV_FROM_SOURCE) + include(cmake/BuildOpenCV.cmake) + target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE OpenCV) else() include(cmake/FetchOpenCV.cmake) target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE OpenCV) diff --git a/cmake/BuildOpenCV.cmake b/cmake/BuildOpenCV.cmake new file mode 100644 index 0000000..3a76935 --- /dev/null +++ b/cmake/BuildOpenCV.cmake @@ -0,0 +1,36 @@ +include(FetchContent) + +set(OPENCV_SOURCE_URL + "" + CACHE STRING "URL of a Tesseract source tarball") + +set(OPENCV_SOURCE_HASH + "" + CACHE STRING "Hash of a Tesseract source tarball") + +FetchContent_Declare( + opencv_source + URL ${OPENCV_SOURCE_URL} + URL_HASH ${OPENCV_SOURCE_HASH}) +FetchContent_Populate(opencv_source) + +set(BUILD_OPENCV_BASEDIR ${CMAKE_BINARY_DIR}/build-opencv) + +set(BUILD_OPENCV_OUTPUTS + ${BUILD_OPENCV_BASEDIR}/release/${CMAKE_BUILD_TYPE}/lib/libopencv_imgproc.a + ${BUILD_OPENCV_BASEDIR}/release/${CMAKE_BUILD_TYPE}/lib/libopencv_core.a + ${BUILD_OPENCV_BASEDIR}/release/${CMAKE_BUILD_TYPE}/lib/opencv4/3rdparty/libzlib.a) + +set(BUILD_OPENCV_INCLUDE_DIR ${BUILD_OPENCV_BASEDIR}/release/${CMAKE_BUILD_TYPE}/include/opencv4) + +add_custom_command( + OUTPUT ${BUILD_OPENCV_OUTPUTS} + COMMAND ${CMAKE_SOURCE_DIR}/vendor/obs-backgroundremoval-dep-opencv/build-linux.sh ${CMAKE_BUILD_TYPE} main + ${opencv_source_SOURCE_DIR} + WORKING_DIRECTORY ${BUILD_OPENCV_BASEDIR}) +add_custom_target(build_opencv DEPENDS ${BUILD_OPENCV_OUTPUTS}) + +add_library(OpenCV INTERFACE) +add_dependencies(OpenCV build_opencv) +target_link_libraries(OpenCV INTERFACE ${BUILD_OPENCV_OUTPUTS}) +target_include_directories(OpenCV SYSTEM INTERFACE ${BUILD_OPENCV_INCLUDE_DIR}) diff --git a/vendor/obs-backgroundremoval-dep-opencv b/vendor/obs-backgroundremoval-dep-opencv new file mode 160000 index 0000000..1adf5c1 --- /dev/null +++ b/vendor/obs-backgroundremoval-dep-opencv @@ -0,0 +1 @@ +Subproject commit 1adf5c1d607433c4461b25f6bbebffd718e1c6df