Skip to content

Commit f2bb972

Browse files
committed
add CMake build system
1 parent 6fcb0bb commit f2bb972

File tree

12 files changed

+465
-1
lines changed

12 files changed

+465
-1
lines changed

CMakeLists.txt

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
cmake_minimum_required(VERSION 3.1.3 FATAL_ERROR)
2+
3+
if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
4+
add_subdirectory(src)
5+
# compatinility with find_package() vs add_subdirectory
6+
set(hidapi_VERSION "${hidapi_VERSION}" PARENT_SCOPE)
7+
return()
8+
endif()
9+
# All of the below in this file is meant for a standalone build.
10+
# When building as a subdirectory of a larger project, most of the options may not make sense for it,
11+
# so it is up to developer to configure those, e.g.:
12+
#
13+
# # a subfolder of a master project, e.g.: 3rdparty/hidapi/CMakeLists.txt
14+
#
15+
# set(HIDAPI_WITH_HIDRAW OFF)
16+
# set(CMAKE_FRAMEWORK ON)
17+
# # and keep everything else to their defaults
18+
# add_subdirectory(hidapi)
19+
#
20+
21+
set(DEFAULT_CMAKE_BUILD_TYPES "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
22+
if(NOT DEFINED CMAKE_BUILD_TYPE OR NOT CMAKE_BUILD_TYPE)
23+
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "${DEFAULT_CMAKE_BUILD_TYPES}" FORCE)
24+
endif()
25+
# This part is for convenience, when used one of the standard build types with cmake-gui
26+
list(FIND DEFAULT_CMAKE_BUILD_TYPES "${CMAKE_BUILD_TYPE}" _build_type_index)
27+
if(${_build_type_index} GREATER -1)
28+
# set it optionally, so a custom CMAKE_BUILD_TYPE can be used as well, if needed
29+
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${DEFAULT_CMAKE_BUILD_TYPES})
30+
endif()
31+
unset(_build_type_index)
32+
#
33+
34+
project(hidapi LANGUAGES C)
35+
36+
if(APPLE)
37+
if(NOT CMAKE_VERSION VERSION_LESS "3.15")
38+
option(CMAKE_FRAMEWORK "Build macOS/iOS Framework version of the library" OFF)
39+
endif()
40+
elseif(NOT WIN32)
41+
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
42+
option(HIDAPI_WITH_HIDRAW "Build HIDRAW-based implementation of HIDAPI" ON)
43+
option(HIDAPI_WITH_LIBUSB "Build LIBUSB-based implementation of HIDAPI" ON)
44+
endif()
45+
endif()
46+
47+
option(BUILD_SHARED_LIBS "Build shared version of the libraries, otherwise build statically" ON)
48+
49+
set(HIDAPI_INSTALL_TARGETS ON)
50+
set(HIDAPI_PRINT_VERSION ON)
51+
52+
add_subdirectory(src)
53+
54+
set(BUILD_HIDTEST_DEFAULT OFF)
55+
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
56+
set(BUILD_HIDTEST_DEFAULT ON)
57+
endif()
58+
option(HIDAPI_BUILD_HIDTEST "Build small console test application hidtest" ${BUILD_HIDTEST_DEFAULT})
59+
if(HIDAPI_BUILD_HIDTEST)
60+
add_subdirectory(hidtest)
61+
endif()

configure.ac

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ mkdir testgui/TestGUI.app/Contents/MacOS/
189189

190190
if test "x$testgui_enabled" != "xno"; then
191191
if test "x$os" = xdarwin; then
192-
# On Mac OS, don't use pkg-config.
192+
# On Mac OS, do not use pkg-config.
193193
AC_CHECK_PROG([foxconfig], [fox-config], [fox-config], false)
194194
if test "x$foxconfig" = "xfalse"; then
195195
hidapi_prog_error fox-config "FOX Toolkit"

