CMake: Detect OpenCV/ARToolKit, build p3vision

For now, p3vision is only built if either OpenCV or
ARToolKit is available. It does contain some generic
webcam access code, so it might be worth building it
when that's available.
This commit is contained in:
Sam Edwards 2018-11-03 22:39:57 -06:00
parent 3a5c158b5a
commit 9222bc6d31
6 changed files with 185 additions and 32 deletions

View File

@ -0,0 +1,43 @@
# Filename: FindARToolKit.cmake
# Authors: CFSworks (3 Nov, 2018)
#
# Usage:
# find_package(ARToolKit [REQUIRED] [QUIET])
#
# Once done this will define:
# ARTOOLKIT_FOUND - system has ARToolKit
# ARTOOLKIT_INCLUDE_DIR - the include directory containing ARToolKit header files
# ARTOOLKIT_LIBRARIES - the paths to the ARToolKit client libraries
#
if(NOT ARTOOLKIT_INCLUDE_DIR)
find_path(ARTOOLKIT_INCLUDE_DIR "AR/ar.h")
mark_as_advanced(ARTOOLKIT_INCLUDE_DIR)
endif()
if(NOT ARTOOLKIT_AR_LIBRARY)
find_library(ARTOOLKIT_AR_LIBRARY
NAMES "AR" "libAR")
mark_as_advanced(ARTOOLKIT_AR_LIBRARY)
endif()
if(NOT ARTOOLKIT_ARMulti_LIBRARY)
find_library(ARTOOLKIT_ARMulti_LIBRARY
NAMES "ARMulti" "libARMulti")
mark_as_advanced(ARTOOLKIT_ARMulti_LIBRARY)
endif()
set(ARTOOLKIT_LIBRARIES)
if(ARTOOLKIT_AR_LIBRARY)
list(APPEND ARTOOLKIT_LIBRARIES "${ARTOOLKIT_AR_LIBRARY}")
endif()
if(ARTOOLKIT_ARMulti_LIBRARY)
list(APPEND ARTOOLKIT_LIBRARIES "${ARTOOLKIT_ARMulti_LIBRARY}")
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(ARToolKit DEFAULT_MSG
ARTOOLKIT_INCLUDE_DIR ARTOOLKIT_LIBRARIES)

View File

@ -0,0 +1,79 @@
# Filename: FindOpenCV.cmake
# Authors: CFSworks (3 Nov, 2018)
#
# Usage:
# find_package(OpenCV [REQUIRED] [QUIET])
#
# This supports the following components:
# calib3d
# contrib
# core
# features2d
# flann
# gpu
# highgui
# imgproc
# legacy
# ml
# nonfree
# objdetect
# photo
# stitching
# superres
# video
# videostab
#
# Once done this will define:
# OPENCV_FOUND - system has OpenCV
# OpenCV_INCLUDE_DIRS - the include dir(s) containing OpenCV header files
# OpenCV_comp_LIBRARY - the path to the OpenCV library for the particular
# component
# OpenCV_LIBS - the paths to the OpenCV libraries for the requested
# component(s)
#
set(OpenCV_INCLUDE_DIRS)
if(NOT OpenCV_V1_INCLUDE_DIR)
find_path(OpenCV_V1_INCLUDE_DIR
NAMES "cv.h"
PATH_SUFFIXES "opencv")
mark_as_advanced(OpenCV_V1_INCLUDE_DIR)
endif()
if(OpenCV_V1_INCLUDE_DIR)
list(APPEND OpenCV_INCLUDE_DIRS "${OpenCV_V1_INCLUDE_DIR}")
endif()
if(NOT OpenCV_V2_INCLUDE_DIR)
find_path(OpenCV_V2_INCLUDE_DIR "opencv2/core/core.hpp")
mark_as_advanced(OpenCV_V2_INCLUDE_DIR)
endif()
if(OpenCV_V2_INCLUDE_DIR)
list(APPEND OpenCV_INCLUDE_DIRS "${OpenCV_V2_INCLUDE_DIR}")
endif()
set(OpenCV_LIBS)
foreach(_component calib3d contrib core features2d flann gpu highgui imgproc
legacy ml nonfree objdetect photo stitching superres video
videostab)
list(FIND OpenCV_FIND_COMPONENTS "${_component}" _index)
if(_index GREATER -1 OR _component STREQUAL "core")
if(NOT OpenCV_${_component}_LIBRARY)
find_library(OpenCV_${_component}_LIBRARY
NAMES "opencv_${_component}")
endif()
if(OpenCV_${_component}_LIBRARY)
list(APPEND OpenCV_LIBS "${OpenCV_${_component}_LIBRARY}")
set(OpenCV_${_component}_FOUND ON)
endif()
endif()
unset(_index)
endforeach(_component)
unset(_component)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(OpenCV HANDLE_COMPONENTS
REQUIRED_VARS OpenCV_INCLUDE_DIRS OpenCV_LIBS)

