diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt
index 53117c0cd1..e22ff16471 100644
--- a/3rdparty/CMakeLists.txt
+++ b/3rdparty/CMakeLists.txt
@@ -106,6 +106,36 @@ endif()
add_subdirectory(pugixml EXCLUDE_FROM_ALL)
+# libusb
+if(CMAKE_SYSTEM MATCHES "DragonFly|FreeBSD")
+ pkg_check_modules(LIBUSB REQUIRED IMPORTED_TARGET libusb-1.0>=1.0 )
+ CMAKE_DEPENDENT_OPTION( USE_SYS_LIBUSB "Use system libusb-1.0 as shared library" ON
+ "LIBUSB_FOUND" OFF)
+else()
+ pkg_check_modules(LIBUSB IMPORTED_TARGET libusb-1.0>=1.0 )
+ CMAKE_DEPENDENT_OPTION( USE_SYS_LIBUSB "Use system libusb-1.0 as shared library" OFF
+ "LIBUSB_FOUND" OFF)
+endif()
+if(CMAKE_SYSTEM MATCHES "DragonFly|FreeBSD")
+ # Always use system libusb as reference implementation isn't supported
+ add_library(usb-1.0-shared INTERFACE)
+ target_link_libraries(usb-1.0-shared INTERFACE PkgConfig::LIBUSB)
+elseif(MSVC)
+ # Windows time.h defines timespec but doesn't add any flag for it, which makes libusb attempt to define it again
+ add_definitions(-DHAVE_STRUCT_TIMESPEC=1)
+ add_subdirectory(libusb_cmake EXCLUDE_FROM_ALL)
+else()
+ if(USE_SYS_LIBUSB)
+ # we have the system libusb and have selected to use it
+ add_library(usb-1.0-shared INTERFACE)
+ target_link_libraries(usb-1.0-shared INTERFACE PkgConfig::LIBUSB)
+ else()
+ # we don't have the system libusb, so we compile from submodule
+ add_subdirectory(libusb_cmake EXCLUDE_FROM_ALL)
+ endif()
+endif()
+
+
# hidapi
add_library(3rdparty_hidapi INTERFACE)
target_include_directories(3rdparty_hidapi INTERFACE hidapi/hidapi)
@@ -133,24 +163,11 @@ else()
endif()
-# libusb
-if(CMAKE_SYSTEM MATCHES "DragonFly|FreeBSD")
- # Always use system libusb as reference implementation isn't supported
- add_library(usb-1.0-static INTERFACE)
- target_link_libraries(usb-1.0-static INTERFACE usb)
-elseif(MSVC)
- # Windows time.h defines timespec but doesn't add any flag for it, which makes libusb attempt to define it again
- add_definitions(-DHAVE_STRUCT_TIMESPEC=1)
- add_subdirectory(libusb_cmake EXCLUDE_FROM_ALL)
-else()
- add_subdirectory(libusb_cmake EXCLUDE_FROM_ALL)
-endif()
-
-
# yaml-cpp
# We don't want to install yaml-cpp but its cmake file doesn't have option
# to disable it...
# So we just install it to a different directory
+set(YAML_CPP_INSTALL OFF CACHE BOOL "Don't install YAML")
set(CMAKE_INSTALL_PREFIX_OLD ${CMAKE_INSTALL_PREFIX})
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/yaml-cpp_install)
@@ -460,7 +477,11 @@ else()
endif()
# add nice ALIAS targets for ease of use
-add_library(3rdparty::libusb ALIAS usb-1.0-static)
+if(USE_SYS_LIBUSB)
+ add_library(3rdparty::libusb ALIAS usb-1.0-shared)
+else()
+ add_library(3rdparty::libusb ALIAS usb-1.0-static)
+endif()
add_library(3rdparty::zlib ALIAS 3rdparty_zlib)
add_library(3rdparty::7z ALIAS 3rdparty_7z)
add_library(3rdparty::flatbuffers ALIAS 3rdparty_flatbuffers)
diff --git a/3rdparty/libusb b/3rdparty/libusb
index e782eeb251..eee6998395 160000
--- a/3rdparty/libusb
+++ b/3rdparty/libusb
@@ -1 +1 @@
-Subproject commit e782eeb2514266f6738e242cdcb18e3ae1ed06fa
+Subproject commit eee6998395184d87bd8e9c07ce2637caed1207f4
diff --git a/3rdparty/libusb_cmake/os.cmake b/3rdparty/libusb_cmake/os.cmake
index 83f36e346e..cde292bc0a 100644
--- a/3rdparty/libusb_cmake/os.cmake
+++ b/3rdparty/libusb_cmake/os.cmake
@@ -6,6 +6,7 @@ if (CMAKE_USE_PTHREADS_INIT)
endif()
if (WIN32 OR "${CMAKE_SYSTEM_NAME}" STREQUAL "CYGWIN")
+ add_compile_definitions(PLATFORM_WINDOWS=1)
set(OS_WINDOWS 1 CACHE INTERNAL "controls config.h macro definition" FORCE)
# Enable MingW support for RC language (for CMake pre-2.8)
@@ -22,9 +23,9 @@ if (WIN32 OR "${CMAKE_SYSTEM_NAME}" STREQUAL "CYGWIN")
endif()
list(APPEND PLATFORM_SRC
- poll_windows.c
+ events_windows.c
windows_usbdk.c
- windows_nt_common.c
+ windows_common.c
windows_winusb.c
threads_windows.c
)
@@ -36,13 +37,14 @@ if (WIN32 OR "${CMAKE_SYSTEM_NAME}" STREQUAL "CYGWIN")
endif()
elseif (APPLE)
# Apple != OSX alone
+ add_compile_definitions(PLATFORM_POSIX=1 HAVE_CLOCK_GETTIME)
set(OS_DARWIN 1 CACHE INTERNAL "controls config.h macro definition" FORCE)
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
set(PLATFORM_SRC
darwin_usb.c
threads_posix.c
- poll_posix.c
+ events_posix.c
)
find_package(IOKit REQUIRED)
@@ -72,6 +74,7 @@ int main()
endif()
elseif (UNIX)
# Unix is for all *NIX systems including OSX
+ add_compile_definitions(PLATFORM_POSIX=1 HAVE_CLOCK_GETTIME)
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
set(OS_LINUX 1 CACHE INTERNAL "controls config.h macro definition" FORCE)
@@ -79,7 +82,7 @@ elseif (UNIX)
linux_usbfs.c
linux_netlink.c
threads_posix.c
- poll_posix.c
+ events_posix.c
)
list(APPEND LIBUSB_LIBRARIES rt)
diff --git a/3rdparty/libusb_static.vcxproj b/3rdparty/libusb_static.vcxproj
index 6f49b8f6bd..eb95e46772 100644
--- a/3rdparty/libusb_static.vcxproj
+++ b/3rdparty/libusb_static.vcxproj
@@ -43,7 +43,7 @@
/utf-8 %(AdditionalOptions)
libusb\msvc;libusb\libusb;%(AdditionalIncludeDirectories)
- WINVER=0x0501;_WIN32_WINNT=0x0501;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ WINVER=0x0600;_WIN32_WINNT=0x0600;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
$(IntDir)$(TargetName).pdb
Level4
@@ -65,11 +65,11 @@
-
+
-
+
@@ -78,13 +78,11 @@
-
+
-
-