From f4eebd659ad0a39384e42e392b8ae494c396771a Mon Sep 17 00:00:00 2001 From: Lars Glud Date: Fri, 22 May 2015 11:36:33 +0200 Subject: [PATCH 1/6] Added Findlibraries cmake files, to search for the respective libraries, instead of hardcoding in a sub depend folder. Added pkg-config support for linux to find libraries externally. --- .gitignore | 1 + examples/protonect/CMakeLists.txt | 134 +++++++++++------- .../protonect/cmake_modules/FindGLFW3.cmake | 17 +++ .../protonect/cmake_modules/FindLibUsb.cmake | 88 ++++++++++++ .../protonect/cmake_modules/FindOpenCL.cmake | 7 +- .../cmake_modules/FindTurboJPEG.cmake | 55 +++++++ 6 files changed, 249 insertions(+), 53 deletions(-) create mode 100644 examples/protonect/cmake_modules/FindGLFW3.cmake create mode 100644 examples/protonect/cmake_modules/FindLibUsb.cmake create mode 100644 examples/protonect/cmake_modules/FindTurboJPEG.cmake diff --git a/.gitignore b/.gitignore index 6e9e2e3b7..3f888c19d 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ examples/protonect/include/libfreenect2/config.h # generated resource file examples/protonect/src/resources.inc +examples/protonect/build # Dependency folders depends/*/ diff --git a/examples/protonect/CMakeLists.txt b/examples/protonect/CMakeLists.txt index 1fd580059..4566ee891 100644 --- a/examples/protonect/CMakeLists.txt +++ b/examples/protonect/CMakeLists.txt @@ -1,5 +1,22 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +macro(auto_detect_lib LIBNAME) + if(NOT DEFINED ${${LIBNAME}_FOUND}) + if ( PKG_CONFIG_FOUND ) + string(TOLOWER ${LIBNAME} PKGCONFIGNAME) + pkg_check_modules(${LIBNAME} ${PKGCONFIGNAME} ${ARGN}) + if(${${LIBNAME}_FOUND}) + MESSAGE(STATUS "LIB ${LIBNAME} found and include is in ${${LIBNAME}_INCLUDE_DIRS}") + endif() + else(PKG_CONFIG_FOUND) + #MESSAGE("Fallback to non-pkg-config") + FIND_PACKAGE(${LIBNAME} ${ARGN}) + endif(PKG_CONFIG_FOUND) + else() + MESSAGE(STATUS "LIB was already known ${LIBNAME} becasue of ${${LIBNAME}_FOUND}") + endif() +endmacro() + PROJECT(libfreenect2) SET(CMAKE_BUILD_TYPE RelWithDebInfo) @@ -27,7 +44,6 @@ LIST(APPEND CMAKE_MODULE_PATH ${MY_DIR}/cmake_modules) # setup threading INCLUDE(SetupLibfreenect2Threading) -INCLUDE_DIRECTORIES(${LIBFREENECT2_THREADING_INCLUDE_DIR}) INCLUDE(GenerateResources) @@ -37,30 +53,24 @@ SET(EXECUTABLE_OUTPUT_PATH ${MY_DIR}/bin) #set the default path for built libraries to the "lib" directory SET(LIBRARY_OUTPUT_PATH ${MY_DIR}/lib) -FIND_PACKAGE(OpenCL) - # dependencies -FIND_PACKAGE(OpenCV REQUIRED) - -# OpenCV -INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIR}) - -# LibUSB -INCLUDE_DIRECTORIES("${MY_DIR}/../../depends/libusb/include/libusb-1.0/") -LINK_DIRECTORIES("${MY_DIR}/../../depends/libusb/lib/") +find_package(PkgConfig) # try find PKGConfig as it will be used if found +auto_detect_lib(LibUSB REQUIRED) +auto_detect_lib(OpenCV REQUIRED) +FIND_PACKAGE(TurboJPEG REQUIRED) #does not provide a package-config file + +#hack for buggy libusb pkgconfig file +if(NOT LibUSB_INCLUDE_DIR) + find_path(LibUSB_INCLUDE_DIR + NAMES libusb.h + PATHS /usr/include/libusb-1.0 + ) +endif() -IF(ENABLE_OPENGL) - # GLFW - SET(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries") - SET(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "Build the GLFW example programs") - SET(GLFW_BUILD_TESTS OFF CACHE BOOL "Build the GLFW test programs") - SET(GLFW_BUILD_DOCS OFF CACHE BOOL "Build the GLFW documentation") - - ADD_SUBDIRECTORY(${MY_DIR}/../../depends/glfw_src/ ${MY_DIR}/../../depends/glfw) - INCLUDE_DIRECTORIES(${MY_DIR}/../../depends/glfw_src/include/) -ENDIF(ENABLE_OPENGL) +# Add includes +INCLUDE_DIRECTORIES("${MY_DIR}/include" ${LIBFREENECT2_THREADING_INCLUDE_DIR} ${OpenCV_INCLUDE_DIRS} ${LibUSB_INCLUDE_DIR} ${TurboJPEG_INCLUDE_DIR}) -if(APPLE) +if(APPLE AND NOT ${TurboJPEG_FOUND}) # libjpeg-turbo INCLUDE_DIRECTORIES("${MY_DIR}/../../depends/libjpeg_turbo/include/") LINK_DIRECTORIES("${MY_DIR}/../../depends/libjpeg_turbo/lib/") @@ -115,9 +125,10 @@ SET(SOURCES ) SET(LIBRARIES - usb-1.0 ${OpenCV_LIBS} - turbojpeg + ${OpenCV_LIBRARIES} + ${LibUSB_LIBRARIES} + ${TurboJPEG_LIBRARY} ${LIBFREENECT2_THREADING_LIBRARIES} ) @@ -129,17 +140,40 @@ SET(RESOURCES IF(ENABLE_OPENGL) + auto_detect_lib(GLFW3) + + #Assuming local build witout global deps, ugly to to this automatic but to keep backward compatibiliy + if(${GLFW3_FOUND} STREQUAL "FALSE") + + MESSAGE(STATUS "Building local GLFW") + # GLFW + SET(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries") + SET(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "Build the GLFW example programs") + SET(GLFW_BUILD_TESTS OFF CACHE BOOL "Build the GLFW test programs") + SET(GLFW_BUILD_DOCS OFF CACHE BOOL "Build the GLFW documentation") + + ADD_SUBDIRECTORY(${MY_DIR}/../../depends/glfw_src/ ${MY_DIR}/../../depends/glfw) + INCLUDE_DIRECTORIES(${MY_DIR}/../../depends/glfw_src/include/) + + LIST(APPEND LIBRARIES + glfw + ) + + else() + INCLUDE_DIRECTORIES(${GLFW3_INCLUDE_DIRS}) + + LINK_DIRECTORIES(${GLFW3_LIBRARY_DIRS}) + LIST(APPEND LIBRARIES + ${GLFW3_LIBRARIES} + ) + endif() + SET(LIBFREENECT2_WITH_OPENGL_SUPPORT 1) LIST(APPEND SOURCES src/flextGL.c src/opengl_depth_packet_processor.cpp ) - - LIST(APPEND LIBRARIES - glfw - ${GLFW_LIBRARIES} - ) - + LIST(APPEND RESOURCES src/shader/debug.fs src/shader/default.vs @@ -150,31 +184,33 @@ IF(ENABLE_OPENGL) ) ENDIF(ENABLE_OPENGL) -IF(ENABLE_OPENCL AND OPENCL_FOUND) - SET(LIBFREENECT2_WITH_OPENCL_SUPPORT 1) - INCLUDE_DIRECTORIES(${OPENCL_INCLUDE_DIRS}) - - LIST(APPEND SOURCES - src/opencl_depth_packet_processor.cpp - ) - - LIST(APPEND LIBRARIES - ${OPENCL_LIBRARIES} - ) - - LIST(APPEND RESOURCES - src/opencl_depth_packet_processor.cl - ) -ENDIF(ENABLE_OPENCL AND OPENCL_FOUND) +IF(ENABLE_OPENCL) + FIND_PACKAGE(OpenCL) + + IF(OPENCL_FOUND) + SET(LIBFREENECT2_WITH_OPENCL_SUPPORT 1) + INCLUDE_DIRECTORIES(${OPENCL_INCLUDE_DIRS}) + + LIST(APPEND SOURCES + src/opencl_depth_packet_processor.cpp + ) + + LIST(APPEND LIBRARIES + ${OPENCL_LIBRARIES} + ) + + LIST(APPEND RESOURCES + src/opencl_depth_packet_processor.cl + ) + ENDIF(OPENCL_FOUND) +ENDIF(ENABLE_OPENCL) CONFIGURE_FILE("${MY_DIR}/include/libfreenect2/config.h.in" "${MY_DIR}/include/libfreenect2/config.h" @ONLY) - GENERATE_RESOURCES(${RESOURCES_INC_FILE} ${MY_DIR} ${RESOURCES}) -INCLUDE_DIRECTORIES("${MY_DIR}/include") - ADD_DEFINITIONS(-DRESOURCES_INC) ADD_LIBRARY(freenect2 SHARED ${SOURCES}) +MESSAGE("Linking with these libraries: ${LIBRARIES}") TARGET_LINK_LIBRARIES(freenect2 ${LIBRARIES}) ADD_EXECUTABLE(Protonect diff --git a/examples/protonect/cmake_modules/FindGLFW3.cmake b/examples/protonect/cmake_modules/FindGLFW3.cmake new file mode 100644 index 000000000..b3a2bc3a2 --- /dev/null +++ b/examples/protonect/cmake_modules/FindGLFW3.cmake @@ -0,0 +1,17 @@ +# - Try to find GLFW3 +# +# Will define the following: +# GLFW3_FOUND +# GLFW3_INCLUDE_DIRS +# GLFW3_LIBRARIES + +include(FindPackageHandleStandardArgs) + +IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + find_path(GLFW3_INCLUDE_DIRS glfw/glfw3.h DOC "GLFW include directory " HINTS $ENV{GLFW_ROOT}/include) + + find_library(GLFW3_LIBRARIES NAMES glfw3dll.lib HINTS $ENV{GLFW_ROOT}/lib/) + +ENDIF() + +find_package_handle_standard_args(GLFW3 "Could not find GLFW3 - try adding GLFW_ROOT in enviroment variables." GLFW3_INCLUDE_DIRS GLFW3_LIBRARIES) \ No newline at end of file diff --git a/examples/protonect/cmake_modules/FindLibUsb.cmake b/examples/protonect/cmake_modules/FindLibUsb.cmake new file mode 100644 index 000000000..f1e5750b4 --- /dev/null +++ b/examples/protonect/cmake_modules/FindLibUsb.cmake @@ -0,0 +1,88 @@ +# - Find libusb for portable USB support +# This module will find libusb as published by +# http://libusb.sf.net and +# http://libusb-win32.sf.net +# +# It will use PkgConfig if present and supported, else search +# it on its own. If the LibUSB_ROOT_DIR environment variable +# is defined, it will be used as base path. +# The following standard variables get defined: +# LibUSB_FOUND: true if LibUSB was found +# LibUSB_INCLUDE_DIR: the directory that contains the include file +# LibUSB_LIBRARIES: the library + +include ( CheckLibraryExists ) +include ( CheckIncludeFile ) + +find_path ( LibUSB_INCLUDE_DIR + NAMES + libusb.h + PATHS + $ENV{ProgramFiles}/LibUSB-Win32 + $ENV{LibUSB_ROOT_DIR} + PATH_SUFFIXES + libusb + ) + +mark_as_advanced ( LibUSB_INCLUDE_DIR ) + +if ( ${CMAKE_SYSTEM_NAME} STREQUAL "Windows" ) + # LibUSB-Win32 binary distribution contains several libs. + # Use the lib that got compiled with the same compiler. + if ( MSVC ) + if ( ${CMAKE_SIZEOF_VOID_P} EQUAL 8 ) + set ( LibUSB_LIBRARY_PATH_SUFFIX_RELEASE x64/Release/dll ) + set ( LibUSB_LIBRARY_PATH_SUFFIX_DEBUG x64/Debug/dll ) + else () + set ( LibUSB_LIBRARY_PATH_SUFFIX_RELEASE win32/Release/dll ) + set ( LibUSB_LIBRARY_PATH_SUFFIX_DEBUG win32/Debug/dll ) + endif () + endif ( MSVC ) +endif ( ${CMAKE_SYSTEM_NAME} STREQUAL "Windows" ) + +find_library ( LibUSB_LIBRARY_RELEASE + NAMES + libusb libusb-1.0 usb + PATHS + $ENV{ProgramFiles}/LibUSB-Win32 + $ENV{LibUSB_ROOT_DIR} + PATH_SUFFIXES + ${LibUSB_LIBRARY_PATH_SUFFIX_RELEASE} + ) + +find_library ( LibUSB_LIBRARY_DEBUG + NAMES + libusb libusb-1.0 libusb-1.0d usb + PATHS + $ENV{ProgramFiles}/LibUSB-Win32 + $ENV{LibUSB_ROOT_DIR} + PATH_SUFFIXES + ${LibUSB_LIBRARY_PATH_SUFFIX_DEBUG} + ) + +set (LibUSB_LIBRARIES + debug ${LibUSB_LIBRARY_DEBUG} + optimized ${LibUSB_LIBRARY_RELEASE} + ) + +if ( LibUSB_INCLUDE_DIR AND LibUSB_LIBRARIES ) + set ( LibUSB_FOUND 1 ) +endif ( LibUSB_INCLUDE_DIR AND LibUSB_LIBRARIES ) + +if ( LibUSB_FOUND ) + set ( CMAKE_REQUIRED_INCLUDES "${LibUSB_INCLUDE_DIR}" ) + check_include_file ( usb.h LibUSB_FOUND ) +endif ( LibUSB_FOUND ) + +if ( LibUSB_FOUND ) + check_library_exists ( "${LibUSB_LIBRARIES}" usb_open "" LibUSB_FOUND ) +endif ( LibUSB_FOUND ) + +if ( NOT LibUSB_FOUND ) + if ( NOT LibUSB_FIND_QUIETLY ) + message ( STATUS "LibUSB not found, try setting LibUSB_ROOT_DIR environment variable." ) + endif ( NOT LibUSB_FIND_QUIETLY ) + if ( LibUSB_FIND_REQUIRED ) + message ( FATAL_ERROR "LibUSB could not be found." ) + endif ( LibUSB_FIND_REQUIRED ) +endif ( NOT LibUSB_FOUND ) diff --git a/examples/protonect/cmake_modules/FindOpenCL.cmake b/examples/protonect/cmake_modules/FindOpenCL.cmake index 2c9672b3a..58dce0415 100644 --- a/examples/protonect/cmake_modules/FindOpenCL.cmake +++ b/examples/protonect/cmake_modules/FindOpenCL.cmake @@ -11,7 +11,6 @@ # OPENCL_INCLUDE_DIRS - the OpenCL include directory # OPENCL_LIBRARIES - link these to use OpenCL # -# WIN32 should work, but is untested FIND_PACKAGE(PackageHandleStandardArgs) @@ -31,11 +30,11 @@ ELSE (APPLE) IF (WIN32) # The AMD SDK currently installs both x86 and x86_64 libraries # This is only a hack to find out architecture - IF( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64" ) + IF( ${CMAKE_SIZEOF_VOID_P} EQUAL 8 ) FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" PATH_SUFFIXES "/lib/x86_64") - ELSE (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64") + ELSE (${CMAKE_SIZEOF_VOID_P} EQUAL 8) FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" PATH_SUFFIXES "/lib/x86") - ENDIF( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64" ) + ENDIF( ${CMAKE_SIZEOF_VOID_P} EQUAL 8 ) # On Win32 search relative to the library FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" PATH_SUFFIXES "/include") diff --git a/examples/protonect/cmake_modules/FindTurboJPEG.cmake b/examples/protonect/cmake_modules/FindTurboJPEG.cmake new file mode 100644 index 000000000..42dec6a11 --- /dev/null +++ b/examples/protonect/cmake_modules/FindTurboJPEG.cmake @@ -0,0 +1,55 @@ +include(CheckCSourceCompiles) + +if(NOT TurboJPEG_INCLUDE_DIR) + if(WIN32) + if(${CMAKE_SIZEOF_VOID_P} EQUAL 8) + set(DEFAULT_TurboJPEG_INCLUDE_DIR $ENV{TurboJPEG64_ROOT}/include) + else() + set(DEFAULT_TurboJPEG_INCLUDE_DIR $ENV{TurboJPEG_ROOT}/include) + endif() + else() + set(DEFAULT_TurboJPEG_INCLUDE_DIR /opt/libjpeg-turbo/include) + endif() +else() + set(DEFAULT_TurboJPEG_INCLUDE_DIR ${TurboJPEG_INCLUDE_DIR}) + unset(TurboJPEG_INCLUDE_DIR) + unset(TurboJPEG_INCLUDE_DIR CACHE) +endif() + +find_path(TurboJPEG_INCLUDE_DIR turbojpeg.h DOC "TurboJPEG include directory (default: ${DEFAULT_TurboJPEG_INCLUDE_DIR})" HINTS ${DEFAULT_TurboJPEG_INCLUDE_DIR}) + +if(TurboJPEG_INCLUDE_DIR STREQUAL "TurboJPEG_INCLUDE_DIR-NOTFOUND") + message(FATAL_ERROR "Could not find turbojpeg.h - Try define TurboJPEG_ROOT as a system variable.") +else() + message(STATUS "TurboJPEG_INCLUDE_DIR = ${TurboJPEG_INCLUDE_DIR}") +endif() + + +if(WIN32) + if(${CMAKE_SIZEOF_VOID_P} EQUAL 8) + set(DEFAULT_TurboJPEG_LIBRARY $ENV{TurboJPEG64_ROOT}/lib/turbojpeg.lib) + else() + set(DEFAULT_TurboJPEG_LIBRARY $ENV{TurboJPEG_ROOT}/lib/turbojpeg.lib) + endif() +else() + find_library(DEFAULT_TurboJPEG_LIBRARY NAMES libturbojpeg.so libturbojpeg.a + HINTS /opt/libjpeg-turbo/lib64/ /opt/libjpeg-turbo/lib/) +endif() + +set(TurboJPEG_LIBRARY ${DEFAULT_TurboJPEG_LIBRARY} CACHE PATH + "TurboJPEG library path (default: ${DEFAULT_TurboJPEG_LIBRARY})") + +if(WIN32) + set(CMAKE_REQUIRED_DEFINITIONS -MT) +endif() +set(CMAKE_REQUIRED_INCLUDES ${TurboJPEG_INCLUDE_DIR}) +set(CMAKE_REQUIRED_LIBRARIES ${TurboJPEG_LIBRARY}) +check_c_source_compiles("#include \nint main(void) { tjhandle h=tjInitCompress(); return 0; }" TURBOJPEG_WORKS) +set(CMAKE_REQUIRED_DEFINITIONS) +set(CMAKE_REQUIRED_INCLUDES) +set(CMAKE_REQUIRED_LIBRARIES) +if(NOT TURBOJPEG_WORKS) + message(FATAL_ERROR "Could not link with TurboJPEG library ${TurboJPEG_LIBRARY}. If it is installed in a different place, then set TurboJPEG_LIBRARY accordingly.") +endif() + +message(STATUS "TurboJPEG_LIBRARY = ${TurboJPEG_LIBRARY}") From fbdd2896d76d53d30a2fca7c06721d8835c51844 Mon Sep 17 00:00:00 2001 From: Lars Glud Date: Tue, 26 May 2015 10:55:17 +0200 Subject: [PATCH 2/6] Added intelSDK enviroment path. --- examples/protonect/cmake_modules/FindOpenCL.cmake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/protonect/cmake_modules/FindOpenCL.cmake b/examples/protonect/cmake_modules/FindOpenCL.cmake index 58dce0415..a062c9e21 100644 --- a/examples/protonect/cmake_modules/FindOpenCL.cmake +++ b/examples/protonect/cmake_modules/FindOpenCL.cmake @@ -31,14 +31,14 @@ ELSE (APPLE) # The AMD SDK currently installs both x86 and x86_64 libraries # This is only a hack to find out architecture IF( ${CMAKE_SIZEOF_VOID_P} EQUAL 8 ) - FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" PATH_SUFFIXES "/lib/x86_64") + FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" "$ENV{INTELOCLSDKROOT}" PATH_SUFFIXES "/lib/x86_64" "/lib/x64") ELSE (${CMAKE_SIZEOF_VOID_P} EQUAL 8) - FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" PATH_SUFFIXES "/lib/x86") + FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" "$ENV{INTELOCLSDKROOT}" PATH_SUFFIXES "/lib/x86") ENDIF( ${CMAKE_SIZEOF_VOID_P} EQUAL 8 ) # On Win32 search relative to the library - FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" PATH_SUFFIXES "/include") - FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" PATH_SUFFIXES "/include") + FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" "$ENV{INTELOCLSDKROOT}" PATH_SUFFIXES "/include") + FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" "$ENV{INTELOCLSDKROOT}" PATH_SUFFIXES "/include") ELSE (WIN32) From 8ba8e2226c5c819f4ba26b71414cc42e5bfe49a2 Mon Sep 17 00:00:00 2001 From: Lars Glud Date: Tue, 26 May 2015 11:09:16 +0200 Subject: [PATCH 3/6] Corrected indention. Removed Lib found announcement. Removed lib was already known. --- examples/protonect/CMakeLists.txt | 75 ++++++++----------- .../protonect/cmake_modules/FindGLFW3.cmake | 7 +- .../protonect/cmake_modules/FindLibUsb.cmake | 70 ++++++++--------- .../cmake_modules/FindTurboJPEG.cmake | 42 +++++------ 4 files changed, 91 insertions(+), 103 deletions(-) diff --git a/examples/protonect/CMakeLists.txt b/examples/protonect/CMakeLists.txt index 4566ee891..39021826e 100644 --- a/examples/protonect/CMakeLists.txt +++ b/examples/protonect/CMakeLists.txt @@ -1,20 +1,13 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6) macro(auto_detect_lib LIBNAME) - if(NOT DEFINED ${${LIBNAME}_FOUND}) - if ( PKG_CONFIG_FOUND ) - string(TOLOWER ${LIBNAME} PKGCONFIGNAME) - pkg_check_modules(${LIBNAME} ${PKGCONFIGNAME} ${ARGN}) - if(${${LIBNAME}_FOUND}) - MESSAGE(STATUS "LIB ${LIBNAME} found and include is in ${${LIBNAME}_INCLUDE_DIRS}") - endif() - else(PKG_CONFIG_FOUND) - #MESSAGE("Fallback to non-pkg-config") - FIND_PACKAGE(${LIBNAME} ${ARGN}) - endif(PKG_CONFIG_FOUND) - else() - MESSAGE(STATUS "LIB was already known ${LIBNAME} becasue of ${${LIBNAME}_FOUND}") - endif() + if ( PKG_CONFIG_FOUND ) + string(TOLOWER ${LIBNAME} PKGCONFIGNAME) + pkg_check_modules(${LIBNAME} ${PKGCONFIGNAME} ${ARGN}) + else(PKG_CONFIG_FOUND) + #MESSAGE("Fallback to non-pkg-config") + FIND_PACKAGE(${LIBNAME} ${ARGN}) + endif(PKG_CONFIG_FOUND) endmacro() PROJECT(libfreenect2) @@ -31,9 +24,9 @@ IF(ENABLE_CXX11) CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) IF(COMPILER_SUPPORTS_CXX11) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") ELSEIF(COMPILER_SUPPORTS_CXX0X) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") ELSE() MESSAGE(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") ENDIF() @@ -54,17 +47,14 @@ SET(EXECUTABLE_OUTPUT_PATH ${MY_DIR}/bin) SET(LIBRARY_OUTPUT_PATH ${MY_DIR}/lib) # dependencies -find_package(PkgConfig) # try find PKGConfig as it will be used if found +find_package(PkgConfig) # try find PKGConfig as it will be used if found auto_detect_lib(LibUSB REQUIRED) auto_detect_lib(OpenCV REQUIRED) FIND_PACKAGE(TurboJPEG REQUIRED) #does not provide a package-config file #hack for buggy libusb pkgconfig file if(NOT LibUSB_INCLUDE_DIR) - find_path(LibUSB_INCLUDE_DIR - NAMES libusb.h - PATHS /usr/include/libusb-1.0 - ) + find_path(LibUSB_INCLUDE_DIR NAMES libusb.h PATHS /usr/include/libusb-1.0 ) endif() # Add includes @@ -138,14 +128,13 @@ SET(RESOURCES zTable.bin ) - IF(ENABLE_OPENGL) auto_detect_lib(GLFW3) #Assuming local build witout global deps, ugly to to this automatic but to keep backward compatibiliy if(${GLFW3_FOUND} STREQUAL "FALSE") - MESSAGE(STATUS "Building local GLFW") + MESSAGE(STATUS "Building local GLFW") # GLFW SET(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries") SET(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "Build the GLFW example programs") @@ -154,11 +143,11 @@ IF(ENABLE_OPENGL) ADD_SUBDIRECTORY(${MY_DIR}/../../depends/glfw_src/ ${MY_DIR}/../../depends/glfw) INCLUDE_DIRECTORIES(${MY_DIR}/../../depends/glfw_src/include/) - - LIST(APPEND LIBRARIES - glfw - ) - + + LIST(APPEND LIBRARIES + glfw + ) + else() INCLUDE_DIRECTORIES(${GLFW3_INCLUDE_DIRS}) @@ -187,21 +176,21 @@ ENDIF(ENABLE_OPENGL) IF(ENABLE_OPENCL) FIND_PACKAGE(OpenCL) - IF(OPENCL_FOUND) - SET(LIBFREENECT2_WITH_OPENCL_SUPPORT 1) - INCLUDE_DIRECTORIES(${OPENCL_INCLUDE_DIRS}) - - LIST(APPEND SOURCES - src/opencl_depth_packet_processor.cpp - ) - - LIST(APPEND LIBRARIES - ${OPENCL_LIBRARIES} - ) - - LIST(APPEND RESOURCES - src/opencl_depth_packet_processor.cl - ) + IF(OPENCL_FOUND) + SET(LIBFREENECT2_WITH_OPENCL_SUPPORT 1) + INCLUDE_DIRECTORIES(${OPENCL_INCLUDE_DIRS}) + + LIST(APPEND SOURCES + src/opencl_depth_packet_processor.cpp + ) + + LIST(APPEND LIBRARIES + ${OPENCL_LIBRARIES} + ) + + LIST(APPEND RESOURCES + src/opencl_depth_packet_processor.cl + ) ENDIF(OPENCL_FOUND) ENDIF(ENABLE_OPENCL) diff --git a/examples/protonect/cmake_modules/FindGLFW3.cmake b/examples/protonect/cmake_modules/FindGLFW3.cmake index b3a2bc3a2..ba8a89383 100644 --- a/examples/protonect/cmake_modules/FindGLFW3.cmake +++ b/examples/protonect/cmake_modules/FindGLFW3.cmake @@ -8,10 +8,9 @@ include(FindPackageHandleStandardArgs) IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - find_path(GLFW3_INCLUDE_DIRS glfw/glfw3.h DOC "GLFW include directory " HINTS $ENV{GLFW_ROOT}/include) - - find_library(GLFW3_LIBRARIES NAMES glfw3dll.lib HINTS $ENV{GLFW_ROOT}/lib/) - + find_path(GLFW3_INCLUDE_DIRS glfw/glfw3.h DOC "GLFW include directory " HINTS $ENV{GLFW_ROOT}/include) + + find_library(GLFW3_LIBRARIES NAMES glfw3dll.lib HINTS $ENV{GLFW_ROOT}/lib/) ENDIF() find_package_handle_standard_args(GLFW3 "Could not find GLFW3 - try adding GLFW_ROOT in enviroment variables." GLFW3_INCLUDE_DIRS GLFW3_LIBRARIES) \ No newline at end of file diff --git a/examples/protonect/cmake_modules/FindLibUsb.cmake b/examples/protonect/cmake_modules/FindLibUsb.cmake index f1e5750b4..9d37c436d 100644 --- a/examples/protonect/cmake_modules/FindLibUsb.cmake +++ b/examples/protonect/cmake_modules/FindLibUsb.cmake @@ -7,21 +7,21 @@ # it on its own. If the LibUSB_ROOT_DIR environment variable # is defined, it will be used as base path. # The following standard variables get defined: -# LibUSB_FOUND: true if LibUSB was found +# LibUSB_FOUND: true if LibUSB was found # LibUSB_INCLUDE_DIR: the directory that contains the include file -# LibUSB_LIBRARIES: the library +# LibUSB_LIBRARIES: the library include ( CheckLibraryExists ) include ( CheckIncludeFile ) find_path ( LibUSB_INCLUDE_DIR - NAMES - libusb.h - PATHS - $ENV{ProgramFiles}/LibUSB-Win32 - $ENV{LibUSB_ROOT_DIR} - PATH_SUFFIXES - libusb + NAMES + libusb.h + PATHS + $ENV{ProgramFiles}/LibUSB-Win32 + $ENV{LibUSB_ROOT_DIR} + PATH_SUFFIXES + libusb ) mark_as_advanced ( LibUSB_INCLUDE_DIR ) @@ -30,40 +30,40 @@ if ( ${CMAKE_SYSTEM_NAME} STREQUAL "Windows" ) # LibUSB-Win32 binary distribution contains several libs. # Use the lib that got compiled with the same compiler. if ( MSVC ) - if ( ${CMAKE_SIZEOF_VOID_P} EQUAL 8 ) - set ( LibUSB_LIBRARY_PATH_SUFFIX_RELEASE x64/Release/dll ) - set ( LibUSB_LIBRARY_PATH_SUFFIX_DEBUG x64/Debug/dll ) - else () - set ( LibUSB_LIBRARY_PATH_SUFFIX_RELEASE win32/Release/dll ) - set ( LibUSB_LIBRARY_PATH_SUFFIX_DEBUG win32/Debug/dll ) - endif () + if ( ${CMAKE_SIZEOF_VOID_P} EQUAL 8 ) + set ( LibUSB_LIBRARY_PATH_SUFFIX_RELEASE x64/Release/dll ) + set ( LibUSB_LIBRARY_PATH_SUFFIX_DEBUG x64/Debug/dll ) + else () + set ( LibUSB_LIBRARY_PATH_SUFFIX_RELEASE win32/Release/dll ) + set ( LibUSB_LIBRARY_PATH_SUFFIX_DEBUG win32/Debug/dll ) + endif () endif ( MSVC ) endif ( ${CMAKE_SYSTEM_NAME} STREQUAL "Windows" ) find_library ( LibUSB_LIBRARY_RELEASE - NAMES - libusb libusb-1.0 usb - PATHS - $ENV{ProgramFiles}/LibUSB-Win32 - $ENV{LibUSB_ROOT_DIR} - PATH_SUFFIXES - ${LibUSB_LIBRARY_PATH_SUFFIX_RELEASE} + NAMES + libusb libusb-1.0 usb + PATHS + $ENV{ProgramFiles}/LibUSB-Win32 + $ENV{LibUSB_ROOT_DIR} + PATH_SUFFIXES + ${LibUSB_LIBRARY_PATH_SUFFIX_RELEASE} ) find_library ( LibUSB_LIBRARY_DEBUG - NAMES - libusb libusb-1.0 libusb-1.0d usb - PATHS - $ENV{ProgramFiles}/LibUSB-Win32 - $ENV{LibUSB_ROOT_DIR} - PATH_SUFFIXES - ${LibUSB_LIBRARY_PATH_SUFFIX_DEBUG} + NAMES + libusb libusb-1.0 libusb-1.0d usb + PATHS + $ENV{ProgramFiles}/LibUSB-Win32 + $ENV{LibUSB_ROOT_DIR} + PATH_SUFFIXES + ${LibUSB_LIBRARY_PATH_SUFFIX_DEBUG} ) set (LibUSB_LIBRARIES - debug ${LibUSB_LIBRARY_DEBUG} - optimized ${LibUSB_LIBRARY_RELEASE} - ) + debug ${LibUSB_LIBRARY_DEBUG} + optimized ${LibUSB_LIBRARY_RELEASE} + ) if ( LibUSB_INCLUDE_DIR AND LibUSB_LIBRARIES ) set ( LibUSB_FOUND 1 ) @@ -80,9 +80,9 @@ endif ( LibUSB_FOUND ) if ( NOT LibUSB_FOUND ) if ( NOT LibUSB_FIND_QUIETLY ) - message ( STATUS "LibUSB not found, try setting LibUSB_ROOT_DIR environment variable." ) + message ( STATUS "LibUSB not found, try setting LibUSB_ROOT_DIR environment variable." ) endif ( NOT LibUSB_FIND_QUIETLY ) if ( LibUSB_FIND_REQUIRED ) - message ( FATAL_ERROR "LibUSB could not be found." ) + message ( FATAL_ERROR "LibUSB could not be found." ) endif ( LibUSB_FIND_REQUIRED ) endif ( NOT LibUSB_FOUND ) diff --git a/examples/protonect/cmake_modules/FindTurboJPEG.cmake b/examples/protonect/cmake_modules/FindTurboJPEG.cmake index 42dec6a11..7209525b8 100644 --- a/examples/protonect/cmake_modules/FindTurboJPEG.cmake +++ b/examples/protonect/cmake_modules/FindTurboJPEG.cmake @@ -1,36 +1,36 @@ include(CheckCSourceCompiles) if(NOT TurboJPEG_INCLUDE_DIR) - if(WIN32) - if(${CMAKE_SIZEOF_VOID_P} EQUAL 8) - set(DEFAULT_TurboJPEG_INCLUDE_DIR $ENV{TurboJPEG64_ROOT}/include) - else() - set(DEFAULT_TurboJPEG_INCLUDE_DIR $ENV{TurboJPEG_ROOT}/include) - endif() - else() - set(DEFAULT_TurboJPEG_INCLUDE_DIR /opt/libjpeg-turbo/include) - endif() + if(WIN32) + if(${CMAKE_SIZEOF_VOID_P} EQUAL 8) + set(DEFAULT_TurboJPEG_INCLUDE_DIR $ENV{TurboJPEG64_ROOT}/include) + else() + set(DEFAULT_TurboJPEG_INCLUDE_DIR $ENV{TurboJPEG_ROOT}/include) + endif() + else() + set(DEFAULT_TurboJPEG_INCLUDE_DIR /opt/libjpeg-turbo/include) + endif() else() - set(DEFAULT_TurboJPEG_INCLUDE_DIR ${TurboJPEG_INCLUDE_DIR}) - unset(TurboJPEG_INCLUDE_DIR) - unset(TurboJPEG_INCLUDE_DIR CACHE) + set(DEFAULT_TurboJPEG_INCLUDE_DIR ${TurboJPEG_INCLUDE_DIR}) + unset(TurboJPEG_INCLUDE_DIR) + unset(TurboJPEG_INCLUDE_DIR CACHE) endif() find_path(TurboJPEG_INCLUDE_DIR turbojpeg.h DOC "TurboJPEG include directory (default: ${DEFAULT_TurboJPEG_INCLUDE_DIR})" HINTS ${DEFAULT_TurboJPEG_INCLUDE_DIR}) if(TurboJPEG_INCLUDE_DIR STREQUAL "TurboJPEG_INCLUDE_DIR-NOTFOUND") - message(FATAL_ERROR "Could not find turbojpeg.h - Try define TurboJPEG_ROOT as a system variable.") + message(FATAL_ERROR "Could not find turbojpeg.h - Try define TurboJPEG_ROOT as a system variable.") else() - message(STATUS "TurboJPEG_INCLUDE_DIR = ${TurboJPEG_INCLUDE_DIR}") + message(STATUS "TurboJPEG_INCLUDE_DIR = ${TurboJPEG_INCLUDE_DIR}") endif() if(WIN32) - if(${CMAKE_SIZEOF_VOID_P} EQUAL 8) - set(DEFAULT_TurboJPEG_LIBRARY $ENV{TurboJPEG64_ROOT}/lib/turbojpeg.lib) - else() - set(DEFAULT_TurboJPEG_LIBRARY $ENV{TurboJPEG_ROOT}/lib/turbojpeg.lib) - endif() + if(${CMAKE_SIZEOF_VOID_P} EQUAL 8) + set(DEFAULT_TurboJPEG_LIBRARY $ENV{TurboJPEG64_ROOT}/lib/turbojpeg.lib) + else() + set(DEFAULT_TurboJPEG_LIBRARY $ENV{TurboJPEG_ROOT}/lib/turbojpeg.lib) + endif() else() find_library(DEFAULT_TurboJPEG_LIBRARY NAMES libturbojpeg.so libturbojpeg.a HINTS /opt/libjpeg-turbo/lib64/ /opt/libjpeg-turbo/lib/) @@ -40,7 +40,7 @@ set(TurboJPEG_LIBRARY ${DEFAULT_TurboJPEG_LIBRARY} CACHE PATH "TurboJPEG library path (default: ${DEFAULT_TurboJPEG_LIBRARY})") if(WIN32) - set(CMAKE_REQUIRED_DEFINITIONS -MT) + set(CMAKE_REQUIRED_DEFINITIONS -MT) endif() set(CMAKE_REQUIRED_INCLUDES ${TurboJPEG_INCLUDE_DIR}) set(CMAKE_REQUIRED_LIBRARIES ${TurboJPEG_LIBRARY}) @@ -49,7 +49,7 @@ set(CMAKE_REQUIRED_DEFINITIONS) set(CMAKE_REQUIRED_INCLUDES) set(CMAKE_REQUIRED_LIBRARIES) if(NOT TURBOJPEG_WORKS) - message(FATAL_ERROR "Could not link with TurboJPEG library ${TurboJPEG_LIBRARY}. If it is installed in a different place, then set TurboJPEG_LIBRARY accordingly.") + message(FATAL_ERROR "Could not link with TurboJPEG library ${TurboJPEG_LIBRARY}. If it is installed in a different place, then set TurboJPEG_LIBRARY accordingly.") endif() message(STATUS "TurboJPEG_LIBRARY = ${TurboJPEG_LIBRARY}") From 63f18cc6cef2e3b6a0201075d499356a8f322a01 Mon Sep 17 00:00:00 2001 From: Lars Glud Date: Tue, 26 May 2015 11:20:40 +0200 Subject: [PATCH 4/6] Removed _DIR from the path variable to be consistent with other libraries. --- examples/protonect/cmake_modules/FindLibUsb.cmake | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/protonect/cmake_modules/FindLibUsb.cmake b/examples/protonect/cmake_modules/FindLibUsb.cmake index 9d37c436d..ffebdf1e4 100644 --- a/examples/protonect/cmake_modules/FindLibUsb.cmake +++ b/examples/protonect/cmake_modules/FindLibUsb.cmake @@ -4,7 +4,7 @@ # http://libusb-win32.sf.net # # It will use PkgConfig if present and supported, else search -# it on its own. If the LibUSB_ROOT_DIR environment variable +# it on its own. If the LibUSB_ROOT environment variable # is defined, it will be used as base path. # The following standard variables get defined: # LibUSB_FOUND: true if LibUSB was found @@ -19,7 +19,7 @@ find_path ( LibUSB_INCLUDE_DIR libusb.h PATHS $ENV{ProgramFiles}/LibUSB-Win32 - $ENV{LibUSB_ROOT_DIR} + $ENV{LibUSB_ROOT} PATH_SUFFIXES libusb ) @@ -45,7 +45,7 @@ find_library ( LibUSB_LIBRARY_RELEASE libusb libusb-1.0 usb PATHS $ENV{ProgramFiles}/LibUSB-Win32 - $ENV{LibUSB_ROOT_DIR} + $ENV{LibUSB_ROOT} PATH_SUFFIXES ${LibUSB_LIBRARY_PATH_SUFFIX_RELEASE} ) @@ -55,7 +55,7 @@ find_library ( LibUSB_LIBRARY_DEBUG libusb libusb-1.0 libusb-1.0d usb PATHS $ENV{ProgramFiles}/LibUSB-Win32 - $ENV{LibUSB_ROOT_DIR} + $ENV{LibUSB_ROOT} PATH_SUFFIXES ${LibUSB_LIBRARY_PATH_SUFFIX_DEBUG} ) @@ -80,7 +80,7 @@ endif ( LibUSB_FOUND ) if ( NOT LibUSB_FOUND ) if ( NOT LibUSB_FIND_QUIETLY ) - message ( STATUS "LibUSB not found, try setting LibUSB_ROOT_DIR environment variable." ) + message ( STATUS "LibUSB not found, try setting LibUSB_ROOT environment variable." ) endif ( NOT LibUSB_FIND_QUIETLY ) if ( LibUSB_FIND_REQUIRED ) message ( FATAL_ERROR "LibUSB could not be found." ) From d817966b518393bd0fff9596d041c401b432199b Mon Sep 17 00:00:00 2001 From: Lars Glud Date: Tue, 26 May 2015 16:30:22 +0200 Subject: [PATCH 5/6] Changed to have a single enviroment variable. So you set it up for either 32 or 64 bits. Not both. --- .../cmake_modules/FindTurboJPEG.cmake | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/examples/protonect/cmake_modules/FindTurboJPEG.cmake b/examples/protonect/cmake_modules/FindTurboJPEG.cmake index 7209525b8..bbdb999a1 100644 --- a/examples/protonect/cmake_modules/FindTurboJPEG.cmake +++ b/examples/protonect/cmake_modules/FindTurboJPEG.cmake @@ -2,11 +2,7 @@ include(CheckCSourceCompiles) if(NOT TurboJPEG_INCLUDE_DIR) if(WIN32) - if(${CMAKE_SIZEOF_VOID_P} EQUAL 8) - set(DEFAULT_TurboJPEG_INCLUDE_DIR $ENV{TurboJPEG64_ROOT}/include) - else() - set(DEFAULT_TurboJPEG_INCLUDE_DIR $ENV{TurboJPEG_ROOT}/include) - endif() + set(DEFAULT_TurboJPEG_INCLUDE_DIR $ENV{TurboJPEG_ROOT}/include) else() set(DEFAULT_TurboJPEG_INCLUDE_DIR /opt/libjpeg-turbo/include) endif() @@ -26,18 +22,12 @@ endif() if(WIN32) - if(${CMAKE_SIZEOF_VOID_P} EQUAL 8) - set(DEFAULT_TurboJPEG_LIBRARY $ENV{TurboJPEG64_ROOT}/lib/turbojpeg.lib) - else() - set(DEFAULT_TurboJPEG_LIBRARY $ENV{TurboJPEG_ROOT}/lib/turbojpeg.lib) - endif() + set(DEFAULT_TurboJPEG_LIBRARY $ENV{TurboJPEG_ROOT}/lib/turbojpeg.lib) else() - find_library(DEFAULT_TurboJPEG_LIBRARY NAMES libturbojpeg.so libturbojpeg.a - HINTS /opt/libjpeg-turbo/lib64/ /opt/libjpeg-turbo/lib/) + find_library(DEFAULT_TurboJPEG_LIBRARY NAMES libturbojpeg.so libturbojpeg.a HINTS /opt/libjpeg-turbo/lib64/ /opt/libjpeg-turbo/lib/) endif() -set(TurboJPEG_LIBRARY ${DEFAULT_TurboJPEG_LIBRARY} CACHE PATH - "TurboJPEG library path (default: ${DEFAULT_TurboJPEG_LIBRARY})") +set(TurboJPEG_LIBRARY ${DEFAULT_TurboJPEG_LIBRARY} CACHE PATH "TurboJPEG library path (default: ${DEFAULT_TurboJPEG_LIBRARY})") if(WIN32) set(CMAKE_REQUIRED_DEFINITIONS -MT) From afd1d5bee0895895bcaff00e16d18e3e2990a1ca Mon Sep 17 00:00:00 2001 From: Lars Glud Date: Tue, 26 May 2015 16:46:31 +0200 Subject: [PATCH 6/6] Added two missing spaces. --- examples/protonect/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/protonect/CMakeLists.txt b/examples/protonect/CMakeLists.txt index 39021826e..a30b9f93a 100644 --- a/examples/protonect/CMakeLists.txt +++ b/examples/protonect/CMakeLists.txt @@ -24,7 +24,7 @@ IF(ENABLE_CXX11) CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) IF(COMPILER_SUPPORTS_CXX11) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") ELSEIF(COMPILER_SUPPORTS_CXX0X) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") ELSE()