summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorf4exb <f4exb06@gmail.com>2022-03-05 14:19:49 +0100
committerf4exb <f4exb06@gmail.com>2022-03-05 14:19:49 +0100
commit97fc4bf2dac61197e73f6da55a881b4d1ca30f6b (patch)
tree5f99ee04f86f734b3c6088ac82baadfeed7c2f03
parent88a447d8f54404df08e31b4f1301e61038795659 (diff)
Fixed build with hidapi
-rw-r--r--CMakeLists.txt3
-rw-r--r--cmake/Modules/FindHIDAPI.cmake234
-rw-r--r--fcdhid/CMakeLists.txt2
-rw-r--r--plugins/samplesource/CMakeLists.txt2
-rw-r--r--plugins/samplesource/fcdpro/CMakeLists.txt17
-rw-r--r--plugins/samplesource/fcdproplus/CMakeLists.txt15
6 files changed, 256 insertions, 17 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index db7e0321c..ac2541bdb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -349,6 +349,7 @@ find_package(PkgConfig REQUIRED)
find_package(Boost REQUIRED)
find_package(FFTW3F REQUIRED)
find_package(LibUSB REQUIRED) # used by so many packages
+find_package(HIDAPI) # For FCD
find_package(OpenCV OPTIONAL_COMPONENTS core highgui imgproc imgcodecs videoio) # channeltx/modatv
find_package(LibSigMF) # SigMF recording files support
if(NOT WIN32)
@@ -448,7 +449,7 @@ if(ENABLE_USRP)
find_package(UHD)
endif()
-if(ENABLE_FUNCUBE AND UNIX AND LIBUSB_FOUND)
+if(ENABLE_FUNCUBE AND UNIX AND LIBUSB_FOUND AND HIDAPI_FOUND)
add_subdirectory(fcdlib)
add_subdirectory(fcdhid)
endif()
diff --git a/cmake/Modules/FindHIDAPI.cmake b/cmake/Modules/FindHIDAPI.cmake
new file mode 100644
index 000000000..047485ddf
--- /dev/null
+++ b/cmake/Modules/FindHIDAPI.cmake
@@ -0,0 +1,234 @@
+#.rst:
+# FindHIDAPI
+# ----------
+#
+# Try to find HIDAPI library, from http://www.signal11.us/oss/hidapi/
+#
+# Cache Variables: (probably not for direct use in your scripts)
+# HIDAPI_INCLUDE_DIR
+# HIDAPI_LIBRARY
+#
+# Non-cache variables you might use in your CMakeLists.txt:
+# HIDAPI_FOUND
+# HIDAPI_INCLUDE_DIRS
+# HIDAPI_LIBRARIES
+#
+# COMPONENTS
+# ^^^^^^^^^^
+#
+# This module respects several COMPONENTS specifying the backend you prefer:
+# ``any`` (the default), ``libusb``, and ``hidraw``.
+# The availablility of the latter two depends on your platform.
+#
+#
+# IMPORTED Targets
+# ^^^^^^^^^^^^^^^^
+
+# This module defines :prop_tgt:`IMPORTED` target ``HIDAPI::hidapi`` (in all cases or
+# if no components specified), ``HIDAPI::hidapi-libusb`` (if you requested the libusb component),
+# and ``HIDAPI::hidapi-hidraw`` (if you requested the hidraw component),
+#
+# Result Variables
+# ^^^^^^^^^^^^^^^^
+#
+# ``HIDAPI_FOUND``
+# True if HIDAPI or the requested components (if any) were found.
+#
+# We recommend using the imported targets instead of the following.
+#
+# ``HIDAPI_INCLUDE_DIRS``
+# ``HIDAPI_LIBRARIES``
+#
+# Original Author:
+# 2009-2010, 2019 Ryan Pavlik <ryan.pavlik@collabora.com> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+#
+# Copyright Iowa State University 2009-2010.
+# Copyright Collabora, Ltd. 2019.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+cmake_policy(SET CMP0045 NEW)
+cmake_policy(SET CMP0053 NEW)
+cmake_policy(SET CMP0054 NEW)
+
+set(HIDAPI_ROOT_DIR
+ "${HIDAPI_ROOT_DIR}"
+ CACHE PATH "Root to search for HIDAPI")
+
+# Clean up components
+if("${HIDAPI_FIND_COMPONENTS}")
+ if(WIN32 OR APPLE)
+ # This makes no sense on Windows or Mac, which have native APIs
+ list(REMOVE "${HIDAPI_FIND_COMPONENTS}" libusb)
+ endif()
+
+ if(NOT ${CMAKE_SYSTEM} MATCHES "Linux")
+ # hidraw is only on linux
+ list(REMOVE "${HIDAPI_FIND_COMPONENTS}" hidraw)
+ endif()
+endif()
+if(NOT "${HIDAPI_FIND_COMPONENTS}")
+ # Default to any
+ set("${HIDAPI_FIND_COMPONENTS}" any)
+endif()
+
+# Ask pkg-config for hints
+find_package(PkgConfig QUIET)
+if(PKG_CONFIG_FOUND)
+ set(_old_prefix_path "${CMAKE_PREFIX_PATH}")
+ # So pkg-config uses HIDAPI_ROOT_DIR too.
+ if(HIDAPI_ROOT_DIR)
+ list(APPEND CMAKE_PREFIX_PATH ${HIDAPI_ROOT_DIR})
+ endif()
+ pkg_check_modules(PC_HIDAPI_LIBUSB QUIET hidapi-libusb)
+ pkg_check_modules(PC_HIDAPI_HIDRAW QUIET hidapi-hidraw)
+ # Restore
+ set(CMAKE_PREFIX_PATH "${_old_prefix_path}")
+endif()
+
+# Actually search
+find_library(
+ HIDAPI_UNDECORATED_LIBRARY
+ NAMES hidapi
+ PATHS "${HIDAPI_ROOT_DIR}"
+ PATH_SUFFIXES lib)
+
+find_library(
+ HIDAPI_LIBUSB_LIBRARY
+ NAMES hidapi hidapi-libusb
+ PATHS "${HIDAPI_ROOT_DIR}"
+ PATH_SUFFIXES lib
+ HINTS ${PC_HIDAPI_LIBUSB_LIBRARY_DIRS})
+
+if(CMAKE_SYSTEM MATCHES "Linux")
+ find_library(
+ HIDAPI_HIDRAW_LIBRARY
+ NAMES hidapi-hidraw
+ HINTS ${PC_HIDAPI_HIDRAW_LIBRARY_DIRS})
+endif()
+
+find_path(
+ HIDAPI_INCLUDE_DIR
+ NAMES hidapi.h
+ PATHS "${HIDAPI_ROOT_DIR}"
+ PATH_SUFFIXES hidapi include include/hidapi
+ HINTS ${PC_HIDAPI_HIDRAW_INCLUDE_DIRS} ${PC_HIDAPI_LIBUSB_INCLUDE_DIRS})
+
+find_package(Threads QUIET)
+
+###
+# Compute the "I don't care which backend" library
+###
+set(HIDAPI_LIBRARY)
+
+# First, try to use a preferred backend if supplied
+if("${HIDAPI_FIND_COMPONENTS}" MATCHES "libusb"
+ AND HIDAPI_LIBUSB_LIBRARY
+ AND NOT HIDAPI_LIBRARY)
+ set(HIDAPI_LIBRARY ${HIDAPI_LIBUSB_LIBRARY})
+endif()
+if("${HIDAPI_FIND_COMPONENTS}" MATCHES "hidraw"
+ AND HIDAPI_HIDRAW_LIBRARY
+ AND NOT HIDAPI_LIBRARY)
+ set(HIDAPI_LIBRARY ${HIDAPI_HIDRAW_LIBRARY})
+endif()
+
+# Then, if we don't have a preferred one, settle for anything.
+if(NOT HIDAPI_LIBRARY)
+ if(HIDAPI_LIBUSB_LIBRARY)
+ set(HIDAPI_LIBRARY ${HIDAPI_LIBUSB_LIBRARY})
+ elseif(HIDAPI_HIDRAW_LIBRARY)
+ set(HIDAPI_LIBRARY ${HIDAPI_HIDRAW_LIBRARY})
+ elseif(HIDAPI_UNDECORATED_LIBRARY)
+ set(HIDAPI_LIBRARY ${HIDAPI_UNDECORATED_LIBRARY})
+ endif()
+endif()
+
+###
+# Determine if the various requested components are found.
+###
+set(_hidapi_component_required_vars)
+
+foreach(_comp IN LISTS HIDAPI_FIND_COMPONENTS)
+ if("${_comp}" STREQUAL "any")
+ list(APPEND _hidapi_component_required_vars HIDAPI_INCLUDE_DIR
+ HIDAPI_LIBRARY)
+ if(HIDAPI_INCLUDE_DIR AND EXISTS "${HIDAPI_LIBRARY}")
+ set(HIDAPI_any_FOUND TRUE)
+ mark_as_advanced(HIDAPI_INCLUDE_DIR)
+ else()
+ set(HIDAPI_any_FOUND FALSE)
+ endif()
+
+ elseif("${_comp}" STREQUAL "libusb")
+ list(APPEND _hidapi_component_required_vars HIDAPI_INCLUDE_DIR
+ HIDAPI_LIBUSB_LIBRARY)
+ if(HIDAPI_INCLUDE_DIR AND EXISTS "${HIDAPI_LIBUSB_LIBRARY}")
+ set(HIDAPI_libusb_FOUND TRUE)
+ mark_as_advanced(HIDAPI_INCLUDE_DIR HIDAPI_LIBUSB_LIBRARY)
+ else()
+ set(HIDAPI_libusb_FOUND FALSE)
+ endif()
+
+ elseif("${_comp}" STREQUAL "hidraw")
+ list(APPEND _hidapi_component_required_vars HIDAPI_INCLUDE_DIR
+ HIDAPI_HIDRAW_LIBRARY)
+ if(HIDAPI_INCLUDE_DIR AND EXISTS "${HIDAPI_HIDRAW_LIBRARY}")
+ set(HIDAPI_hidraw_FOUND TRUE)
+ mark_as_advanced(HIDAPI_INCLUDE_DIR HIDAPI_HIDRAW_LIBRARY)
+ else()
+ set(HIDAPI_hidraw_FOUND FALSE)
+ endif()
+
+ else()
+ message(WARNING "${_comp} is not a recognized HIDAPI component")
+ set(HIDAPI_${_comp}_FOUND FALSE)
+ endif()
+endforeach()
+unset(_comp)
+
+###
+# FPHSA call
+###
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(
+ HIDAPI REQUIRED_VARS ${_hidapi_component_required_vars} THREADS_FOUND
+ HANDLE_COMPONENTS)
+
+if(HIDAPI_FOUND)
+ set(HIDAPI_LIBRARIES "${HIDAPI_LIBRARY}")
+ set(HIDAPI_INCLUDE_DIRS "${HIDAPI_INCLUDE_DIR}")
+ if(NOT TARGET HIDAPI::hidapi)
+ add_library(HIDAPI::hidapi UNKNOWN IMPORTED)
+ set_target_properties(
+ HIDAPI::hidapi
+ PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+ IMPORTED_LOCATION ${HIDAPI_LIBRARY})
+ set_property(
+ TARGET HIDAPI::hidapi PROPERTY IMPORTED_LINK_INTERFACE_LIBRARIES
+ Threads::Threads)
+ endif()
+endif()
+
+if(HIDAPI_libusb_FOUND AND NOT TARGET HIDAPI::hidapi-libusb)
+ add_library(HIDAPI::hidapi-libusb UNKNOWN IMPORTED)
+ set_target_properties(
+ HIDAPI::hidapi-libusb
+ PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_LOCATION
+ ${HIDAPI_LIBUSB_LIBRARY})
+ set_property(TARGET HIDAPI::hidapi-libusb
+ PROPERTY IMPORTED_LINK_INTERFACE_LIBRARIES Threads::Threads)
+endif()
+
+if(HIDAPI_hidraw_FOUND AND NOT TARGET HIDAPI::hidapi-hidraw)
+ add_library(HIDAPI::hidapi-hidraw UNKNOWN IMPORTED)
+ set_target_properties(
+ HIDAPI::hidapi-hidraw
+ PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_LOCATION
+ ${HIDAPI_HIDRAW_LIBRARY})
+ set_property(TARGET HIDAPI::hidapi-hidraw
+ PROPERTY IMPORTED_LINK_INTERFACE_LIBRARIES Threads::Threads)
+endif()
diff --git a/fcdhid/CMakeLists.txt b/fcdhid/CMakeLists.txt
index 409a9a445..d808bde54 100644
--- a/fcdhid/CMakeLists.txt
+++ b/fcdhid/CMakeLists.txt
@@ -11,6 +11,7 @@ set(fcdhid_HEADERS
include_directories(
${LIBUSB_INCLUDE_DIR}
+ ${HIDAPI_INCLUDE_DIRS}
${ICONV_INCLUDE_DIR}
${CUSTOM_APPLE_INCLUDE}
)
@@ -21,6 +22,7 @@ add_library(fcdhid SHARED
target_link_libraries(fcdhid
${LIBUSB_LIBRARIES}
+ ${HIDAPI_LIBRARIES}
${ICONV_LIBRARY}
)
diff --git a/plugins/samplesource/CMakeLists.txt b/plugins/samplesource/CMakeLists.txt
index a903dd4ee..0fa6361e4 100644
--- a/plugins/samplesource/CMakeLists.txt
+++ b/plugins/samplesource/CMakeLists.txt
@@ -21,7 +21,7 @@ if(ENABLE_BLADERF AND LIBBLADERF_FOUND)
add_subdirectory(bladerf2input)
endif()
-if(ENABLE_FUNCUBE AND UNIX AND LIBUSB_FOUND)
+if(ENABLE_FUNCUBE AND UNIX AND LIBUSB_FOUND AND HIDAPI_FOUND)
add_subdirectory(fcdpro)
add_subdirectory(fcdproplus)
endif()
diff --git a/plugins/samplesource/fcdpro/CMakeLists.txt b/plugins/samplesource/fcdpro/CMakeLists.txt
index 828eb6647..8c59e5ab1 100644
--- a/plugins/samplesource/fcdpro/CMakeLists.txt
+++ b/plugins/samplesource/fcdpro/CMakeLists.txt
@@ -17,8 +17,9 @@ set(fcdpro_HEADERS
)
include_directories(
- ${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client
- ${CMAKE_SOURCE_DIR}/fcdhid
+ ${HIDAPI_INCLUDE_DIRS}
+ ${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client
+ ${CMAKE_SOURCE_DIR}/fcdhid
${CMAKE_SOURCE_DIR}/fcdlib
)
@@ -26,7 +27,6 @@ if(NOT SERVER_MODE)
set(fcdpro_SOURCES
${fcdpro_SOURCES}
fcdprogui.cpp
-
fcdprogui.ui
)
set(fcdpro_HEADERS
@@ -50,13 +50,14 @@ add_library(${TARGET_NAME} SHARED
)
target_link_libraries(${TARGET_NAME}
- Qt5::Core
- ${TARGET_LIB}
+ ${HIDAPI_LIBRARIES}
+ Qt5::Core
+ ${TARGET_LIB}
sdrbase
${TARGET_LIB_GUI}
- swagger
- fcdhid
- fcdlib
+ swagger
+ fcdhid
+ fcdlib
)
install(TARGETS ${TARGET_NAME} DESTINATION ${INSTALL_FOLDER})
diff --git a/plugins/samplesource/fcdproplus/CMakeLists.txt b/plugins/samplesource/fcdproplus/CMakeLists.txt
index d6c075964..90fc9ba0f 100644
--- a/plugins/samplesource/fcdproplus/CMakeLists.txt
+++ b/plugins/samplesource/fcdproplus/CMakeLists.txt
@@ -17,7 +17,8 @@ set(fcdproplus_HEADERS
)
include_directories(
- ${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client
+ ${HIDAPI_INCLUDE_DIRS}
+ ${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client
${CMAKE_SOURCE_DIR}/fcdhid
${CMAKE_SOURCE_DIR}/fcdlib
)
@@ -26,7 +27,6 @@ if(NOT SERVER_MODE)
set(fcdproplus_SOURCES
${fcdproplus_SOURCES}
fcdproplusgui.cpp
-
fcdproplusgui.ui
)
set(fcdproplus_HEADERS
@@ -50,13 +50,14 @@ add_library(${TARGET_NAME} SHARED
)
target_link_libraries(${TARGET_NAME}
- Qt5::Core
- ${TARGET_LIB}
+ ${HIDAPI_LIBRARIES}
+ Qt5::Core
+ ${TARGET_LIB}
sdrbase
${TARGET_LIB_GUI}
- swagger
- fcdhid
- fcdlib
+ swagger
+ fcdhid
+ fcdlib
)
install(TARGETS ${TARGET_NAME} DESTINATION ${INSTALL_FOLDER})