-
Tristan Walter authoredTristan Walter authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
CMakeLists.txt 37.01 KiB
cmake_minimum_required(VERSION 3.0)
if(${CMAKE_VERSION} VERSION_LESS "3.11.0")
message(STATUS "* Please consider to switch to CMake 3.11.0")
endif()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
string( TOUPPER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE )
set_property(GLOBAL PROPERTY DEBUG_CONFIGURATIONS "Debug;DEBUG;")
message("-- USER environment variable is set to: " $ENV{USER})
project(TRex)
set(CMAKE_MACOSX_RPATH ON)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
include(ExternalProject)
enable_testing ()
set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.tristan.tracker")
set(CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "tristan")
set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO")
set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "")
#set(CMAKE_CXX_VISIBILITY_PRESET hidden)
option(TREX_WITH_TESTS OFF)
option(TREX_BUILD_GLFW OFF)
option(TREX_BUILD_PNG OFF)
option(TREX_BUILD_ZIP OFF)
option(TREX_BUILD_ZLIB OFF)
option(TREX_BUILD_OPENCV ON)
option(TREX_CONDA_PACKAGE_INSTALL OFF)
option(WITH_PYLON "use pylon support" OFF)
option(WITH_GITSHA1 "include git hash" ON)
option(CMN_USE_OPENGL2 ON)
option(WITH_FFMPEG "Compile with ffmpeg streaming support" ON)
option(WITH_HTTPD "Compile with libmicrohttpd (enable web features)" OFF)
option(NO_PUT_TIME "Disables std::put_time usage" OFF)
option(OPENCV_EXTRA_FLAGS "OpenCV extra CMake flags" "")
option(TREX_ENABLE_CPP20 "Enables CPP20 language standard (if available). Only for GCC and Clang at the moment. Experimental feature." OFF)
if(NO_PUT_TIME)
add_definitions(-DNO_PUT_TIME=true)
endif()
if(TREX_CONDA_PACKAGE_INSTALL)
add_definitions(-DTREX_CONDA_PACKAGE_INSTALL=1)
set(CMAKE_BUILD_RPATH "$ENV{CONDA_PREFIX}/lib")
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
if("${isSystemDir}" STREQUAL "-1")
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
endif("${isSystemDir}" STREQUAL "-1")
endif()
set(CMAKE_DEBUG_POSTFIX -d)
if(WIN32)
set(BUILD_SHARED_LIBS OFF)
string(REPLACE " " ";" VERSION_LIST ${CMAKE_GENERATOR})
list(GET VERSION_LIST 2 VSTD_VERSION_MAJOR)
math (EXPR MSVC_TOOLSET_MAJOR "${MSVC_VERSION}/10")
message(STATUS "CMAKE_GENERATOR_TOOLSET ${MSVC_TOOLSET_MAJOR} ${CMAKE_GENERATOR} ${VSTD_VERSION_MAJOR}")
#if(${MSVC_TOOLSET_MAJOR} LESS 190)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_ENABLE_ATOMIC_ALIGNMENT_FIX")
#endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_USE_MATH_DEFINES -DNOMINMAX -DWIN32_LEAN_AND_MEAN -DCURL_STATICLIB")
#set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:MSVCRT")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT /bigobj /O2 /GL")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd /bigobj /O0")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT /bigobj /O2 /GL")
set(GLEW_STATIC ON)
else()
set(BUILD_SHARED_LIBS OFF)
endif()
if(APPLE)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-undefined,error -framework IOKit -framework CoreFoundation -framework CoreGraphics -framework CoreVideo -framework OpenCL -framework Cocoa -framework AppKit -framework AVKit -framework AVFoundation -framework CoreMedia -framework QuartzCore -framework Accelerate")
find_library(COCOA_LIBRARY Cocoa)
find_library(IOKIT_LIBRARY IOKit)
find_library(COREVIDEO_LIBRARY CoreVideo)
if(CMAKE_OSX_SYSROOT AND NOT ${CMAKE_OSX_SYSROOT} STREQUAL "")
find_library(METALKIT_LIBRARY MetalKit ${CMAKE_OSX_SYSROOT}/System/Library/Frameworks NO_DEFAULT_PATH NO_CMAKE_SYSTEM_PATH)
find_library(METAL_LIBRARY Metal ${CMAKE_OSX_SYSROOT}/System/Library/Frameworks NO_DEFAULT_PATH NO_CMAKE_SYSTEM_PATH)
message(STATUS "${CMAKE_OSX_SYSROOT}/System/Library/Frameworks NO_DEFAULT_PATH")
else()
find_library(METALKIT_LIBRARY MetalKit)
find_library(METAL_LIBRARY Metal)
message(STATUS "Trying to find Metal in default paths.")
endif()
find_library(QUARTZ_LIBRARY QuartzCore)
set(EXTRA_LIBS
${COCOA_LIBRARY}
${OPENGL_LIBRARY}
${IOKIT_LIBRARY}
${COREVIDEO_LIBRARY}
${QUARTZ_LIBRARY}
)
if(NOT METAL_LIBRARY)
message(STATUS "Did not find metal")
else()
message(STATUS "Did find metal")
set(EXTRA_LIBS ${EXTRA_LIBS}
${METALKIT_LIBRARY}
${METAL_LIBRARY}
)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework Metal")
endif()
message(STATUS "Mac extra libs: ${EXTRA_LIBS}")
else()
set(EXTRA_LIBS ${OPENGL_LIBRARY})
endif(APPLE)
set(TREX_CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
set(TREX_CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
# Set output paths
set(PROJECT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR})
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_SOURCE_DIR}/cmake" )
#set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wall)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DTT_DEBUG_ENABLED")
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
endif()
#if(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
if(CMAKE_CXX_COMPILER_ID MATCHES "^(Apple)?Clang$")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wno-c++98-compat-pedantic -fvisibility=hidden")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-c++98-compat-pedantic -fvisibility=hidden")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
message(STATUS "hidden visibility in main project ${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wno-nullability-extension")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-nullability-extension")
elseif(MSVC)
else()
message(STATUS "***** compiler ID ${CMAKE_CXX_COMPILER_ID}")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-unknown-pragmas")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
endif()
if(TREX_ENABLE_CPP20)
set(cxx_flag_std_number "")
if(CMAKE_COMPILER_IS_GNUCXX OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag(-std=c++2a HAVE_FLAG_STD_CXX20)
if(HAVE_FLAG_STD_CXX20)
message(STATUS "Using support for C++20")
set(CMAKE_CXX_STANDARD 20)
set(cxx_flag_std_number "-std=c++2a")
endif()
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${cxx_flag_std_number}")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${cxx_flag_std_number}")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${cxx_flag_std_number}")
endif()
endif()
if(CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pedantic -Wall -Wextra -Wno-long-long -ggdb -DOM_DEBUG -O0 -march='haswell' -no-pie")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -march='haswell' -g0 -no-pie")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3 -march='haswell' -ggdb -no-pie")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -no-pie -fPIC")
#if(APPLE)
#set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -isystem ")
#endif()
endif()
if(XCODE)
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++17")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_ABOUT_RETURN_TYPE "YES")
set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_ABOUT_MISSING_NEWLINE "YES")
set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_UNUSED_VALUE "YES")
#set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_UNUSED_VARIABLE "YES")
set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_SIGN_COMPARE "YES")
set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_UNUSED_FUNCTION "YES")
set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED "YES")
set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS "YES")
set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_UNINITIALIZED_AUTOS "YES")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_BOOL_CONVERSION "YES")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_EMPTY_BODY "YES")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_ENUM_CONVERSION "YES")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_INT_CONVERSION "YES")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_CONSTANT_CONVERSION "YES")
set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_NON_VIRTUAL_DESTRUCTOR "YES")
endif()
#endif()
if(WIN32)
set(trex_subproject_CMAKE_ARGS
-DCMAKE_C_FLAGS_DEBUG="/MTd"
-DCMAKE_C_FLAGS_RELEASE="/MT"
-DCMAKE_C_FLAGS_RELWITHDEBINFO="/MT"
-DCMAKE_CXX_FLAGS_DEBUG=/MTd
-DCMAKE_CXX_FLAGS_RELEASE=/MT
-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=/MT)
else()
set(trex_subproject_CMAKE_ARGS "")
endif()
SET(trex_subproject_CMAKE_ARGS ${trex_subproject_CMAKE_ARGS}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
-DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}
-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}
-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=${CMAKE_CXX_FLAGS_RELWITHDEBINFO}
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
-DCMAKE_PREFIX_PATH:PATH=${CMAKE_PREFIX_PATH}
-DCMAKE_BUILD_TYPE=Release
-DBUILD_SHARED_LIBS=OFF
-DSKIP_INSTALL_FILES=1
)
if(APPLE)
SET(trex_subproject_CMAKE_ARGS ${trex_subproject_CMAKE_ARGS}
-DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET})
endif()
message(STATUS "CMAKE_OSX_DEPLOYMENT_TARGET = ${CMAKE_OSX_DEPLOYMENT_TARGET}")
message(STATUS "MACOSX_DEPLOYMENT_TARGET = $ENV{MACOSX_DEPLOYMENT_TARGET}")
if(NOT APPLE)
set(PY_VERSION "3.6")
find_package(PythonLibs ${PY_VERSION} REQUIRED)
find_package(PythonInterp ${PY_VERSION} REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
message(STATUS "${PYTHON_INCLUDE_DIRS} ${PYTHON_LIBRARIES} ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}")
message(STATUS "Using python version ${PYTHON_EXECUTABLE}")
endif()
if (DEFINED TRACKER_GLOBAL_THREADS)
ADD_DEFINITIONS(-DTRACKER_GLOBAL_THREADS=${TRACKER_GLOBAL_THREADS})
endif()
ADD_DEFINITIONS(-DCV_STATIC_ANALYSIS=0)
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/src/commons/CMakeModules" )
if(APPLE AND WITH_PYLON)
FIND_LIBRARY(PYLON_LIBRARIES Pylon)
if(PYLON_LIBRARIES STREQUAL "PYLON_LIBRARIES-NOTFOUND" OR NOT ${WITH_PYLON})
set(PYLON_FOUND false)
add_definitions(-DWITH_PYLON=false)
else()
set(PYLON_FOUND true)
add_definitions(-DWITH_PYLON=true)
message(STATUS "Pylon found. ${PYLON_LIBRARIES} lol")
include_directories(/Library/Frameworks/pylon.framework/Headers/GenICam)
endif()
elseif(WITH_PYLON)
find_package(BaslerPylon)
if(${PYLON_FOUND})
include_directories(${PYLON_INCLUDE_DIRS})
add_definitions(-DWITH_PYLON=true)
message(STATUS "Pylon found.")
else()
add_definitions(-DWITH_PYLON=false)
endif()
endif()
set(GLFW_add_flags "")
if(WIN32)
set(GLFW_add_flags ${GLFW_add_flags} -DCMAKE_CXX_FLAGS_RELEASE="/MT" -DCMAKE_CXX_FLAGS_DEBUG="/MTd" -DUSE_MSVC_RUNTIME_LIBRARY_DLL=OFF)
endif()
if(NOT TREX_BUILD_GLFW)
find_package(GLFW)
if(NOT GLFW_FOUND)
message(STATUS "Cannot find GLFW. Trying to build it instead.")
set(TREX_BUILD_GLFW ON CACHE BOOL "" FORCE)
endif()
endif()
if(TREX_BUILD_GLFW)
set(GLFW_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/glfw)
ExternalProject_Add(glfw PREFIX glfw
GIT_REPOSITORY https://github.com/glfw/glfw.git
GIT_TAG 3.3
CMAKE_ARGS
${trex_subproject_CMAKE_ARGS}
"-DCMAKE_INSTALL_PREFIX=${GLFW_INSTALL_DIR}"
"-DGLFW_BUILD_EXAMPLES=OFF"
"-DGLFW_BUILD_TESTS=OFF"
"-DGLFW_BUILD_DOCS=OFF"
${GLFW_add_flags}
UPDATE_COMMAND ""
)
set(GLFW_INCLUDE_DIR ${GLFW_INSTALL_DIR}/include)
link_directories(${GLFW_INSTALL_DIR}/lib)
message(STATUS "GLFW LIBRARIES install:${GLFW_INSTALL_DIR}")
message(STATUS "glfw include: ${GLFW_INCLUDE_DIR}")
include_directories(${GLFW_INCLUDE_DIR})
add_library (TRex::GLFW INTERFACE IMPORTED)
target_link_libraries (TRex::GLFW INTERFACE glfw3)
add_dependencies(TRex::GLFW glfw)
else()
find_package(GLFW REQUIRED)
get_filename_component(GLFW_DIR ${GLFW_LIBRARY} DIRECTORY)
get_filename_component(GLFW_LIBRARY ${GLFW_LIBRARY} NAME)
message(STATUS "Linking GLFW: ${GLFW_LIBRARY} includes: ${GLFW_INCLUDE_DIR} dir: ${GLFW_DIR}")
add_library (TRex::GLFW INTERFACE IMPORTED)
target_link_directories(TRex::GLFW INTERFACE ${GLFW_DIR})
if(WIN32)
target_link_libraries (TRex::GLFW INTERFACE ${GLFW_LIBRARY})
else()
target_link_libraries (TRex::GLFW INTERFACE ${GLFW_LIBRARY})
endif()
include_directories(${GLFW_INCLUDE_DIR})
#if(NOT ${GLFW_LIBRARY} EQUAL "glfw")
add_library (glfw INTERFACE IMPORTED)
target_link_libraries (glfw INTERFACE TRex::GLFW)
#endif()
endif()
# this is circumventing some weird CMake shuffeling of dependencies. these libraries always have to go last
# at least once, but multiple times if necessary.
if(UNIX AND NOT APPLE)
target_link_libraries(TRex::GLFW INTERFACE X11 dl m rt uuid pthread)
endif()
# glad
#set(GLAD_DIR "${CMAKE_SOURCE_DIR}/src/glad")
#add_library("glad" "${GLAD_DIR}/src/glad.c")
#target_include_directories("glad" PRIVATE "${GLAD_DIR}/include")
if(CMN_USE_OPENGL2)
set(GLAD_PROFILE "compatibility")
set(GLAD_API "gl=2.0")
add_definitions(-DCMN_USE_OPENGL2=true)
else()
set(GLAD_PROFILE "core")
set(GLAD_API "gl=4.1")
endif()
ExternalProject_Add(gladex PREFIX gladex
GIT_REPOSITORY https://github.com/Dav1dde/glad.git
GIT_TAG v0.1.33
CMAKE_ARGS
${trex_subproject_CMAKE_ARGS}
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-DGLAD_PROFILE=${GLAD_PROFILE}
-DGLAD_API=${GLAD_API}
-DGLAD_INSTALL=ON
-DGLAD_REPRODUCIBLE=ON
UPDATE_COMMAND ""
)
ExternalProject_Get_Property(gladex INSTALL_DIR)
include_directories(${INSTALL_DIR}/include)
link_directories(${INSTALL_DIR}/lib)
set(GLAD_INSTALL_DIR ${INSTALL_DIR})
message(STATUS "glad: ${INSTALL_DIR}")
add_definitions(-DIMGUI_IMPL_OPENGL_LOADER_GLAD=true)
set (imgui_path ${CMAKE_SOURCE_DIR}/src/imgui)
message(STATUS "imgui: ${imgui_path}")
file(GLOB imgui_sources ${imgui_path}/*.cpp ${imgui_path}/*.h
${imgui_path}/examples/imgui_impl_glfw*.cpp ${imgui_path}/examples/imgui_impl_glfw*.h
)
if(CMN_USE_OPENGL2)
set(imgui_sources ${imgui_sources} ${imgui_path}/examples/imgui_impl_opengl2.cpp ${imgui_path}/examples/imgui_impl_opengl2.h)
else()
set(imgui_sources ${imgui_sources} ${imgui_path}/examples/imgui_impl_opengl3.cpp ${imgui_path}/examples/imgui_impl_opengl3.h)
endif()
if(APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "^(Apple)?Clang$" AND METAL_LIBRARY)
set(imgui_sources ${imgui_sources} ${imgui_path}/examples/imgui_impl_metal.mm ${imgui_path}/examples/imgui_impl_metal.h)
endif()
add_library(imgui STATIC ${imgui_sources})
add_dependencies(imgui gladex glfw)
include_directories(${imgui_path})
if(APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "^(Apple)?Clang$")
set_property (TARGET imgui APPEND_STRING PROPERTY COMPILE_FLAGS "-fobjc-arc")
endif()
if(WITH_FFMPEG)
find_path(AVCODEC_INCLUDE_DIR libavcodec/avcodec.h)
find_library(AVCODEC_LIBRARY avcodec)
find_path(AVFORMAT_INCLUDE_DIR libavformat/avformat.h)
find_library(AVFORMAT_LIBRARY avformat)
find_path(AVUTIL_INCLUDE_DIR libavutil/avutil.h)
find_library(AVUTIL_LIBRARY avutil)
find_path(AVDEVICE_INCLUDE_DIR libavdevice/avdevice.h)
find_library(AVDEVICE_LIBRARY avdevice)
#find_path(LIBSWSSCALE_INCLUDE_DIR libswscale/swsscale.h)
find_library(LIBSWSSCALE_LIBRARY swscale)
if(NOT AVCODEC_LIBRARY OR NOT AVFORMAT_LIBRARY OR NOT AVDEVICE_LIBRARY OR NOT LIBSWSSCALE_LIBRARY)
message(STATUS "Cannot find the FFMPEG libraries (WITH_FFMPEG=ON) avformat:${AVFORMAT_LIBRARY} avdevice:${AVDEVICE_LIBRARY} swsscale:${LIBSWSSCALE_LIBRARY}")
message(STATUS "Disabling FFMPEG.")
set(WITH_FFMPEG OFF)
else()
set(FFMPEG_INCLUDE_DIRS ${AVCODEC_INCLUDE_DIR} ${AVFORMAT_INCLUDE_DIR} ${AVUTIL_INCLUDE_DIR} ${AVDEVICE_INCLUDE_DIR})
set(FFMPEG_LIBRARIES ${AVCODEC_LIBRARY} ${AVFORMAT_LIBRARY} ${AVUTIL_LIBRARY} ${AVDEVICE_LIBRARY} ${LIBSWSSCALE_LIBRARY})
message(STATUS "Found ffmpeg: ${FFMPEG_LIBRARIES}")
endif()
endif()
if(WITH_HTTPD)
set(httpd_PREFIX "${CMAKE_BINARY_DIR}/lmhttpd")
set(httpd_INSTALL_DIR "${CMAKE_BINARY_DIR}/lmhttpd")
set(httpd_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${httpd_INSTALL_DIR})
set(MHD_LIBRARIES microhttpd)
message(STATUS "HTTPD: ${httpd_INSTALL_DIR}/lib")
link_directories(${httpd_INSTALL_DIR}/lib)
include_directories(${httpd_INSTALL_DIR}/include)
add_definitions(-DWITH_MHD=true)
else()
add_definitions(-DWITH_MHD=false)
endif()
include_directories(${CMAKE_SOURCE_DIR}/src/)
include_directories(${CMAKE_SOURCE_DIR}/cpputils/src/)
set(pybind11_external OFF)
if(${CMAKE_VERSION} VERSION_LESS "3.11.0")
set(pybind11_install_dir ${CMAKE_BINARY_DIR}/pybind11)
ExternalProject_Add (pybind11
PREFIX ${pybind11_install_dir}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
-DPYBIND11_TEST=OFF
-DPYBIND11_INSTALL=ON
${trex_subproject_CMAKE_ARGS}
GIT_REPOSITORY https://github.com/pybind/pybind11
GIT_TAG 99ef2b846742e2298b97904e5be43f5ea5d71d8c
UPDATE_COMMAND ""
)
ExternalProject_Get_Property(pybind11 INSTALL_DIR)
set(pybind11_external ON)
set(pybind11_LIBRARY ${PYTHON_LIBRARIES} )
set(pybind11_LIBRARY pybind11::pybind11 pybind11::embed pybind11::module )
include_directories(${pybind11_install_dir}/include)
include_directories(${PYTHON_INCLUDE_DIRS})
message(STATUS "pybind11 external_project ${PYTHON_INCLUDE_DIRS} ${INSTALL_DIR} ${pybind11_LIBRARY}")
else()
include(FetchContent)
FetchContent_Declare(
pybind11
GIT_REPOSITORY https://github.com/pybind/pybind11
GIT_TAG v2.5.0
)
FetchContent_GetProperties(pybind11)
if(NOT pybind11_POPULATED)
FetchContent_Populate(pybind11)
add_subdirectory(${pybind11_SOURCE_DIR} ${pybind11_BINARY_DIR})
endif()
endif()
if(NOT TREX_BUILD_PNG AND NOT ${TREX_BUILD_PNG})
find_package(PNG)
if(NOT PNG_FOUND)
message(STATUS "Did not find PNG. Trying to build it.")
set(TREX_BUILD_PNG ON CACHE BOOL "" FORCE)
else()
include_directories(${PNG_INCLUDE_DIR})
add_library (TRex::LibPNG INTERFACE IMPORTED)
target_link_libraries (TRex::LibPNG INTERFACE ${PNG_LIBRARIES})
message(STATUS "png: ${PNG_LIBRARIES} ${PNG_INCLUDE_DIR}")
endif()
endif()
find_package(ZLIB)
if((NOT ${TREX_BUILD_ZLIB}) AND ZLIB_FOUND AND ZLIB_VERSION_STRING VERSION_GREATER 1.2.10)
message(STATUS "Found zlib here: ${ZLIB_LIBRARY}")
set(libzip_zlib_lib "${ZLIB_LIBRARY}")
unset(zlib_install_dir)
add_library (TRex::LibZ INTERFACE IMPORTED)
target_link_libraries (TRex::LibZ INTERFACE ${ZLIB_LIBRARY})
unset(ZLIB_LIBRARY)
else()
message(STATUS "Building libZ and libZIP")
set(TREX_BUILD_ZLIB ON CACHE BOOL "" FORCE)
set(TREX_BUILD_ZIP ON CACHE BOOL "" FORCE)
set(ZLIB_LIBRARY "z")
set(zlib_install_dir "${CMAKE_BINARY_DIR}/zlib")
if(WIN32)
link_directories(${zlib_install_dir}/lib/)
set(ZLIB_LIBRARY "${zlib_install_dir}/lib/zlib$<IF:$<CONFIG:Debug>,d,>.lib")
set(libzip_zlib_lib "${zlib_install_dir}/lib/zlib.lib")
set(trex_subproject_CMAKE_ARGS1 ${trex_subproject_CMAKE_ARGS}
-DCMAKE_STATIC_LINKER_FLAGS_INIT="/LIBPATH:\"${zlib_install_dir}/lib\"")
else()
set(trex_subproject_CMAKE_ARGS1 ${trex_subproject_CMAKE_ARGS})
endif()
EXTERNALPROJECT_ADD(Z_LIB
PREFIX ${zlib_install_dir}
GIT_REPOSITORY https://github.com/jeking3/zlib.git
GIT_TAG c4a2cd007c1b7edef164b29d5f221f83a78c7507
UPDATE_COMMAND ""
INSTALL_DIR ${zlib_install_dir}
CMAKE_ARGS ${trex_subproject_CMAKE_ARGS1} -DCMAKE_DEBUG_POSTFIX=d -DBUILD_STATIC_AND_SHARED=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=${zlib_install_dir}
)
add_library (TRex::LibZ INTERFACE IMPORTED)
target_link_libraries (TRex::LibZ INTERFACE ${ZLIB_LIBRARY})
set(ZLIB_INCLUDE_DIR ${zlib_install_dir}/include)
include_directories(${ZLIB_INCLUDE_DIR})
link_directories(${zlib_install_dir}/lib)
message(STATUS "zlib install dir ${zlib_install_dir}")
message(STATUS "ZLIB include dir ${ZLIB_INCLUDE_DIR}")
message(STATUS "ZLIB_LIBRARY = ${ZLIB_LIBRARY} ${ZLIB_VERSION_STRING}")
unset(ZLIB_LIBRARY)
#unset(ZLIB_INCLUDE_DIR)
endif()
if(NOT TREX_BUILD_ZIP)
find_package(Zip)
if(NOT Zip_FOUND)
message(STATUS "Did not find ZIP. Trying to build it.")
set(TREX_BUILD_ZIP ON CACHE BOOL "" FORCE)
else()
include_directories(${ZIP_INCLUDE_DIR})
add_library (TRex::LibZIP INTERFACE IMPORTED)
target_link_libraries (TRex::LibZIP INTERFACE ${ZIP_LIBRARIES} TRex::LibZ)
message(STATUS "zip: ${ZIP_LIBRARIES} ${ZIP_INCLUDE_DIR}")
endif()
endif()
if(TREX_BUILD_ZLIB)
if(WIN32)
set(trex_subproject_CMAKE_ARGS ${trex_subproject_CMAKE_ARGS}
-DCMAKE_PREFIX_PATH=${zlib_install_dir}/lib/zlib.lib
-DZLIB_LIBRARY:FILEPATH=${zlib_install_dir}/lib/zlib.lib
-DZLIB_LIBRARY_RELEASE:FILEPATH=${zlib_install_dir}/lib/zlib.lib
-DZLIB_LIBRARY_RELWITHDEBINFO:FILEPATH=${zlib_install_dir}/lib/zlib.lib
-DZLIB_LIBRARY_DEBUG:FILEPATH=${zlib_install_dir}/lib/zlibd.lib)
else()
set(trex_subproject_CMAKE_ARGS ${trex_subproject_CMAKE_ARGS}
-DZLIB_INCLUDE_DIR:PATH=${zlib_install_dir}/include
-DZLIB_LIBRARY_RELEASE:FILEPATH=${zlib_install_dir}/lib/libz.a
-DZLIB_LIBRARY_RELWITHDEBINFO:FILEPATH=${zlib_install_dir}/lib/libz.a
-DZLIB_LIBRARY_DEBUG:FILEPATH=${zlib_install_dir}/lib/libzd.a
)
endif()
endif()
if(TREX_BUILD_ZIP)
set(LIBZIP_LIBRARY "zip$<IF:$<CONFIG:Debug>,d,>")
set(libzip_install_dir "${CMAKE_BINARY_DIR}/libzip")
if(NOT WIN32)
set(LIBZIP_LIBRARY "zip$<IF:$<CONFIG:Debug>,d,>")
endif()
ExternalProject_Add(libzip
PREFIX ${libzip_install_dir}
DEPENDS TRex::LibZ
GIT_REPOSITORY https://github.com/nih-at/libzip.git
GIT_TAG rel-1-5-2
UPDATE_COMMAND ""
PATCH_COMMAND ${libzip_patchcommand}
CMAKE_ARGS
${libzip_configure}
-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}
-DENABLE_BZIP2=OFF
-DBUILD_REGRESS=OFF
-DBUILD_EXAMPLES=OFF
-DBUILD_DOC=OFF
-DBUILD_TOOLS=OFF
-DENABLE_GNUTLS=OFF
-DENABLE_OPENSSL=OFF
${trex_subproject_CMAKE_ARGS}
-DCMAKE_DEBUG_POSTFIX=d
)
# patching a simple (void*) -> (char*) for windows
ExternalProject_Add_Step(libzip
WINDOWS_CONFIGURE DEPENDEES download DEPENDERS configure
WORKING_DIRECTORY "${libzip_install_dir}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_SOURCE_DIR}/libzip_windows/zip_source_winzip_aes_encode.c"
"${libzip_install_dir}/src/libzip/lib/zip_source_winzip_aes_encode.c"
)
set(LIBZIP_INCLUDE_DIR "${libzip_install_dir}/include")
include_directories(${LIBZIP_INCLUDE_DIR})
link_directories(${libzip_install_dir}/lib)
message(STATUS "ZIP: ${LIBZIP_LIBRARY}")
message(STATUS "include libzip ${LIBZIP_INCLUDE_DIR} install: ${libzip_install_dir}")
add_library (TRex::LibZIP INTERFACE IMPORTED)
target_link_libraries (TRex::LibZIP INTERFACE ${LIBZIP_LIBRARY})
add_dependencies(TRex::LibZIP TRex::LibZ libzip)
unset(LIBZIP_LIBRARY)
endif()
if(${TREX_BUILD_PNG})
message(STATUS "TRex will build PNG.")
set(png_install_dir "${CMAKE_BINARY_DIR}/libpng")
set(PNG_LIBRARY "png")
if(WIN32)
set(PNG_LIBRARY "libpng16_static$<IF:$<CONFIG:Debug>,d,>")
else()
set(PNG_LIBRARY "${png_install_dir}/lib/libpng16$<IF:$<CONFIG:Debug>,d,>.a")
endif()
message(STATUS "PNG_LIBRARY = ${PNG_LIBRARY}")
message(STATUS "trex_subproject_CMAKE_ARGS ${trex_subproject_CMAKE_ARGS}")
#if(UNIX AND NOT APPLE)
# set(PNG_LIBRARY "")
# find_package(PNG REQUIRED)
# include_directories(${PNG_INCLUDE_DIR})
# message(STATUS "PNG library: ${PNG_LIBRARY_RELEASE} | debug: ${PNG_LIBRARY_DEBUG}")
# set(PNG_LIBRARY ${PNG_LIBRARY_RELEASE})
#else()
#URL ftp://ftp.simplesystems.org/pub/libpng/png/src/history/libpng15/libpng-1.5.10.tar.gz
#URL_MD5 9e5d864bce8f06751bbd99962ecf4aad
EXTERNALPROJECT_ADD(libpng_custom
DEPENDS TRex::LibZ TRex::LibZIP
PREFIX ${png_install_dir}
UPDATE_COMMAND ""
GIT_REPOSITORY https://github.com/glennrp/libpng.git
GIT_TAG v1.6.21
INSTALL_DIR ${png_install_dir}
CMAKE_ARGS ${trex_subproject_CMAKE_ARGS} -DCMAKE_PREFIX_PATH=${zlib_install_dir} # to find zlib
-DPNG_TESTS=OFF
)
include_directories(${png_install_dir}/include)
link_directories(${png_install_dir}/lib)
message(STATUS "libpng dir ${png_install_dir}/lib")
#endif()
message(STATUS "png library ${PNG_LIBRARY}")
add_library (TRex::LibPNG INTERFACE IMPORTED)
target_link_libraries (TRex::LibPNG INTERFACE ${PNG_LIBRARY} TRex::LibZ)
add_dependencies(TRex::LibPNG ${PNG_LIBRARY} libpng_custom TRex::LibZ)
unset(PNG_LIBRARY)
endif()
# this is circumventing some weird CMake shuffeling of dependencies. these libraries always have to go last
# at least once, but multiple times if necessary.
if(UNIX AND NOT APPLE)
target_link_libraries(TRex::LibZIP INTERFACE X11 dl m rt uuid pthread)
target_link_libraries(TRex::LibPNG INTERFACE X11 dl m rt uuid pthread)
endif()
if(WIN32)
set(OpenCV_STATIC ON)
endif()
if(NOT ${TREX_BUILD_OPENCV})
message(STATUS "Trying to find OpenCV...")
find_package( OpenCV )
if(NOT OpenCV_FOUND)
set(TREX_BUILD_OPENCV ON CACHE BOOL "OpenCV Override" FORCE)
message(STATUS "Cannot find OpenCV. Trying to build it.")
else()
include_directories( ${OpenCV_INCLUDE_DIRS} )
message(STATUS "Found OpenCV Version: ${OpenCV_VERSION} include: ${OpenCV_INCLUDE_DIRS} libs: ${OpenCV_LIBRARIES}")
set(OpenCV_LIBS ${OpenCV_LIBRARIES})
add_library (TRex::OpenCV INTERFACE IMPORTED)
target_link_libraries (TRex::OpenCV INTERFACE ${OpenCV_LIBS})
if(UNIX AND NOT APPLE)
find_package(TIFF)
message(STATUS "TIFF libraries: ${TIFF_LIBRARIES}")
target_link_libraries(TRex::OpenCV INTERFACE tiff cairo)
endif()
set(OpenCV_LIBS TRex::OpenCV)
endif()
endif()
if(${TREX_BUILD_OPENCV})
set(trigger_build_dir ${CMAKE_BINARY_DIR}/force_opencv)
set(BUILD_SHARED_LIBS OFF)
message(STATUS "Building OpenCV...")
if(UNIX)
get_filename_component(PKG_CONFIG_PATH ${AVDEVICE_LIBRARY} DIRECTORY)
set(ENV{PKG_CONFIG_PATH} "${PKG_CONFIG_PATH}/pkgconfig" $ENV{PKG_CONFIG_PATH})
message(STATUS "PKG_CONFIG_PATH: $ENV{PKG_CONFIG_PATH}")
endif()
set(OPENCV_PREFIX_PATH ${png_install_dir} ${zlib_install_dir} ${CMAKE_PREFIX_PATH} )
set(OPENCV_EXTRA_FLAGS_ ${OPENCV_EXTRA_FLAGS} "-DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}"
"-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}"
"-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=${CMAKE_CXX_FLAGS_RELWITHDEBINFO}"
"-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}"
"-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}")
if(APPLE AND CMAKE_COMPILER_IS_GNUCXX)
set(${OPENCV_EXTRA_FLAGS_} "-DWITH_AVFOUNDATION=OFF" "-DCMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH}")
endif()
if(APPLE)
set(OPENCV_EXTRA_FLAGS_ ${OPENCV_EXTRA_FLAGS_}
"-DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}"
"-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}"
"-DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}")
endif()
if(WIN32)
set(OPENCV_EXTRA_FLAGS_
${OPENCV_EXTRA_FLAGS_}
"-DCMAKE_CXX_FLAGS_DEBUG=/MTd"
"-DCMAKE_CXX_FLAGS_RELEASE=/MT"
"-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=/MT")
endif()
if(TREX_BUILD_PNG)
if(WIN32)
set(OPENCV_EXTRA_FLAGS_ ${OPENCV_EXTRA_FLAGS_}
-DPNG_LIBRARY_RELEASE:FILEPATH=${png_install_dir}/lib/libpng16_static.lib
-DPNG_LIBRARY_DEBUG:FILEPATH=${png_install_dir}/lib/libpng16_staticd.lib
-DPNG_PNG_INCLUDE_DIR:FILEPATH=${png_install_dir}/include)
else()
set(OPENCV_EXTRA_FLAGS_ ${OPENCV_EXTRA_FLAGS_}
-DPNG_LIBRARY_RELEASE:FILEPATH=${png_install_dir}/lib/libpng16.a
-DPNG_LIBRARY_DEBUG:FILEPATH=${png_install_dir}/lib/libpng16d.a
-DPNG_PNG_INCLUDE_DIR:FILEPATH=${png_install_dir}/include
)
endif()
endif()
if(TREX_BUILD_ZLIB)
if(WIN32)
set(OPENCV_EXTRA_FLAGS_ ${OPENCV_EXTRA_FLAGS_}
-DZLIB_INCLUDE_DIR:PATH=${zlib_install_dir}/include
-DZLIB_LIBRARY_DEBUG:FILEPATH=${zlib_install_dir}/lib/zlibd.lib
-DZLIB_LIBRARY_RELEASE:FILEPATH=${zlib_install_dir}/lib/zlib.lib)
else()
set(OPENCV_EXTRA_FLAGS_ ${OPENCV_EXTRA_FLAGS_}
-DZLIB_INCLUDE_DIR:PATH=${zlib_install_dir}/include
-DZLIB_LIBRARY_RELEASE:FILEPATH=${zlib_install_dir}/lib/libz.a
-DZLIB_LIBRARY_DEBUG:FILEPATH=${zlib_install_dir}/lib/libzd.a
)
endif()
endif()
set(OPENCV_CMAKE_ARGS "")
if(TREX_CONDA_PACKAGE_INSTALL)
set(OPENCV_CMAKE_ARGS ${OPENCV_CMAKE_ARGS} -DCMAKE_BUILD_TYPE=Release)
else()
set(OPENCV_CMAKE_ARGS ${OPENCV_CMAKE_ARGS} -DCMAKE_BUILD_TYPE=$<$<CONFIG:Debug>:Release>$<$<CONFIG:Release>:Debug>)
endif()
set(OPENCV_CMAKE_ARGS ${OPENCV_CMAKE_ARGS}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DBUILD_DOCS:BOOL=FALSE
-DBUILD_EXAMPLES:BOOL=FALSE
-DBUILD_TESTS:BOOL=FALSE
-DBUILD_SHARED_LIBS:BOOL=FALSE
-DBUILD_NEW_PYTHON_SUPPORT:BOOL=OFF
-DBUILD_WITH_DEBUG_INFO=OFF
-DWITH_EIGEN:BOOL=FALSE
-DWITH_CUDA:BOOL=FALSE
-DWITH_FFMPEG:BOOL=${WITH_FFMPEG}
-DWITH_MSMF:BOOL=FALSE
-DWITH_IPP:BOOL=FALSE
-DWITH_PNG:BOOL=TRUE
-DBUILD_PERF_TESTS:BOOL=FALSE
-DBUILD_opencv_apps:BOOL=FALSE
-DBUILD_opencv_java:BOOL=FALSE
-DBUILD_opencv_python:BOOL=OFF
-DWITH_WEBP=OFF
-DBUILD_PNG:BOOL=OFF
-DBUILD_ZLIB:BOOL=OFF
-DBUILD_JPEG:BOOL=ON
-DWITH_OPENJPEG:BOOL=OFF
-DBUILD_JASPER:BOOL=OFF
-DBUILD_opencv_python3=OFF
-DBUILD_opencv_python2=OFF
-DWITH_JASPER:BOOL=OFF
-DBUILD_opencv_world:BOOL=OFF
-DBUILD_WITH_STATIC_CRT:BOOL=ON
-DBUILD_FAT_JAVA_LIB=OFF
-DBUILD_TIFF=ON
-DWITH_OPENCL=ON
-DPYTHON_INCLUDE_DIR:PATH=${PYTHON_INCLUDE_DIR}
-DPYTHON_LIBRARY:PATH=${PYTHON_LIBRARY}
-DPYTHON_EXECUTABLE:FILEPATH=${PYTHON_EXECUTABLE}
-DWITH_OPENEXR=OFF
-DCMAKE_PREFIX_PATH:PATH=${OPENCV_PREFIX_PATH}
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/opencv_install
-DCMAKE_DEBUG_POSTFIX=
${OPENCV_EXTRA_FLAGS_})
message(STATUS "OPENCV_EXTRA_FLAGS_ = ${OPENCV_EXTRA_FLAGS_}")
if(UNIX)
message(STATUS "Using custom configure command")
ExternalProject_add(CustomOpenCV
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/opencv
GIT_REPOSITORY https://github.com/opencv/opencv.git
GIT_TAG 4.3.0
UPDATE_COMMAND ""
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${PKG_CONFIG_PATH}/pkgconfig ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release -G ${CMAKE_GENERATOR} ${OPENCV_CMAKE_ARGS} ${CMAKE_CURRENT_BINARY_DIR}/opencv/src/CustomOpenCV
BUILD_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${PKG_CONFIG_PATH}/pkgconfig ${CMAKE_COMMAND} --build . --config $<$<CONFIG:Debug>:Release>$<$<CONFIG:Release>:Debug>
INSTALL_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${PKG_CONFIG_PATH}/pkgconfig ${CMAKE_COMMAND} --build . --config $<$<CONFIG:Debug>:Release>$<$<CONFIG:Release>:Debug> --target install
CMAKE_ARGS
${OPENCV_CMAKE_ARGS})
else()
ExternalProject_add(CustomOpenCV
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/opencv
GIT_REPOSITORY https://github.com/opencv/opencv.git
GIT_TAG 4.3.0
UPDATE_COMMAND ""
CMAKE_ARGS
${OPENCV_CMAKE_ARGS})
endif()
# patching a simple (void*) -> (char*) for windows
ExternalProject_Add_Step(CustomOpenCV
WINDOWS_CONFIGURE DEPENDEES download DEPENDERS configure
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_SOURCE_DIR}/opencv_patch.patch"
"${CMAKE_CURRENT_BINARY_DIR}/opencv/src/CustomOpenCV/CMakeLists.txt"
)
if(APPLE)
set(CMAKE_PREFIX_PATH ${CMAKE_CURRENT_BINARY_DIR}/opencv_install/lib/cmake/opencv4/ ${CMAKE_PREFIX_PATH})
set(OpenCV_DIR ${CMAKE_CURRENT_BINARY_DIR}/opencv_install/)
elseif(UNIX)
set(CMAKE_PREFIX_PATH ${CMAKE_CURRENT_BINARY_DIR}/opencv_install/share/OpenCV/ ${CMAKE_PREFIX_PATH})
set(OpenCV_DIR ${CMAKE_CURRENT_BINARY_DIR}/opencv_install/)
else()
set(CMAKE_PREFIX_PATH ${CMAKE_CURRENT_BINARY_DIR}/opencv_install/ ${CMAKE_PREFIX_PATH})
set(OpenCV_DIR ${CMAKE_CURRENT_BINARY_DIR}/opencv_install/)
endif()
message(STATUS "OPENCV_EXTRA_FLAGS_ = ${OPENCV_EXTRA_FLAGS_}")
add_dependencies(CustomOpenCV TRex::LibPNG)
if(WIN32)
string(REPLACE " " ";" VERSION_LIST ${CMAKE_GENERATOR})
list(GET VERSION_LIST 2 VSTD_VERSION_MAJOR)
math (EXPR MSVC_TOOLSET_MAJOR "${MSVC_VERSION}/10")
message(STATUS "CMAKE_GENERATOR_TOOLSET ${MSVC_TOOLSET_MAJOR} ${CMAKE_GENERATOR} ${VSTD_VERSION_MAJOR}")
message("Including OpenCV lib path: ${CMAKE_CURRENT_BINARY_DIR}/opencv_install/x64/vc${VSTD_VERSION_MAJOR}/staticlib")
set(OpenCV_LIB_PATH ${CMAKE_CURRENT_BINARY_DIR}/opencv_install/x64/vc${VSTD_VERSION_MAJOR}/staticlib)
link_directories(${OpenCV_LIB_PATH})
set(OpenCV_LIBS opencv_core430 opencv_imgproc430 opencv_imgcodecs430 opencv_video430 opencv_videoio430 opencv_highgui430 opencv_features2d430 opencv_flann430 opencv_objdetect430 opencv_ml430 opencv_gapi430 opencv_dnn430 opencv_calib3d430 libjpeg-turbo ittnotify ade libprotobuf libtiff quirc ${FFMPEG_LIBRARIES})
else()
set(OpenCV_LIBS opencv_core opencv_imgproc opencv_imgcodecs opencv_stitching opencv_photo opencv_video opencv_videoio opencv_highgui opencv_features2d opencv_flann opencv_objdetect opencv_ml opencv_gapi opencv_dnn opencv_calib3d)
set(OpenCV_LIBS ${OpenCV_LIBS} opencv_core libjpeg-turbo ittnotify ade libprotobuf quirc ${FFMPEG_LIBRARIES})
if(APPLE)
set(OpenCV_LIBS ${OpenCV_LIBS} libtiff)
else()
set(OpenCV_LIBS ${OpenCV_LIBS} libtiff z) #raw1394 usb-1.0 udev glib-2.0)
# set(OpenCV_LIBS ${OpenCV_LIBS} opencv_stitching opencv_photo)
endif()
endif()
find_package(OpenCV 4.3.0 PATHS ${OpenCV_DIR} NO_DEFAULT_PATH)
if(OpenCV_FOUND)
set(OpenCV_LIBS ${OpenCV_LIBRARIES})
message(STATUS "Found opencv at ${OpenCV_INSTALL_PATH}, using its config.cmake")
endif()
if(UNIX)
include_directories( ${CMAKE_CURRENT_BINARY_DIR}/opencv_install/include/opencv4 )
else()
include_directories( ${CMAKE_CURRENT_BINARY_DIR}/opencv_install/include )
endif()
link_directories(${CMAKE_CURRENT_BINARY_DIR}/opencv_install/lib ${CMAKE_CURRENT_BINARY_DIR}/opencv_install/lib/opencv4/3rdparty)
add_library (TRex::OpenCV INTERFACE IMPORTED)
target_link_libraries (TRex::OpenCV INTERFACE ${OpenCV_LIBS})
add_dependencies(TRex::OpenCV CustomOpenCV)
message(STATUS "OpenCV: ${OpenCV_LIBS}")
set(OpenCV_LIBS TRex::OpenCV)
endif()
include_directories(${CMAKE_SOURCE_DIR}/src/cnpy/)
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
message(STATUS "dir='${dir}'")
endforeach()
if(TREX_BUILD_GLFW OR UNIX)
if(WIN32)
find_package(OpenGL REQUIRED)
message(STATUS "OpenGL library ${OPENGL_LIBRARY}")
elseif(UNIX AND NOT APPLE)
find_package(OpenGL REQUIRED)
SET(OPENGL_LIBRARY OpenGL::GL)
message(STATUS "OpenGL library ${OPENGL_LIBRARY}")
else()
find_library(OPENGL_LIBRARY OpenGL)
endif()
endif()
add_subdirectory(src)