diff --git a/.gitignore b/.gitignore index b76bce1..98fbe8f 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ streamdeckpp.sublime-project streamdeckpp.sublime-workspace streamdeckpp-*.tar.xz streamdeckpp.spec +build/ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..2f2f053 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,73 @@ +cmake_minimum_required(VERSION 3.16) +project(streamdeckpp VERSION 1.8 LANGUAGES CXX) + +# --- Options --- +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(ABI 1) +set(PUBLIC_HEADER streamdeckpp.hh) + +# --- Find dependencies using pkg-config --- +find_package(PkgConfig REQUIRED) +pkg_check_modules(HIDAPI REQUIRED IMPORTED_TARGET hidapi-libusb) +pkg_check_modules(MAGICKPP REQUIRED IMPORTED_TARGET Magick++) + +# --- Include directories --- +include_directories( + ${HIDAPI_INCLUDE_DIRS} + ${MAGICKPP_INCLUDE_DIRS} +) + +# --- Sources --- +set(LIB_SRCS streamdeckpp.cc) +set(MAIN_SRCS main.cc) + +# --- Static Library --- +add_library(streamdeckpp_static STATIC ${LIB_SRCS}) +target_link_libraries(streamdeckpp_static PUBLIC PkgConfig::HIDAPI PkgConfig::MAGICKPP) +set_target_properties(streamdeckpp_static PROPERTIES OUTPUT_NAME streamdeckpp) +target_include_directories(streamdeckpp_static PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + +# --- Shared Library --- +add_library(streamdeckpp SHARED streamdeckpp.cc) +target_link_libraries(streamdeckpp PUBLIC PkgConfig::HIDAPI PkgConfig::MAGICKPP) +set_target_properties(streamdeckpp PROPERTIES + SOVERSION ${ABI} + VERSION ${PROJECT_VERSION} + OUTPUT_NAME streamdeckpp + PUBLIC_HEADER ${PUBLIC_HEADER} +) +# Optionally add linker script if needed +target_link_options(streamdeckpp PRIVATE LINKER:--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libstreamdeckpp.map) + +# --- Executable --- +add_executable(streamdeck ${MAIN_SRCS}) +target_link_libraries(streamdeck PRIVATE streamdeckpp_static) +target_include_directories(streamdeck PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) + +# --- Install Rules --- +include(GNUInstallDirs) + +install(TARGETS streamdeckpp streamdeckpp_static + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/streamdeckpp-${PROJECT_VERSION} +) + +install(TARGETS streamdeck + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) + +install(FILES ${PUBLIC_HEADER} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/streamdeckpp-${PROJECT_VERSION}) + +# --- pkg-config file generation --- +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/streamdeckpp.spec.in + ${CMAKE_CURRENT_BINARY_DIR}/streamdeckpp.pc + @ONLY +) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/streamdeckpp.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) + +# --- Clean/dist targets (CMake handles most) --- + +# --- Custom targets for rpm, srpm, dist (optional, not implemented here) --- diff --git a/README.md b/README.md index 2257828..19c336e 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,11 @@ The provided `read` interface returns a vector with the current state of the but `read` interface is delayed until a button a pressed or released. The `read` variant with a `timeout`\ parameter returns an `optional` object which, in case the timeout is reached, contains nothing. +Debian/Ubuntu dependencies +-------------------------- +``` +$ sudo apt-get install libmagick++-dev libhidapi-dev +``` Using the library ----------------- diff --git a/main.cc b/main.cc index b5d3551..ee0c9b6 100644 --- a/main.cc +++ b/main.cc @@ -22,7 +22,7 @@ int main(int argc, char* argv[]) if ("image"s == argv[1]) { int key = argc <= 2 ? 0 : atoi(argv[2]); - const char* fname = argc <= 3 ? "test.jpg" : argv[3]; + const char* fname = argc <= 3 ? "cat-eye.jpg" : argv[3]; ctx[i]->set_key_image(key, fname); } else if ("reset"s == argv[1]) ctx[i]->reset();