add CMake build system

- general build infrastructure, build options;
- libusb/hidraw backends;
- (optionally) hidtest;
This commit is contained in:
Ihor Dutchak
2020-02-09 16:02:10 +02:00
parent 24a822c80f
commit bf64499b48
7 changed files with 176 additions and 9 deletions
+29
View File
@@ -0,0 +1,29 @@
cmake_minimum_required(VERSION 3.1.3 FATAL_ERROR)
project(hidapi LANGUAGES C)
if(NOT DEFINED CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "")
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Debug;Release;MinSizeRel;RelWithDebInfo" FORCE)
endif()
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
if(NOT WIN32 AND NOT APPLE)
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
option(HIDAPI_WITH_HIDRAW "Build HIDRAW-based implementation of HIDAPI" ON)
endif()
option(HIDAPI_WITH_LIBUSB "Build LIBUSB-based implementation of HIDAPI" ON)
endif()
option(BUILD_SHARED_LIBS "When set: build shared version of the libraries, otherwise - static" ON)
set(HIDAPI_INSTALL_TARGETS ON)
add_subdirectory(src)
set(BUILD_HIDTEST_DEFAULT OFF)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(BUILD_HIDTEST_DEFAULT ON)
endif()
option(BUILD_HIDTEST "Build small console test application hidtest" ${BUILD_HIDTEST_DEFAULT})
if(BUILD_HIDTEST)
add_subdirectory(hidtest)
endif()
+1
View File
@@ -0,0 +1 @@
0.9.0-rc1
+2 -9
View File
@@ -1,13 +1,6 @@
AC_PREREQ(2.63)
# Version number. This is currently the only place.
m4_define([HIDAPI_MAJOR], 0)
m4_define([HIDAPI_MINOR], 9)
m4_define([HIDAPI_RELEASE], 0)
m4_define([HIDAPI_RC], )
m4_define([VERSION_STRING], HIDAPI_MAJOR[.]HIDAPI_MINOR[.]HIDAPI_RELEASE[]HIDAPI_RC)
AC_INIT([hidapi],[VERSION_STRING],[alan@signal11.us])
AC_INIT([hidapi],[m4_normalize(m4_builtin([include], VERSION))],[https://github.com/libusb/hidapi/issues])
# Library soname version
# Follow the following rules (particularly the ones in the second link):
@@ -190,7 +183,7 @@ mkdir testgui/TestGUI.app/Contents/MacOS/
if test "x$testgui_enabled" != "xno"; then
if test "x$os" = xdarwin; then
# On Mac OS, don't use pkg-config.
# On Mac OS, do not use pkg-config.
AC_CHECK_PROG([foxconfig], [fox-config], [fox-config], false)
if test "x$foxconfig" = "xfalse"; then
hidapi_prog_error fox-config "FOX Toolkit"
+23
View File
@@ -0,0 +1,23 @@
project(hidtest C)
set(HIDAPI_HIDTEST_TARGETS)
if(NOT WIN32 AND NOT APPLE AND CMAKE_SYSTEM_NAME MATCHES "Linux")
if(TARGET hidapi_hidraw)
add_executable(hidtest_hidraw test.c)
target_link_libraries(hidtest_hidraw hidapi_hidraw)
list(APPEND HIDAPI_HIDTEST_TARGETS hidtest_hidraw)
endif()
if(TARGET hidapi_libusb)
add_executable(hidtest_libusb test.c)
target_link_libraries(hidtest_libusb hidapi_libusb)
list(APPEND HIDAPI_HIDTEST_TARGETS hidtest_libusb)
endif()
else()
add_executable(hidtest test.c)
target_link_libraries(hidtest hidapi)
list(APPEND HIDAPI_HIDTEST_TARGETS hidtest)
endif()
install(TARGETS ${HIDAPI_HIDTEST_TARGETS}
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
)
+34
View File
@@ -0,0 +1,34 @@
cmake_minimum_required(VERSION 3.6.3 FATAL_ERROR)
add_library(hidapi_libusb
hid.c
)
target_link_libraries(hidapi_libusb PUBLIC hidapi_include)
include(FindPkgConfig)
include(FindThreads)
pkg_check_modules(libusb REQUIRED IMPORTED_TARGET libusb-1.0>=1.0.9)
target_link_libraries(hidapi_libusb PRIVATE PkgConfig::libusb Threads::Threads)
set(HIDAPI_LIBNAME "hidapi")
if(HIDAPI_LIBNAME_VERBOSE)
set(HIDAPI_LIBNAME "${HIDAPI_LIBNAME}-libusb")
endif()
set_target_properties(hidapi_libusb
PROPERTIES
EXPORT_NAME "libusb"
OUTPUT_NAME "${HIDAPI_LIBNAME}"
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
)
if(HIDAPI_INSTALL_TARGETS)
install(TARGETS hidapi_libusb
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
)
endif()
add_library(hidapi ALIAS hidapi_libusb)
+31
View File
@@ -0,0 +1,31 @@
cmake_minimum_required(VERSION 3.6.3 FATAL_ERROR)
add_library(hidapi_hidraw
hid.c
)
target_link_libraries(hidapi_hidraw PUBLIC hidapi_include)
include(FindPkgConfig)
include(FindThreads)
pkg_check_modules(libudev REQUIRED IMPORTED_TARGET libudev)
target_link_libraries(hidapi_hidraw PRIVATE PkgConfig::libudev Threads::Threads)
set_target_properties(hidapi_hidraw
PROPERTIES
EXPORT_NAME "hidraw"
OUTPUT_NAME "hidapi-hidraw"
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
)
if(HIDAPI_INSTALL_TARGETS)
install(TARGETS hidapi_hidraw
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
)
endif()
if(NOT HIDAPI_WITH_LIBUSB)
add_library(hidapi ALIAS hidapi_hidraw)
endif()
+56
View File
@@ -0,0 +1,56 @@
get_filename_component(PROJECT_ROOT "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE)
# Read version from file
file(READ "${PROJECT_ROOT}/VERSION" VERSION_STR)
string(REGEX MATCH "^([0-9]+\\.[0-9]+\\.[0-9]+)(.*)" VERSION_STR "${VERSION_STR}")
set(VERSION "${CMAKE_MATCH_1}")
set(VERSION_SUFFIX "${CMAKE_MATCH_2}")
#
project(hidapi VERSION "${VERSION}" LANGUAGES C)
# Defaults and required options
if(NOT DEFINED BUILD_SHARED_LIBS)
set(BUILD_SHARED_LIBS ON)
endif()
if(NOT DEFINED HIDAPI_WITH_HIDRAW)
set(HIDAPI_WITH_HIDRAW ON)
endif()
if(NOT DEFINED HIDAPI_WITH_LIBUSB)
set(HIDAPI_WITH_LIBUSB ON)
endif()
if(NOT DEFINED HIDAPI_INSTALL_TARGETS)
set(HIDAPI_INSTALL_TARGETS OFF)
endif()
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# The library
add_library(hidapi_include INTERFACE)
target_include_directories(hidapi_include INTERFACE "${PROJECT_ROOT}/hidapi")
if(HIDAPI_INSTALL_TARGETS)
include(GNUInstallDirs)
install(FILES "${PROJECT_ROOT}/hidapi/hidapi.h" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/hidapi")
endif()
if(WIN32)
add_subdirectory("${PROJECT_ROOT}/windows" windows)
elseif(APPLE)
add_subdirectory("${PROJECT_ROOT}/mac" mac)
else()
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
if(HIDAPI_WITH_HIDRAW)
add_subdirectory("${PROJECT_ROOT}/linux" linux)
endif()
set(HIDAPI_LIBNAME_VERBOSE ON)
else()
set(HIDAPI_LIBNAME_VERBOSE OFF)
endif()
if(HIDAPI_WITH_LIBUSB)
add_subdirectory("${PROJECT_ROOT}/libusb" libusb)
endif()
endif()