From a1464ad92dd71ccd413f3ecaba18cf4dd2d009c0 Mon Sep 17 00:00:00 2001 From: Lingzhu Xiang Date: Wed, 10 Jun 2015 03:25:41 +0000 Subject: [PATCH 1/2] Create static Protonect.exe on Windows Static Protonect.exe does not require managing DLLS. As a result, only libfreenect2static.lib is provided by default. (Only libusb, OpenCV, TurboJPEG and GLFW are statically linked now. OpenCL not.) This is because it is impossible to import both dynamic and static versions of OpenCV at the same time, also building both dll and lib requires recompiling objects with /MD and /MT. libfreenect2static.lib is compiled with /MT by default for static linking with Protonect.exe. If BUILD_SHARED_LIBS is true, it is compiled with /MD. Dynamic verion of Protonect.exe and libfreenect2.dll can be built with -DBUILD_SHARED_LIBS=ON. Manual DLL management is required to run dynamic Protonect.exe. --- examples/protonect/CMakeLists.txt | 33 ++++++++++++++++--- .../protonect/cmake_modules/FindGLFW3.cmake | 7 +++- .../protonect/cmake_modules/FindLibUSB.cmake | 22 ++++++++++--- .../cmake_modules/FindTurboJPEG.cmake | 7 +++- 4 files changed, 57 insertions(+), 12 deletions(-) diff --git a/examples/protonect/CMakeLists.txt b/examples/protonect/CMakeLists.txt index b56c89c49..915f075f9 100644 --- a/examples/protonect/CMakeLists.txt +++ b/examples/protonect/CMakeLists.txt @@ -37,10 +37,18 @@ 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) +IF(WIN32) + SET(USE_STATIC_LIBS TRUE CACHE BOOL "Prefer static libraries") + IF(BUILD_SHARED_LIBS) + SET(USE_STATIC_LIBS FALSE) + ENDIF() +ENDIF() + # dependencies -FIND_PACKAGE(PkgConfig) # try find PKGConfig as it will be used if found +FIND_PACKAGE(PkgConfig QUIET) # try find PKGConfig as it will be used if found FIND_PACKAGE(LibUSB REQUIRED) -FIND_PACKAGE(OpenCV REQUIRED) +SET(OpenCV_STATIC ${USE_STATIC_LIBS}) +FIND_PACKAGE(OpenCV REQUIRED core highgui) FIND_PACKAGE(TurboJPEG REQUIRED) #does not provide a package-config file # Add includes @@ -103,7 +111,6 @@ SET(SOURCES ) SET(LIBRARIES - ${OpenCV_LIBS} ${OpenCV_LIBRARIES} ${LibUSB_LIBRARIES} ${TurboJPEG_LIBRARIES} @@ -171,29 +178,45 @@ CONFIGURE_FILE("${MY_DIR}/include/libfreenect2/config.h.in" "${MY_DIR}/include/l GENERATE_RESOURCES(${RESOURCES_INC_FILE} ${MY_DIR} ${RESOURCES}) ADD_DEFINITIONS(-DRESOURCES_INC) +IF(USE_STATIC_LIBS) + ADD_LIBRARY(freenect2static STATIC ${SOURCES}) + set_target_properties(freenect2static PROPERTIES COMPILE_FLAGS "/MT") +ELSE(USE_STATIC_LIBS) ADD_LIBRARY(freenect2 OBJECT ${SOURCES}) set_target_properties(freenect2 PROPERTIES POSITION_INDEPENDENT_CODE 1) ADD_LIBRARY(freenect2shared SHARED $) ADD_LIBRARY(freenect2static STATIC $) +TARGET_LINK_LIBRARIES(freenect2shared ${LIBRARIES}) set_target_properties(freenect2shared PROPERTIES OUTPUT_NAME freenect2) +ENDIF(USE_STATIC_LIBS) set_target_properties(freenect2static PROPERTIES OUTPUT_NAME freenect2) IF(MSVC) set_target_properties(freenect2static PROPERTIES OUTPUT_NAME freenect2static) ENDIF() MESSAGE("Linking with these libraries: ${LIBRARIES}") -TARGET_LINK_LIBRARIES(freenect2shared ${LIBRARIES}) ADD_EXECUTABLE(Protonect Protonect.cpp ) - + +IF(USE_STATIC_LIBS) + set_target_properties(Protonect PROPERTIES COMPILE_FLAGS "/MT") + TARGET_LINK_LIBRARIES(Protonect + freenect2static + ${LIBRARIES} + ) +ELSE(USE_STATIC_LIBS) TARGET_LINK_LIBRARIES(Protonect freenect2shared ) +ENDIF(USE_STATIC_LIBS) CONFIGURE_FILE(freenect2.cmake.in "${PROJECT_BINARY_DIR}/freenect2Config.cmake" @ONLY) +INSTALL(TARGETS Protonect DESTINATION bin) +IF(NOT USE_STATIC_LIBS) INSTALL(TARGETS freenect2shared DESTINATION lib) +ENDIF() INSTALL(TARGETS freenect2static DESTINATION lib) INSTALL(DIRECTORY "${MY_DIR}/include/" DESTINATION include PATTERN "*.in" EXCLUDE) IF(LIBFREENECT2_THREADING_TINYTHREAD) diff --git a/examples/protonect/cmake_modules/FindGLFW3.cmake b/examples/protonect/cmake_modules/FindGLFW3.cmake index 41a42ea9e..2fc8b3327 100644 --- a/examples/protonect/cmake_modules/FindGLFW3.cmake +++ b/examples/protonect/cmake_modules/FindGLFW3.cmake @@ -37,8 +37,13 @@ ELSEIF(MSVC) SET(_SUFFIX lib-vc2013) ENDIF() +SET(LIB_NAME glfw3dll) +IF(USE_STATIC_LIBS) + SET(LIB_NAME glfw3) +ENDIF() + FIND_LIBRARY(GLFW3_LIBRARIES - NAMES glfw3dll glfw3 + NAMES ${LIB_NAME} PATHS "${DEPENDS_DIR}/glfw" "$ENV{ProgramW6432}/glfw" diff --git a/examples/protonect/cmake_modules/FindLibUSB.cmake b/examples/protonect/cmake_modules/FindLibUSB.cmake index f3e822b6b..45912df94 100644 --- a/examples/protonect/cmake_modules/FindLibUSB.cmake +++ b/examples/protonect/cmake_modules/FindLibUSB.cmake @@ -24,6 +24,22 @@ FIND_PATH(LibUSB_INCLUDE_DIRS libusb ) +SET(SUFFIXES + x64/Release/dll + x64/Debug/dll + Win32/Release/dll + Win32/Debug/dll + MS64 +) +IF(USE_STATIC_LIBS) + SET(SUFFIXES + x64/Release/lib + x64/Debug/lib + Win32/Release/lib + Win32/Debug/lib + ) +ENDIF() + FIND_LIBRARY(LibUSB_LIBRARIES NAMES libusb-1.0 PATHS @@ -31,11 +47,7 @@ FIND_LIBRARY(LibUSB_LIBRARIES "${DEPENDS_DIR}/libusbx" ENV LibUSB_ROOT PATH_SUFFIXES - x64/Release/dll - x64/Debug/dll - Win32/Release/dll - Win32/Debug/dll - MS64 + ${SUFFIXES} ) INCLUDE(FindPackageHandleStandardArgs) diff --git a/examples/protonect/cmake_modules/FindTurboJPEG.cmake b/examples/protonect/cmake_modules/FindTurboJPEG.cmake index a0fcc5748..c04562d80 100644 --- a/examples/protonect/cmake_modules/FindTurboJPEG.cmake +++ b/examples/protonect/cmake_modules/FindTurboJPEG.cmake @@ -19,8 +19,13 @@ FIND_PATH(TurboJPEG_INCLUDE_DIRS include ) +SET(LIB_NAME turbojpeg) +IF(USE_STATIC_LIBS) + SET(LIB_NAME turbojpeg-static) +ENDIF() + FIND_LIBRARY(TurboJPEG_LIBRARIES - NAMES libturbojpeg.so.0 turbojpeg + NAMES libturbojpeg.so.0 ${LIB_NAME} DOC "Found TurboJPEG library path" PATHS "${DEPENDS_DIR}/libjpeg_turbo" From 3401e9b9cff46a2a3ebca08e3d9ff00722aed390 Mon Sep 17 00:00:00 2001 From: Lingzhu Xiang Date: Wed, 10 Jun 2015 05:47:58 -0400 Subject: [PATCH 2/2] Support OpenCL with Nvidia on Windows --- examples/protonect/cmake_modules/FindOpenCL.cmake | 8 ++++---- examples/protonect/src/opencl_depth_packet_processor.cpp | 4 ++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/examples/protonect/cmake_modules/FindOpenCL.cmake b/examples/protonect/cmake_modules/FindOpenCL.cmake index a062c9e21..06a901952 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}" "$ENV{INTELOCLSDKROOT}" PATH_SUFFIXES "/lib/x86_64" "/lib/x64") + FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" "$ENV{INTELOCLSDKROOT}" "$ENV{CUDA_PATH}" 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") + FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" "$ENV{INTELOCLSDKROOT}" "$ENV{CUDA_PATH}" 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}" "$ENV{INTELOCLSDKROOT}" PATH_SUFFIXES "/include") - FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" "$ENV{INTELOCLSDKROOT}" PATH_SUFFIXES "/include") + FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" "$ENV{INTELOCLSDKROOT}" "$ENV{CUDA_PATH}" PATH_SUFFIXES "/include") + FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" "$ENV{INTELOCLSDKROOT}" "$ENV{CUDA_PATH}" PATH_SUFFIXES "/include") ELSE (WIN32) diff --git a/examples/protonect/src/opencl_depth_packet_processor.cpp b/examples/protonect/src/opencl_depth_packet_processor.cpp index cc13587ab..4c4cc1d5e 100644 --- a/examples/protonect/src/opencl_depth_packet_processor.cpp +++ b/examples/protonect/src/opencl_depth_packet_processor.cpp @@ -247,9 +247,11 @@ class OpenCLDepthPacketProcessorImpl case CL_DEVICE_TYPE_ACCELERATOR: devType = "ACCELERATOR"; break; +#ifdef CL_DEVICE_TYPE_CUSTOM case CL_DEVICE_TYPE_CUSTOM: devType = "CUSTOM"; break; +#endif default: devType = "UNKNOWN"; } @@ -329,9 +331,11 @@ class OpenCLDepthPacketProcessorImpl case CL_DEVICE_TYPE_ACCELERATOR: devType = "ACCELERATOR"; break; +#ifdef CL_DEVICE_TYPE_CUSTOM case CL_DEVICE_TYPE_CUSTOM: devType = "CUSTOM"; break; +#endif default: devType = "UNKNOWN"; }