View File

@ -161,12 +161,6 @@ else()
message("- Not building Tinydisplay")
endif()
if(HAVE_OPENCV)
message("+ OpenCV")
else()
message("- Did not find OpenCV")
endif()
if(HAVE_AWESOMIUM)
message("+ AWESOMIUM")
else()
@ -191,12 +185,6 @@ else()
message("- Did not find Assimp")
endif()
if(HAVE_ARTOOLKIT)
message("+ ARToolKit")
else()
message("- Did not find ARToolKit")
endif()
if(HAVE_ROCKET)
if(HAVE_ROCKET_PYTHON)
message("+ libRocket with Python bindings")

View File

@ -463,22 +463,31 @@ package_option(DX9
config_package(DX9 "Direct3D 9.x")
#
# ------------ Vision tools ------------
#
# OpenCV
find_package(OpenCV QUIET COMPONENTS core highgui)
package_option(OPENCV
"Enable support for OpenCV. This will be built into the 'vision' package."
FOUND_AS OpenCV)
config_package(OPENCV "OpenCV")
# ARToolKit
find_package(ARToolKit QUIET)
package_option(ARTOOLKIT
"Enable support for ARToolKit. This will be built into the 'vision' package.")
config_package(ARTOOLKIT "ARToolKit")
########
# TODO #
########
# Find and configure OpenCV
#find_package(OpenCV)
#config_package(OPENCV COMMENT "OpenCV")
# Find and configure FFMPEG
#find_package(FFMPEG)
#config_package(FFMPEG)
# Find and configure ODE
#find_package(ODE)
#config_package(ODE)
# Find and configure Awesomium
#find_package(Awesomium)
#config_package(AWESOMIUM COMMENT "Awesomium")
@ -505,10 +514,6 @@ config_package(DX9 "Direct3D 9.x")
#find_package(Assimp)
#config_package(ASSIMP COMMENT "Assimp")
# Find and configure ARToolKit
#find_package(ARToolKit)
#config_package(ARTOOLKIT COMMENT "ARToolKit")
# Find and configure libRocket
#find_package(Rocket)
#config_package(ROCKET COMMENT "libRocket")
@ -531,10 +536,6 @@ config_package(DX9 "Direct3D 9.x")
# unset(USE_ROCKET_PYTHON CACHE)
#endif()
# Find and configure Bullet
#find_package(Bullet)
#config_package(BULLET COMMENT "Bullet Physics")
# Find and configure Vorbis
#find_package(Vorbis)
#config_package(VORBIS COMMENT "Vorbis Ogg decoder")

View File

@ -54,6 +54,7 @@ add_subdirectory(src/recorder)
add_subdirectory(src/testbed)
add_subdirectory(src/text)
add_subdirectory(src/tform)
add_subdirectory(src/vision)
add_subdirectory(src/vrpn)
add_subdirectory(src/wgldisplay)
add_subdirectory(src/windisplay)
@ -110,6 +111,10 @@ if(HAVE_PYTHON)
add_python_module(ode p3ode IMPORT panda3d.core)
endif()
if(HAVE_OPENCV OR HAVE_ARTOOLKIT)
add_python_module(vision p3vision IMPORT panda3d.core)
endif()
if(HAVE_VRPN)
add_python_module(vrpn p3vrpn IMPORT panda3d.core)
endif()

View File

@ -0,0 +1,37 @@
if(NOT HAVE_OPENCV AND NOT HAVE_ARTOOLKIT)
return()
endif()
set(P3VISION_HEADERS
arToolKit.h arToolKit.I
config_vision.h
openCVTexture.h openCVTexture.I
webcamVideoCursorOpenCV.h
webcamVideoCursorV4L.h
webcamVideo.h webcamVideo.I
webcamVideoOpenCV.h
webcamVideoV4L.h
)
set(P3VISION_SOURCES
arToolKit.cxx
config_vision.cxx
openCVTexture.cxx
webcamVideoCursorOpenCV.cxx
webcamVideoCursorV4L.cxx
webcamVideo.cxx
webcamVideoDS.cxx
webcamVideoOpenCV.cxx
webcamVideoV4L.cxx
)
composite_sources(p3vision P3VISION_SOURCES)
add_library(p3vision ${P3VISION_HEADERS} ${P3VISION_SOURCES})
set_target_properties(p3vision PROPERTIES DEFINE_SYMBOL BUILDING_VISION)
target_link_libraries(p3vision panda
PKG::OPENCV PKG::ARTOOLKIT)
set_target_properties(p3vision PROPERTIES CXX_EXCEPTIONS ON)
target_interrogate(p3vision ALL)
install(TARGETS p3vision DESTINATION lib RUNTIME DESTINATION bin)
install(FILES ${P3VISION_HEADERS} DESTINATION include/panda3d)