hidtest/CMakeLists.txt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
project(hidtest C)
2+
3+
set(HIDAPI_HIDTEST_TARGETS)
4+
if(NOT WIN32 AND NOT APPLE AND CMAKE_SYSTEM_NAME MATCHES "Linux")
5+
if(TARGET hidapi::hidraw)
6+
add_executable(hidtest_hidraw test.c)
7+
target_link_libraries(hidtest_hidraw hidapi::hidraw)
8+
list(APPEND HIDAPI_HIDTEST_TARGETS hidtest_hidraw)
9+
endif()
10+
if(TARGET hidapi::libusb)
11+
add_executable(hidtest_libusb test.c)
12+
target_link_libraries(hidtest_libusb hidapi::libusb)
13+
list(APPEND HIDAPI_HIDTEST_TARGETS hidtest_libusb)
14+
endif()
15+
else()
16+
add_executable(hidtest test.c)
17+
target_link_libraries(hidtest hidapi::hidapi)
18+
list(APPEND HIDAPI_HIDTEST_TARGETS hidtest)
19+
endif()
20+
21+
install(TARGETS ${HIDAPI_HIDTEST_TARGETS}
22+
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
23+
)

libusb/CMakeLists.txt

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
cmake_minimum_required(VERSION 3.6.3 FATAL_ERROR)
2+
3+
add_library(hidapi_libusb
4+
${HIDAPI_PUBLIC_HEADERS}
5+
hid.c
6+
)
7+
target_link_libraries(hidapi_libusb PUBLIC hidapi_include)
8+
9+
if(TARGET usb-1.0)
10+
target_link_libraries(hidapi_libusb PRIVATE usb-1.0)
11+
else()
12+
include(FindPkgConfig)
13+
pkg_check_modules(libusb REQUIRED IMPORTED_TARGET libusb-1.0>=1.0.9)
14+
target_link_libraries(hidapi_libusb PRIVATE PkgConfig::libusb)
15+
endif()
16+
17+
find_package(Threads REQUIRED)
18+
target_link_libraries(hidapi_libusb PRIVATE Threads::Threads)
19+
20+
set_target_properties(hidapi_libusb
21+
PROPERTIES
22+
EXPORT_NAME "libusb"
23+
OUTPUT_NAME "hidapi-libusb"
24+
VERSION ${PROJECT_VERSION}
25+
SOVERSION ${PROJECT_VERSION_MAJOR}
26+
PUBLIC_HEADER "${HIDAPI_PUBLIC_HEADERS}"
27+
)
28+
29+
# compatibility with find_package()
30+
add_library(hidapi::libusb ALIAS hidapi_libusb)
31+
# compatibility with raw library link
32+
add_library(hidapi-libusb ALIAS hidapi_libusb)
33+
34+
if(HIDAPI_INSTALL_TARGETS)
35+
install(TARGETS hidapi_libusb EXPORT hidapi
36+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
37+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
38+
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/hidapi"
39+
)
40+
endif()
41+
42+
hidapi_configure_pc("${PROJECT_ROOT}/pc/hidapi-libusb.pc.in")

linux/CMakeLists.txt

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
cmake_minimum_required(VERSION 3.6.3 FATAL_ERROR)
2+
3+
add_library(hidapi_hidraw
4+
${HIDAPI_PUBLIC_HEADERS}
5+
hid.c
6+
)
7+
target_link_libraries(hidapi_hidraw PUBLIC hidapi_include)
8+
9+
find_package(Threads REQUIRED)
10+
11+
include(FindPkgConfig)
12+
pkg_check_modules(libudev REQUIRED IMPORTED_TARGET libudev)
13+
14+
target_link_libraries(hidapi_hidraw PRIVATE PkgConfig::libudev Threads::Threads)
15+
16+
set_target_properties(hidapi_hidraw
17+
PROPERTIES
18+
EXPORT_NAME "hidraw"
19+
OUTPUT_NAME "hidapi-hidraw"
20+
VERSION ${PROJECT_VERSION}
21+
SOVERSION ${PROJECT_VERSION_MAJOR}
22+
PUBLIC_HEADER "${HIDAPI_PUBLIC_HEADERS}"
23+
)
24+
25+
# compatibility with find_package()
26+
add_library(hidapi::hidraw ALIAS hidapi_hidraw)
27+
# compatibility with raw library link
28+
add_library(hidapi-hidraw ALIAS hidapi_hidraw)
29+
30+
if(HIDAPI_INSTALL_TARGETS)
31+
install(TARGETS hidapi_hidraw EXPORT hidapi
32+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
33+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
34+
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/hidapi"
35+
)
36+
endif()
37+
38+
hidapi_configure_pc("${PROJECT_ROOT}/pc/hidapi-hidraw.pc.in")

