Skip to content

Commit 007f7ec

Browse files
committed
Merge pull request #68 from larshg/libfreenect2FindLibs
Added FindLibrary files for various libraries
2 parents 9720e6e + afd1d5b commit 007f7ec

File tree

6 files changed

+234
-60
lines changed

6 files changed

+234
-60
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ examples/protonect/include/libfreenect2/config.h
33

44
# generated resource file
55
examples/protonect/src/resources.inc
6+
examples/protonect/build
67

78
# Dependency folders
89
depends/*/

examples/protonect/CMakeLists.txt

Lines changed: 77 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
22

3+
macro(auto_detect_lib LIBNAME)
4+
if ( PKG_CONFIG_FOUND )
5+
string(TOLOWER ${LIBNAME} PKGCONFIGNAME)
6+
pkg_check_modules(${LIBNAME} ${PKGCONFIGNAME} ${ARGN})
7+
else(PKG_CONFIG_FOUND)
8+
#MESSAGE("Fallback to non-pkg-config")
9+
FIND_PACKAGE(${LIBNAME} ${ARGN})
10+
endif(PKG_CONFIG_FOUND)
11+
endmacro()
12+
313
PROJECT(libfreenect2)
414
SET(CMAKE_BUILD_TYPE RelWithDebInfo)
515

@@ -14,9 +24,9 @@ IF(ENABLE_CXX11)
1424
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
1525
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
1626
IF(COMPILER_SUPPORTS_CXX11)
17-
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
27+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
1828
ELSEIF(COMPILER_SUPPORTS_CXX0X)
19-
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
29+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
2030
ELSE()
2131
MESSAGE(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
2232
ENDIF()
@@ -27,7 +37,6 @@ LIST(APPEND CMAKE_MODULE_PATH ${MY_DIR}/cmake_modules)
2737

2838
# setup threading
2939
INCLUDE(SetupLibfreenect2Threading)
30-
INCLUDE_DIRECTORIES(${LIBFREENECT2_THREADING_INCLUDE_DIR})
3140

3241
INCLUDE(GenerateResources)
3342

@@ -37,30 +46,21 @@ SET(EXECUTABLE_OUTPUT_PATH ${MY_DIR}/bin)
3746
#set the default path for built libraries to the "lib" directory
3847
SET(LIBRARY_OUTPUT_PATH ${MY_DIR}/lib)
3948

40-
FIND_PACKAGE(OpenCL)
41-
4249
# dependencies
43-
FIND_PACKAGE(OpenCV REQUIRED)
44-
45-
# OpenCV
46-
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIR})
47-
48-
# LibUSB
49-
INCLUDE_DIRECTORIES("${MY_DIR}/../../depends/libusb/include/libusb-1.0/")
50-
LINK_DIRECTORIES("${MY_DIR}/../../depends/libusb/lib/")
50+
find_package(PkgConfig) # try find PKGConfig as it will be used if found
51+
auto_detect_lib(LibUSB REQUIRED)
52+
auto_detect_lib(OpenCV REQUIRED)
53+
FIND_PACKAGE(TurboJPEG REQUIRED) #does not provide a package-config file
54+
55+
#hack for buggy libusb pkgconfig file
56+
if(NOT LibUSB_INCLUDE_DIR)
57+
find_path(LibUSB_INCLUDE_DIR NAMES libusb.h PATHS /usr/include/libusb-1.0 )
58+
endif()
5159

52-
IF(ENABLE_OPENGL)
53-
# GLFW
54-
SET(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries")
55-
SET(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "Build the GLFW example programs")
56-
SET(GLFW_BUILD_TESTS OFF CACHE BOOL "Build the GLFW test programs")
57-
SET(GLFW_BUILD_DOCS OFF CACHE BOOL "Build the GLFW documentation")
58-
59-
ADD_SUBDIRECTORY(${MY_DIR}/../../depends/glfw_src/ ${MY_DIR}/../../depends/glfw)
60-
INCLUDE_DIRECTORIES(${MY_DIR}/../../depends/glfw_src/include/)
61-
ENDIF(ENABLE_OPENGL)
60+
# Add includes
61+
INCLUDE_DIRECTORIES("${MY_DIR}/include" ${LIBFREENECT2_THREADING_INCLUDE_DIR} ${OpenCV_INCLUDE_DIRS} ${LibUSB_INCLUDE_DIR} ${TurboJPEG_INCLUDE_DIR})
6262

63-
if(APPLE)
63+
if(APPLE AND NOT ${TurboJPEG_FOUND})
6464
# libjpeg-turbo
6565
INCLUDE_DIRECTORIES("${MY_DIR}/../../depends/libjpeg_turbo/include/")
6666
LINK_DIRECTORIES("${MY_DIR}/../../depends/libjpeg_turbo/lib/")
@@ -115,9 +115,10 @@ SET(SOURCES
115115
)
116116

117117
SET(LIBRARIES
118-
usb-1.0
119118
${OpenCV_LIBS}
120-
turbojpeg
119+
${OpenCV_LIBRARIES}
120+
${LibUSB_LIBRARIES}
121+
${TurboJPEG_LIBRARY}
121122
${LIBFREENECT2_THREADING_LIBRARIES}
122123
)
123124

@@ -127,19 +128,41 @@ SET(RESOURCES
127128
zTable.bin
128129
)
129130

130-
131131
IF(ENABLE_OPENGL)
132+
auto_detect_lib(GLFW3)
133+
134+
#Assuming local build witout global deps, ugly to to this automatic but to keep backward compatibiliy
135+
if(${GLFW3_FOUND} STREQUAL "FALSE")
136+
137+
MESSAGE(STATUS "Building local GLFW")
138+
# GLFW
139+
SET(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries")
140+
SET(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "Build the GLFW example programs")
141+
SET(GLFW_BUILD_TESTS OFF CACHE BOOL "Build the GLFW test programs")
142+
SET(GLFW_BUILD_DOCS OFF CACHE BOOL "Build the GLFW documentation")
143+
144+
ADD_SUBDIRECTORY(${MY_DIR}/../../depends/glfw_src/ ${MY_DIR}/../../depends/glfw)
145+
INCLUDE_DIRECTORIES(${MY_DIR}/../../depends/glfw_src/include/)
146+
147+
LIST(APPEND LIBRARIES
148+
glfw
149+
)
150+
151+
else()
152+
INCLUDE_DIRECTORIES(${GLFW3_INCLUDE_DIRS})
153+
154+
LINK_DIRECTORIES(${GLFW3_LIBRARY_DIRS})
155+
LIST(APPEND LIBRARIES
156+
${GLFW3_LIBRARIES}
157+
)
158+
endif()
159+
132160
SET(LIBFREENECT2_WITH_OPENGL_SUPPORT 1)
133161
LIST(APPEND SOURCES
134162
src/flextGL.c
135163
src/opengl_depth_packet_processor.cpp
136164
)
137-
138-
LIST(APPEND LIBRARIES
139-
glfw
140-
${GLFW_LIBRARIES}
141-
)
142-
165+
143166
LIST(APPEND RESOURCES
144167
src/shader/debug.fs
145168
src/shader/default.vs
@@ -150,31 +173,33 @@ IF(ENABLE_OPENGL)
150173
)
151174
ENDIF(ENABLE_OPENGL)
152175

153-
IF(ENABLE_OPENCL AND OPENCL_FOUND)
154-
SET(LIBFREENECT2_WITH_OPENCL_SUPPORT 1)
155-
INCLUDE_DIRECTORIES(${OPENCL_INCLUDE_DIRS})
156-
157-
LIST(APPEND SOURCES
158-
src/opencl_depth_packet_processor.cpp
159-
)
160-
161-
LIST(APPEND LIBRARIES
162-
${OPENCL_LIBRARIES}
163-
)
164-
165-
LIST(APPEND RESOURCES
166-
src/opencl_depth_packet_processor.cl
167-
)
168-
ENDIF(ENABLE_OPENCL AND OPENCL_FOUND)
176+
IF(ENABLE_OPENCL)
177+
FIND_PACKAGE(OpenCL)
178+
179+
IF(OPENCL_FOUND)
180+
SET(LIBFREENECT2_WITH_OPENCL_SUPPORT 1)
181+
INCLUDE_DIRECTORIES(${OPENCL_INCLUDE_DIRS})
182+
183+
LIST(APPEND SOURCES
184+
src/opencl_depth_packet_processor.cpp
185+
)
186+
187+
LIST(APPEND LIBRARIES
188+
${OPENCL_LIBRARIES}
189+
)
190+
191+
LIST(APPEND RESOURCES
192+
src/opencl_depth_packet_processor.cl
193+
)
194+
ENDIF(OPENCL_FOUND)
195+
ENDIF(ENABLE_OPENCL)
169196

170197
CONFIGURE_FILE("${MY_DIR}/include/libfreenect2/config.h.in" "${MY_DIR}/include/libfreenect2/config.h" @ONLY)
171-
172198
GENERATE_RESOURCES(${RESOURCES_INC_FILE} ${MY_DIR} ${RESOURCES})
173199

174-
INCLUDE_DIRECTORIES("${MY_DIR}/include")
175-
176200
ADD_DEFINITIONS(-DRESOURCES_INC)
177201
ADD_LIBRARY(freenect2 SHARED ${SOURCES})
202+
MESSAGE("Linking with these libraries: ${LIBRARIES}")
178203
TARGET_LINK_LIBRARIES(freenect2 ${LIBRARIES})
179204

180205
ADD_EXECUTABLE(Protonect
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# - Try to find GLFW3
2+
#
3+
# Will define the following:
4+
# GLFW3_FOUND
5+
# GLFW3_INCLUDE_DIRS
6+
# GLFW3_LIBRARIES
7+
8+
include(FindPackageHandleStandardArgs)
9+
10+
IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
11+
find_path(GLFW3_INCLUDE_DIRS glfw/glfw3.h DOC "GLFW include directory " HINTS $ENV{GLFW_ROOT}/include)
12+
13+
find_library(GLFW3_LIBRARIES NAMES glfw3dll.lib HINTS $ENV{GLFW_ROOT}/lib/)
14+
ENDIF()
15+
16+
find_package_handle_standard_args(GLFW3 "Could not find GLFW3 - try adding GLFW_ROOT in enviroment variables." GLFW3_INCLUDE_DIRS GLFW3_LIBRARIES)
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# - Find libusb for portable USB support
2+
# This module will find libusb as published by
3+
# http://libusb.sf.net and
4+
# http://libusb-win32.sf.net
5+
#
6+
# It will use PkgConfig if present and supported, else search
7+
# it on its own. If the LibUSB_ROOT environment variable
8+
# is defined, it will be used as base path.
9+
# The following standard variables get defined:
10+
# LibUSB_FOUND: true if LibUSB was found
11+
# LibUSB_INCLUDE_DIR: the directory that contains the include file
12+
# LibUSB_LIBRARIES: the library
13+
14+
include ( CheckLibraryExists )
15+
include ( CheckIncludeFile )
16+
17+
find_path ( LibUSB_INCLUDE_DIR
18+
NAMES
19+
libusb.h
20+
PATHS
21+
$ENV{ProgramFiles}/LibUSB-Win32
22+
$ENV{LibUSB_ROOT}
23+
PATH_SUFFIXES
24+
libusb
25+
)
26+
27+
mark_as_advanced ( LibUSB_INCLUDE_DIR )
28+
29+
if ( ${CMAKE_SYSTEM_NAME} STREQUAL "Windows" )
30+
# LibUSB-Win32 binary distribution contains several libs.
31+
# Use the lib that got compiled with the same compiler.
32+
if ( MSVC )
33+
if ( ${CMAKE_SIZEOF_VOID_P} EQUAL 8 )
34+
set ( LibUSB_LIBRARY_PATH_SUFFIX_RELEASE x64/Release/dll )
35+
set ( LibUSB_LIBRARY_PATH_SUFFIX_DEBUG x64/Debug/dll )
36+
else ()
37+
set ( LibUSB_LIBRARY_PATH_SUFFIX_RELEASE win32/Release/dll )
38+
set ( LibUSB_LIBRARY_PATH_SUFFIX_DEBUG win32/Debug/dll )
39+
endif ()
40+
endif ( MSVC )
41+
endif ( ${CMAKE_SYSTEM_NAME} STREQUAL "Windows" )
42+
43+
find_library ( LibUSB_LIBRARY_RELEASE
44+
NAMES
45+
libusb libusb-1.0 usb
46+
PATHS
47+
$ENV{ProgramFiles}/LibUSB-Win32
48+
$ENV{LibUSB_ROOT}
49+
PATH_SUFFIXES
50+
${LibUSB_LIBRARY_PATH_SUFFIX_RELEASE}
51+
)
52+
53+
find_library ( LibUSB_LIBRARY_DEBUG
54+
NAMES
55+
libusb libusb-1.0 libusb-1.0d usb
56+
PATHS
57+
$ENV{ProgramFiles}/LibUSB-Win32
58+
$ENV{LibUSB_ROOT}
59+
PATH_SUFFIXES
60+
${LibUSB_LIBRARY_PATH_SUFFIX_DEBUG}
61+
)
62+
63+
set (LibUSB_LIBRARIES
64+
debug ${LibUSB_LIBRARY_DEBUG}
65+
optimized ${LibUSB_LIBRARY_RELEASE}
66+
)
67+
68+
if ( LibUSB_INCLUDE_DIR AND LibUSB_LIBRARIES )
69+
set ( LibUSB_FOUND 1 )
70+
endif ( LibUSB_INCLUDE_DIR AND LibUSB_LIBRARIES )
71+
72+
if ( LibUSB_FOUND )
73+
set ( CMAKE_REQUIRED_INCLUDES "${LibUSB_INCLUDE_DIR}" )
74+
check_include_file ( usb.h LibUSB_FOUND )
75+
endif ( LibUSB_FOUND )
76+
77+
if ( LibUSB_FOUND )
78+
check_library_exists ( "${LibUSB_LIBRARIES}" usb_open "" LibUSB_FOUND )
79+
endif ( LibUSB_FOUND )
80+
81+
if ( NOT LibUSB_FOUND )
82+
if ( NOT LibUSB_FIND_QUIETLY )
83+
message ( STATUS "LibUSB not found, try setting LibUSB_ROOT environment variable." )
84+
endif ( NOT LibUSB_FIND_QUIETLY )
85+
if ( LibUSB_FIND_REQUIRED )
86+
message ( FATAL_ERROR "LibUSB could not be found." )
87+
endif ( LibUSB_FIND_REQUIRED )
88+
endif ( NOT LibUSB_FOUND )

examples/protonect/cmake_modules/FindOpenCL.cmake

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
# OPENCL_INCLUDE_DIRS - the OpenCL include directory
1212
# OPENCL_LIBRARIES - link these to use OpenCL
1313
#
14-
# WIN32 should work, but is untested
1514

1615
FIND_PACKAGE(PackageHandleStandardArgs)
1716

@@ -31,15 +30,15 @@ ELSE (APPLE)
3130
IF (WIN32)
3231
# The AMD SDK currently installs both x86 and x86_64 libraries
3332
# This is only a hack to find out architecture
34-
IF( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64" )
35-
FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" PATH_SUFFIXES "/lib/x86_64")
36-
ELSE (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64")
37-
FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" PATH_SUFFIXES "/lib/x86")
38-
ENDIF( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64" )
33+
IF( ${CMAKE_SIZEOF_VOID_P} EQUAL 8 )
34+
FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" "$ENV{INTELOCLSDKROOT}" PATH_SUFFIXES "/lib/x86_64" "/lib/x64")
35+
ELSE (${CMAKE_SIZEOF_VOID_P} EQUAL 8)
36+
FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" "$ENV{INTELOCLSDKROOT}" PATH_SUFFIXES "/lib/x86")
37+
ENDIF( ${CMAKE_SIZEOF_VOID_P} EQUAL 8 )
3938

4039
# On Win32 search relative to the library
41-
FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" PATH_SUFFIXES "/include")
42-
FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" PATH_SUFFIXES "/include")
40+
FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" "$ENV{INTELOCLSDKROOT}" PATH_SUFFIXES "/include")
41+
FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" "$ENV{INTELOCLSDKROOT}" PATH_SUFFIXES "/include")
4342

4443
ELSE (WIN32)
4544

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
include(CheckCSourceCompiles)
2+
3+
if(NOT TurboJPEG_INCLUDE_DIR)
4+
if(WIN32)
5+
set(DEFAULT_TurboJPEG_INCLUDE_DIR $ENV{TurboJPEG_ROOT}/include)
6+
else()
7+
set(DEFAULT_TurboJPEG_INCLUDE_DIR /opt/libjpeg-turbo/include)
8+
endif()
9+
else()
10+
set(DEFAULT_TurboJPEG_INCLUDE_DIR ${TurboJPEG_INCLUDE_DIR})
11+
unset(TurboJPEG_INCLUDE_DIR)
12+
unset(TurboJPEG_INCLUDE_DIR CACHE)
13+
endif()
14+
15+
find_path(TurboJPEG_INCLUDE_DIR turbojpeg.h DOC "TurboJPEG include directory (default: ${DEFAULT_TurboJPEG_INCLUDE_DIR})" HINTS ${DEFAULT_TurboJPEG_INCLUDE_DIR})
16+
17+
if(TurboJPEG_INCLUDE_DIR STREQUAL "TurboJPEG_INCLUDE_DIR-NOTFOUND")
18+
message(FATAL_ERROR "Could not find turbojpeg.h - Try define TurboJPEG_ROOT as a system variable.")
19+
else()
20+
message(STATUS "TurboJPEG_INCLUDE_DIR = ${TurboJPEG_INCLUDE_DIR}")
21+
endif()
22+
23+
24+
if(WIN32)
25+
set(DEFAULT_TurboJPEG_LIBRARY $ENV{TurboJPEG_ROOT}/lib/turbojpeg.lib)
26+
else()
27+
find_library(DEFAULT_TurboJPEG_LIBRARY NAMES libturbojpeg.so libturbojpeg.a HINTS /opt/libjpeg-turbo/lib64/ /opt/libjpeg-turbo/lib/)
28+
endif()
29+
30+
set(TurboJPEG_LIBRARY ${DEFAULT_TurboJPEG_LIBRARY} CACHE PATH "TurboJPEG library path (default: ${DEFAULT_TurboJPEG_LIBRARY})")
31+
32+
if(WIN32)
33+
set(CMAKE_REQUIRED_DEFINITIONS -MT)
34+
endif()
35+
set(CMAKE_REQUIRED_INCLUDES ${TurboJPEG_INCLUDE_DIR})
36+
set(CMAKE_REQUIRED_LIBRARIES ${TurboJPEG_LIBRARY})
37+
check_c_source_compiles("#include <turbojpeg.h>\nint main(void) { tjhandle h=tjInitCompress(); return 0; }" TURBOJPEG_WORKS)
38+
set(CMAKE_REQUIRED_DEFINITIONS)
39+
set(CMAKE_REQUIRED_INCLUDES)
40+
set(CMAKE_REQUIRED_LIBRARIES)
41+
if(NOT TURBOJPEG_WORKS)
42+
message(FATAL_ERROR "Could not link with TurboJPEG library ${TurboJPEG_LIBRARY}. If it is installed in a different place, then set TurboJPEG_LIBRARY accordingly.")
43+
endif()
44+
45+
message(STATUS "TurboJPEG_LIBRARY = ${TurboJPEG_LIBRARY}")

0 commit comments

Comments
 (0)