diff --git a/CMake/FindHIDAPI.cmake b/CMake/FindHIDAPI.cmake index b75110ab12..81b9990212 100644 --- a/CMake/FindHIDAPI.cmake +++ b/CMake/FindHIDAPI.cmake @@ -6,4 +6,12 @@ set(HIDAPI_INCLUDE_DIRS ${HIDAPI_INCLUDE_DIR}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(HIDAPI DEFAULT_MSG HIDAPI_LIBRARY HIDAPI_INCLUDE_DIR) +if(HIDAPI_FOUND AND NOT TARGET Hidapi::Hidapi) + add_library(Hidapi::Hidapi UNKNOWN IMPORTED) + set_target_properties(Hidapi::Hidapi PROPERTIES + IMPORTED_LOCATION ${HIDAPI_LIBRARIES} + INTERFACE_INCLUDE_DIRECTORIES ${HIDAPI_INCLUDE_DIRS} + ) +endif() + mark_as_advanced(HIDAPI_INCLUDE_DIR HIDAPI_LIBRARY) diff --git a/CMakeLists.txt b/CMakeLists.txt index 342119b24b..abfa668738 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -752,39 +752,9 @@ list(APPEND LIBS ${ICONV_LIBRARIES}) if(NOT ANDROID) find_package(HIDAPI) - if(HIDAPI_FOUND) - message(STATUS "Using shared ${HIDAPI_LIBRARIES} ${HIDAPI_VERSION}") - include_directories(${HIDAPI_INCLUDE_DIRS}) - list(APPEND LIBS ${HIDAPI_LIBRARIES}) - else() - set(HIDAPI_FOUND 1) - include_directories(Externals/hidapi/hidapi) - if(APPLE) - message(STATUS "Using static hidapi from Externals") - add_subdirectory(Externals/hidapi/mac) - list(APPEND LIBS hidapi) - elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") - find_package(Libudev) - if(LIBUDEV_FOUND) - message(STATUS "Using static hidapi-hidraw from Externals") - add_subdirectory(Externals/hidapi/linux) - list(APPEND LIBS hidapi-hidraw udev) - else() - message(STATUS "Could not find udev, disabling hidapi") - set(HIDAPI_FOUND 0) - endif() - elseif(MSVC) - message(STATUS "Using static hidapi-hid from Externals") - add_subdirectory(Externals/hidapi/windows) - list(APPEND LIBS hidapi-hid) - else() - message(STATUS "Using static hidapi-libusb from Externals") - add_subdirectory(Externals/hidapi/libusb) - list(APPEND LIBS hidapi-libusb) - endif() - endif() - if(HIDAPI_FOUND) - add_definitions(-DHAVE_HIDAPI=1) + if(NOT HIDAPI_FOUND) + message(STATUS "Using static HIDAPI from Externals") + add_subdirectory(Externals/hidapi EXCLUDE_FROM_ALL) endif() endif() diff --git a/Externals/hidapi/CMakeLists.txt b/Externals/hidapi/CMakeLists.txt new file mode 100644 index 0000000000..4b33a46fd5 --- /dev/null +++ b/Externals/hidapi/CMakeLists.txt @@ -0,0 +1,20 @@ +project(hidapi) + +add_library(hidapi STATIC hidapi/hidapi.h) +target_include_directories(hidapi PUBLIC hidapi) + +if(APPLE) + target_sources(hidapi PRIVATE mac/hid.c) +elseif(MSVC) + target_sources(hidapi PRIVATE windows/hid.c) +else() + find_package(Libudev) + if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND LIBUDEV_FOUND) + target_sources(hidapi PRIVATE linux/hid.c) + target_link_libraries(hidapi PRIVATE udev) + else() + target_sources(hidapi PRIVATE libusb/hid.c) + endif() +endif() + +add_library(Hidapi::Hidapi ALIAS hidapi) diff --git a/Externals/hidapi/libusb/CMakeLists.txt b/Externals/hidapi/libusb/CMakeLists.txt deleted file mode 100644 index 5bb2c08688..0000000000 --- a/Externals/hidapi/libusb/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_library(hidapi-libusb hid.c) diff --git a/Externals/hidapi/linux/CMakeLists.txt b/Externals/hidapi/linux/CMakeLists.txt deleted file mode 100644 index f7984bd755..0000000000 --- a/Externals/hidapi/linux/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_library(hidapi-hidraw hid.c) diff --git a/Externals/hidapi/mac/CMakeLists.txt b/Externals/hidapi/mac/CMakeLists.txt deleted file mode 100644 index ccd2898ed4..0000000000 --- a/Externals/hidapi/mac/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_library(hidapi hid.c) diff --git a/Externals/hidapi/windows/CMakeLists.txt b/Externals/hidapi/windows/CMakeLists.txt deleted file mode 100644 index 3b0b4ce5fa..0000000000 --- a/Externals/hidapi/windows/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_library(hidapi-hid hid.c) diff --git a/Source/Core/Core/CMakeLists.txt b/Source/Core/Core/CMakeLists.txt index 82ab438e87..a96165ee98 100644 --- a/Source/Core/Core/CMakeLists.txt +++ b/Source/Core/Core/CMakeLists.txt @@ -339,8 +339,10 @@ else() message(STATUS "BlueZ explicitly disabled, disabling bluetooth support") endif() -if(HIDAPI_FOUND) +if(TARGET Hidapi::Hidapi) set(SRCS ${SRCS} HW/WiimoteReal/IOhidapi.cpp) + list(APPEND LIBS Hidapi::Hidapi) + add_definitions(-DHAVE_HIDAPI=1) endif() if(PORTAUDIO_FOUND)