mac/CMakeLists.txt

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
cmake_minimum_required(VERSION 3.4.3 FATAL_ERROR)
2+
3+
add_library(hidapi_darwin
4+
${HIDAPI_PUBLIC_HEADERS}
5+
hid.c
6+
)
7+
8+
find_package(Threads REQUIRED)
9+
10+
target_link_libraries(hidapi_darwin
11+
PUBLIC hidapi_include
12+
PRIVATE Threads::Threads
13+
PRIVATE "-framework IOKit" "-framework CoreFoundation" "-framework AppKit"
14+
)
15+
16+
set_target_properties(hidapi_darwin
17+
PROPERTIES
18+
EXPORT_NAME "darwin"
19+
OUTPUT_NAME "hidapi"
20+
VERSION ${PROJECT_VERSION}
21+
SOVERSION ${PROJECT_VERSION_MAJOR}
22+
MACHO_COMPATIBILITY_VERSION ${PROJECT_VERSION_MAJOR}
23+
FRAMEWORK_VERSION ${PROJECT_VERSION_MAJOR}
24+
PUBLIC_HEADER "${HIDAPI_PUBLIC_HEADERS}"
25+
)
26+
27+
# compatibility with find_package()
28+
add_library(hidapi::darwin ALIAS hidapi_darwin)
29+
# compatibility with raw library link
30+
add_library(hidapi ALIAS hidapi_darwin)
31+
32+
set(PUBLIC_HEADER_DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
33+
if(NOT CMAKE_FRAMEWORK)
34+
set(PUBLIC_HEADER_DESTINATION "${PUBLIC_HEADER_DESTINATION}/hidapi")
35+
endif()
36+
37+
if(HIDAPI_INSTALL_TARGETS)
38+
install(TARGETS hidapi_darwin EXPORT hidapi
39+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
40+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
41+
FRAMEWORK DESTINATION "${CMAKE_INSTALL_LIBDIR}"
42+
PUBLIC_HEADER DESTINATION "${PUBLIC_HEADER_DESTINATION}"
43+
)
44+
endif()
45+
46+
hidapi_configure_pc("${PROJECT_ROOT}/pc/hidapi.pc.in")

pc/hidapi-hidraw.pc.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ includedir=@includedir@
55

66
Name: hidapi-hidraw
77
Description: C Library for USB/Bluetooth HID device access from Linux, Mac OS X, FreeBSD, and Windows. This is the hidraw implementation.
8+
URL: https://github.com/libusb/hidapi
89
Version: @VERSION@
910
Libs: -L${libdir} -lhidapi-hidraw
1011
Cflags: -I${includedir}/hidapi

pc/hidapi-libusb.pc.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ includedir=@includedir@
55

66
Name: hidapi-libusb
77
Description: C Library for USB HID device access from Linux, Mac OS X, FreeBSD, and Windows. This is the libusb implementation.
8+
URL: https://github.com/libusb/hidapi
89
Version: @VERSION@
910
Libs: -L${libdir} -lhidapi-libusb
1011
Cflags: -I${includedir}/hidapi

pc/hidapi.pc.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ includedir=@includedir@
55

66
Name: hidapi
77
Description: C Library for USB/Bluetooth HID device access from Linux, Mac OS X, FreeBSD, and Windows.
8+
URL: https://github.com/libusb/hidapi
89
Version: @VERSION@
910
Libs: -L${libdir} -lhidapi
1011
Cflags: -I${includedir}/hidapi

0 commit comments

Comments
 (0)