Skip to content

Added FindLibrary files for various libraries #68

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Jun 3, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ examples/protonect/include/libfreenect2/config.h

# generated resource file
examples/protonect/src/resources.inc
examples/protonect/build

# Dependency folders
depends/*/
Expand Down
129 changes: 77 additions & 52 deletions examples/protonect/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)

macro(auto_detect_lib LIBNAME)
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)
SET(CMAKE_BUILD_TYPE RelWithDebInfo)

Expand All @@ -14,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()
Expand All @@ -27,7 +37,6 @@ LIST(APPEND CMAKE_MODULE_PATH ${MY_DIR}/cmake_modules)

# setup threading
INCLUDE(SetupLibfreenect2Threading)
INCLUDE_DIRECTORIES(${LIBFREENECT2_THREADING_INCLUDE_DIR})

INCLUDE(GenerateResources)

Expand All @@ -37,30 +46,21 @@ 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/")
Expand Down Expand Up @@ -115,9 +115,10 @@ SET(SOURCES
)

SET(LIBRARIES
usb-1.0
${OpenCV_LIBS}
turbojpeg
${OpenCV_LIBRARIES}
${LibUSB_LIBRARIES}
${TurboJPEG_LIBRARY}
${LIBFREENECT2_THREADING_LIBRARIES}
)

Expand All @@ -127,19 +128,41 @@ 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")
# 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
Expand All @@ -150,31 +173,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
Expand Down
16 changes: 16 additions & 0 deletions examples/protonect/cmake_modules/FindGLFW3.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# - 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)
88 changes: 88 additions & 0 deletions examples/protonect/cmake_modules/FindLibUsb.cmake
Original file line number Diff line number Diff line change
@@ -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 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}
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}
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}
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 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 )
15 changes: 7 additions & 8 deletions examples/protonect/cmake_modules/FindOpenCL.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -31,15 +30,15 @@ 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" )
FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" PATH_SUFFIXES "/lib/x86_64")
ELSE (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64")
FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" PATH_SUFFIXES "/lib/x86")
ENDIF( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64" )
IF( ${CMAKE_SIZEOF_VOID_P} EQUAL 8 )
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}" "$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)

Expand Down
45 changes: 45 additions & 0 deletions examples/protonect/cmake_modules/FindTurboJPEG.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
include(CheckCSourceCompiles)

if(NOT TurboJPEG_INCLUDE_DIR)
if(WIN32)
set(DEFAULT_TurboJPEG_INCLUDE_DIR $ENV{TurboJPEG_ROOT}/include)
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)
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/)
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 <turbojpeg.h>\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}")