Skip to content

Commit cce72cd

Browse files
committed
Move vendored OpenCV build to ExternalProject
1 parent 012441d commit cce72cd

4 files changed

Lines changed: 172 additions & 43 deletions

File tree

app/Accuracy/CMakeLists.txt

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,11 @@ set(SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/acc.cpp")
33
add_library(ACCLib STATIC ${INCLUDE_HEADERS} ${SRC_FILES})
44

55
set_target_properties(ReadLib PROPERTIES LINKER_LANGUAGE CXX)
6-
7-
find_package( OpenCV REQUIRED PATHS "${OPENCV_BUILD_DIR}" )
8-
include_directories( ${OpenCV_INCLUDE_DIRS} )
9-
target_link_libraries( ACCLib ${OpenCV_LIBS} )
10-
target_link_libraries( ACCLib TBB_unified)
11-
target_link_libraries( ACCLib layers_lib)
12-
target_link_libraries( ACCLib gtest_main)
13-
target_link_libraries( ACCLib Kokkos_imported)
6+
target_link_libraries(ACCLib PUBLIC OpenCV_unified)
7+
target_link_libraries(ACCLib PUBLIC TBB_unified)
8+
target_link_libraries(ACCLib PUBLIC layers_lib)
9+
target_link_libraries(ACCLib PUBLIC gtest_main)
10+
target_link_libraries(ACCLib PUBLIC Kokkos_imported)
1411

1512
add_executable(Accuracy_Check accuracy_check.cpp)
1613
target_link_libraries(Accuracy_Check ACCLib)

app/Graph/CMakeLists.txt

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,7 @@ set(SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/build.cpp")
33
add_library(BuildGraph STATIC ${INCLUDE_HEADERS} ${SRC_FILES})
44

55
set_target_properties(BuildGraph PROPERTIES LINKER_LANGUAGE CXX)
6-
7-
find_package(OpenCV REQUIRED PATHS "${OPENCV_BUILD_DIR}")
8-
include_directories(${OpenCV_INCLUDE_DIRS})
9-
10-
target_link_libraries(BuildGraph PUBLIC ${OpenCV_LIBS})
6+
target_link_libraries(BuildGraph PUBLIC OpenCV_unified)
117
target_link_libraries(BuildGraph PUBLIC reader_lib)
128
target_link_libraries(BuildGraph PUBLIC TBB_unified)
139
target_link_libraries(BuildGraph PUBLIC layers_lib)
@@ -26,7 +22,6 @@ target_link_libraries(ACC BuildGraph)
2622
add_executable(onnx_subgraphs onnx_subgraphs.cpp)
2723
target_link_libraries(onnx_subgraphs BuildGraph)
2824
target_link_libraries(onnx_subgraphs OpenMP::OpenMP_CXX)
29-
target_link_libraries(onnx_subgraphs ${OpenCV_LIBS})
3025
target_link_libraries(onnx_subgraphs graphT_lib)
3126

3227
file(DOWNLOAD

app/ReaderImage/CMakeLists.txt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,9 @@ set(INCLUDE_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/reader_img.hpp")
22
set(SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/reader_img_s.cpp")
33
add_library(ReadLib STATIC ${INCLUDE_HEADERS} ${SRC_FILES})
44

5-
65
set_target_properties(ReadLib PROPERTIES LINKER_LANGUAGE CXX)
7-
8-
find_package( OpenCV REQUIRED PATHS "${OPENCV_BUILD_DIR}" )
9-
include_directories( ${OpenCV_INCLUDE_DIRS} )
10-
target_link_libraries( ReadLib ${OpenCV_LIBS} )
11-
target_link_libraries( ReadLib TBB_unified)
6+
target_link_libraries(ReadLib PUBLIC OpenCV_unified)
7+
target_link_libraries(ReadLib PUBLIC TBB_unified)
128

139
add_executable(Reader reader_img.cpp)
1410
target_link_libraries(Reader ReadLib)

cmake/opencv_config.cmake

Lines changed: 164 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,171 @@
1+
include(ExternalProject)
2+
include(GNUInstallDirs)
3+
14
set(OPENCV_BUILD_DIR "${CMAKE_BINARY_DIR}/3rdparty/opencv_build")
2-
file(MAKE_DIRECTORY "${OPENCV_BUILD_DIR}")
3-
4-
execute_process(
5-
COMMAND ${CMAKE_COMMAND}
6-
-S "${CMAKE_SOURCE_DIR}/3rdparty/opencv"
7-
-B "${OPENCV_BUILD_DIR}"
8-
-G "${CMAKE_GENERATOR}"
9-
-DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER}
10-
-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}
11-
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
12-
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
13-
-DBUILD_PERF_TESTS=OFF
14-
-DBUILD_TESTS=OFF
15-
-DBUILD_opencv_apps=OFF
16-
-DBUILD_JAVA=OFF
17-
WORKING_DIRECTORY "${OPENCV_BUILD_DIR}"
18-
)
5+
set(OPENCV_INSTALL_DIR "${CMAKE_BINARY_DIR}/3rdparty/opencv_install")
6+
7+
set(OPENCV_C_COMPILER "${CMAKE_C_COMPILER}")
8+
set(OPENCV_CXX_COMPILER "${CMAKE_CXX_COMPILER}")
9+
10+
get_filename_component(OPENCV_CXX_COMPILER_NAME "${CMAKE_CXX_COMPILER}" NAME)
11+
string(TOLOWER "${OPENCV_CXX_COMPILER_NAME}" OPENCV_CXX_COMPILER_NAME_LOWER)
12+
13+
if(OPENCV_CXX_COMPILER_NAME_LOWER STREQUAL "acpp"
14+
OR OPENCV_CXX_COMPILER_NAME_LOWER STREQUAL "syclcc")
15+
get_filename_component(OPENCV_HOST_COMPILER_DIR "${CMAKE_C_COMPILER}" DIRECTORY)
16+
unset(OPENCV_CXX_COMPILER)
17+
find_program(OPENCV_CXX_COMPILER
18+
NAMES clang++
19+
PATHS "${OPENCV_HOST_COMPILER_DIR}"
20+
NO_DEFAULT_PATH
21+
)
22+
23+
if(NOT OPENCV_CXX_COMPILER)
24+
find_program(OPENCV_CXX_COMPILER NAMES clang++)
25+
endif()
26+
27+
if(NOT OPENCV_CXX_COMPILER)
28+
message(FATAL_ERROR
29+
"Unable to locate a host C++ compiler for the OpenCV external build")
30+
endif()
31+
endif()
1932

20-
execute_process(
21-
COMMAND ${CMAKE_COMMAND} --build "${OPENCV_BUILD_DIR}" --config "${CMAKE_BUILD_TYPE}"
22-
WORKING_DIRECTORY "${OPENCV_BUILD_DIR}"
33+
set(OPENCV_INITIAL_CACHE "${CMAKE_BINARY_DIR}/3rdparty/opencv_initial_cache.cmake")
34+
file(WRITE "${OPENCV_INITIAL_CACHE}" "")
35+
file(APPEND "${OPENCV_INITIAL_CACHE}"
36+
"set(CMAKE_C_COMPILER \"${OPENCV_C_COMPILER}\" CACHE FILEPATH \"\" FORCE)\n")
37+
file(APPEND "${OPENCV_INITIAL_CACHE}"
38+
"set(CMAKE_CXX_COMPILER \"${OPENCV_CXX_COMPILER}\" CACHE FILEPATH \"\" FORCE)\n")
39+
40+
set(OPENCV_CMAKE_ARGS
41+
-C "${OPENCV_INITIAL_CACHE}"
42+
-G "${CMAKE_GENERATOR}"
43+
-DCMAKE_C_COMPILER:FILEPATH=${OPENCV_C_COMPILER}
44+
-DCMAKE_CXX_COMPILER:FILEPATH=${OPENCV_CXX_COMPILER}
45+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
46+
-DCMAKE_INSTALL_PREFIX=${OPENCV_INSTALL_DIR}
47+
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
48+
-DBUILD_PERF_TESTS=OFF
49+
-DBUILD_TESTS=OFF
50+
-DBUILD_opencv_apps=OFF
51+
-DBUILD_opencv_java=OFF
52+
-DBUILD_opencv_js=OFF
53+
-DBUILD_opencv_objc=OFF
54+
-DBUILD_opencv_python2=OFF
55+
-DBUILD_opencv_python3=OFF
56+
-DBUILD_JAVA=OFF
57+
-DBUILD_opencv_world=ON
58+
-DWITH_FFMPEG=OFF
59+
-DWITH_EIGEN=OFF
2360
)
2461

62+
if(APPLE)
63+
list(APPEND OPENCV_CMAKE_ARGS
64+
-DWITH_AVIF=OFF
65+
-DWITH_OPENEXR=OFF
66+
)
67+
endif()
68+
69+
if(CMAKE_C_COMPILER_LAUNCHER)
70+
list(APPEND OPENCV_CMAKE_ARGS
71+
-DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER})
72+
endif()
73+
74+
if(CMAKE_CXX_COMPILER_LAUNCHER)
75+
list(APPEND OPENCV_CMAKE_ARGS
76+
-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER})
77+
endif()
78+
79+
set(OPENCV_VERSION_FILE
80+
"${CMAKE_SOURCE_DIR}/3rdparty/opencv/modules/core/include/opencv2/core/version.hpp")
81+
file(STRINGS "${OPENCV_VERSION_FILE}" OPENCV_VERSION_PARTS
82+
REGEX "#define CV_VERSION_[A-Z]+[ ]+")
83+
string(REGEX REPLACE ".+CV_VERSION_MAJOR[ ]+([0-9]+).*" "\\1"
84+
OPENCV_VERSION_MAJOR "${OPENCV_VERSION_PARTS}")
85+
string(REGEX REPLACE ".+CV_VERSION_MINOR[ ]+([0-9]+).*" "\\1"
86+
OPENCV_VERSION_MINOR "${OPENCV_VERSION_PARTS}")
87+
string(REGEX REPLACE ".+CV_VERSION_REVISION[ ]+([0-9]+).*" "\\1"
88+
OPENCV_VERSION_PATCH "${OPENCV_VERSION_PARTS}")
89+
90+
set(OPENCV_WORLD_TARGET_NAME "opencv_world")
91+
set(OPENCV_WORLD_IMPORT_NAME "${OPENCV_WORLD_TARGET_NAME}")
92+
set(OPENCV_WORLD_RUNTIME_NAME "${OPENCV_WORLD_TARGET_NAME}")
93+
2594
if(WIN32)
26-
file(GLOB OPENCV_DLLS "${OPENCV_BUILD_DIR}/bin/*.dll")
27-
if(OPENCV_DLLS)
28-
file(COPY ${OPENCV_DLLS} DESTINATION "${CMAKE_BINARY_DIR}/bin")
95+
set(OPENCV_WORLD_IMPORT_NAME
96+
"${OPENCV_WORLD_TARGET_NAME}${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
97+
set(OPENCV_WORLD_RUNTIME_NAME "${OPENCV_WORLD_IMPORT_NAME}")
98+
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
99+
string(APPEND OPENCV_WORLD_IMPORT_NAME "d")
100+
string(APPEND OPENCV_WORLD_RUNTIME_NAME "d")
29101
endif()
30102
endif()
103+
104+
set(OPENCV_LIBRARY_DIR "${OPENCV_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}")
105+
set(OPENCV_RUNTIME_DIR "${OPENCV_INSTALL_DIR}/${CMAKE_INSTALL_BINDIR}")
106+
set(OPENCV_INCLUDE_DIR "${OPENCV_INSTALL_DIR}/include/opencv4")
107+
108+
if(WIN32)
109+
set(OPENCV_WORLD_IMPLIB
110+
"${OPENCV_LIBRARY_DIR}/${OPENCV_WORLD_IMPORT_NAME}${CMAKE_IMPORT_LIBRARY_SUFFIX}")
111+
set(OPENCV_WORLD_RUNTIME
112+
"${OPENCV_RUNTIME_DIR}/${OPENCV_WORLD_RUNTIME_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}")
113+
else()
114+
set(OPENCV_WORLD_IMPLIB
115+
"${OPENCV_LIBRARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${OPENCV_WORLD_IMPORT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}")
116+
set(OPENCV_WORLD_RUNTIME "${OPENCV_WORLD_IMPLIB}")
117+
endif()
118+
119+
set(OPENCV_INSTALL_BYPRODUCTS "${OPENCV_WORLD_IMPLIB}")
120+
if(NOT OPENCV_WORLD_RUNTIME STREQUAL OPENCV_WORLD_IMPLIB)
121+
list(APPEND OPENCV_INSTALL_BYPRODUCTS "${OPENCV_WORLD_RUNTIME}")
122+
endif()
123+
124+
ExternalProject_Add(
125+
opencv_external
126+
SOURCE_DIR "${CMAKE_SOURCE_DIR}/3rdparty/opencv"
127+
BINARY_DIR "${OPENCV_BUILD_DIR}"
128+
INSTALL_DIR "${OPENCV_INSTALL_DIR}"
129+
CMAKE_ARGS ${OPENCV_CMAKE_ARGS}
130+
INSTALL_BYPRODUCTS ${OPENCV_INSTALL_BYPRODUCTS}
131+
BUILD_ALWAYS OFF
132+
LOG_CONFIGURE ON
133+
LOG_BUILD ON
134+
LOG_INSTALL ON
135+
)
136+
137+
add_library(opencv_world_external SHARED IMPORTED GLOBAL)
138+
add_dependencies(opencv_world_external opencv_external)
139+
set_target_properties(opencv_world_external PROPERTIES
140+
IMPORTED_LOCATION "${OPENCV_WORLD_RUNTIME}"
141+
INTERFACE_INCLUDE_DIRECTORIES "${OPENCV_INCLUDE_DIR}"
142+
)
143+
144+
if(WIN32)
145+
set_target_properties(opencv_world_external PROPERTIES
146+
IMPORTED_IMPLIB "${OPENCV_WORLD_IMPLIB}"
147+
)
148+
endif()
149+
150+
add_library(OpenCV_unified INTERFACE)
151+
add_dependencies(OpenCV_unified opencv_external)
152+
target_include_directories(OpenCV_unified INTERFACE "${OPENCV_INCLUDE_DIR}")
153+
target_link_libraries(OpenCV_unified INTERFACE opencv_world_external)
154+
155+
if(CMAKE_BUILD_RPATH)
156+
set(CMAKE_BUILD_RPATH "${OPENCV_LIBRARY_DIR};${CMAKE_BUILD_RPATH}")
157+
else()
158+
set(CMAKE_BUILD_RPATH "${OPENCV_LIBRARY_DIR}")
159+
endif()
160+
161+
if(WIN32)
162+
add_custom_target(copy_opencv_runtime ALL
163+
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/bin"
164+
COMMAND ${CMAKE_COMMAND} -E copy_if_different
165+
"${OPENCV_WORLD_RUNTIME}"
166+
"${CMAKE_BINARY_DIR}/bin/"
167+
DEPENDS opencv_external
168+
COMMENT "Copying OpenCV runtime library"
169+
)
170+
add_dependencies(OpenCV_unified copy_opencv_runtime)
171+
endif()

0 commit comments

Comments
 (0)