diff --git a/CHANGELOG.md b/CHANGELOG.md index ed0fd1b..c3eaba6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,33 +1,33 @@ # Changelog for wrp_sdk -## 1.0 (2020-06-17) +## 0.1.5 (2020-06-17) ------------------- * Merged multiple small libraries into one "wrpsdk" * Changed to "plain" project structure -## 0.5 (2020-04-01) +## 0.1.4 (2020-04-01) ------------------- * Added initial support of Hunter -## 0.4 (2019-09-15) +## 0.1.3 (2019-09-15) ------------------ * Unified implementation of UART/CAN for firmware and SDK * Improvements of code organization * Contributors: Ruixiang Du -## 0.3 (2019-08-02) +## 0.1.2 (2019-08-02) ------------------ * Added full UART support * Contributors: Ruixiang Du -## 0.2 (2019-06-14) +## 0.1.1 (2019-06-14) ------------------ * Deprecated initial serial interface support (new one under development) * Added full CAN support * Improved multi-threading implementation * Contributors: Ruixiang Du -## 0.1 (2019-05-07) +## 0.1.0 (2019-05-07) ------------------ * Added basic serial communication support diff --git a/CMakeLists.txt b/CMakeLists.txt index 347c5e4..7648021 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,17 +1,33 @@ -cmake_minimum_required(VERSION 3.1.0) -project(wrp_sdk) +cmake_minimum_required(VERSION 3.10.2) -# Find catkin -find_package(catkin QUIET) -if(catkin_FOUND) - message(STATUS "Build package with catkin") -else() - message(STATUS "Build package with cmake") +find_program(CCACHE_PROGRAM ccache) +if(CCACHE_PROGRAM) + message(STATUS "Found ccache") + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}") endif() -# generate symbols for IDE indexer +project(wrp_sdk VERSION 0.1.5) + +## Project Options +set(BUILD_TESTS OFF) + +## Check if pkg is built with ROS catkin +if(CATKIN_DEVEL_PREFIX) + message(STATUS "Build package with catkin") + set(BUILD_WITHOUT_ROS OFF) +else() + message(STATUS "Build package with cmake") + set(BUILD_WITHOUT_ROS ON) +endif() + +## Generate symbols for IDE indexer set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/devel) + +## Additional cmake module path +set(USER_CMAKE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") +list(APPEND CMAKE_MODULE_PATH "${USER_CMAKE_PATH}/modules") +list(APPEND CMAKE_PREFIX_PATH "/usr/lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/cmake") +list(APPEND CMAKE_PREFIX_PATH "/opt/weston_robot/lib/cmake") ## Set compiler to use c++ 11 features set(CMAKE_CXX_STANDARD 11) @@ -22,12 +38,6 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) # set(CMAKE_BUILD_TYPE Release) # set(CMAKE_BUILD_TYPE Debug) -## Optionally built modules: ON/OFF -set(BUILD_TESTS OFF) -set(BUILD_MONITOR ON) - -############################################################################# - set(default_build_type "Release") if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message(STATUS "Setting build type to '${default_build_type}' as none was specified.") @@ -38,26 +48,7 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) "Debug" "Release" "MinSizeRel" "RelWithDebInfo") endif() -## Use GNUInstallDirs to install libraries into correct -# locations on all platforms. -include(GNUInstallDirs) -message(STATUS "Project will be installed to ${CMAKE_INSTALL_PREFIX}") - -## Put all binary files into /bin and libraries into /lib -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}) - -# Disable monitor if ncurses library is not found -set(CURSES_NEED_NCURSES TRUE) -find_package(Curses QUIET) - -if(BUILD_MONITOR AND NOT CURSES_FOUND) - set(BUILD_MONITOR OFF) - message(STATUS "Monitor app will not be built due to missing ncurses library, try: sudo apt install libncurses5-dev") -endif() - -# Add libraries +# Build libraries add_library(${PROJECT_NAME} src/async_serial.cpp src/async_can.cpp @@ -77,56 +68,129 @@ target_include_directories(${PROJECT_NAME} PUBLIC $ PRIVATE src) -if(NOT catkin_FOUND) +# Build apps +if(BUILD_WITHOUT_ROS) + # Check wether to build monitor tool + set(BUILD_MONITOR ON) + # Disable monitor if ncurses library is not found + set(CURSES_NEED_NCURSES TRUE) + find_package(Curses QUIET) + if(BUILD_MONITOR AND NOT CURSES_FOUND) + set(BUILD_MONITOR OFF) + message(STATUS "Monitor app will not be built due to missing ncurses library, try: sudo apt install libncurses5-dev") + endif() + + # add app source directory add_subdirectory(apps) endif() -# Add executables -if(BUILD_TESTS) +# Build tests +if(PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME AND BUILD_TESTS) + enable_testing() + include(GoogleTest) add_subdirectory(tests) add_subdirectory(unit_tests) endif() -# Offer the user the choice of overriding the installation directories -set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Installation directory for libraries") -set(INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Installation directory for executables") -set(INSTALL_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Installation directory for header files") -if(WIN32 AND NOT CYGWIN) - set(DEF_INSTALL_CMAKEDIR CMake) -else() - set(DEF_INSTALL_CMAKEDIR share/cmake/${PROJECT_NAME}) -endif() -set(INSTALL_CMAKEDIR ${DEF_INSTALL_CMAKEDIR} CACHE PATH "Installation directory for CMake files") +## Installation configuration +if(BUILD_WITHOUT_ROS) # BUILD_WITHOUT_ROS -# Report to user -foreach(p LIB BIN INCLUDE CMAKE) - file(TO_NATIVE_PATH ${CMAKE_INSTALL_PREFIX}/${INSTALL_${p}DIR} _path) - message(STATUS " -> To install ${p} components to ${_path}") - unset(_path) -endforeach() + ## Use GNUInstallDirs to install libraries into correct + # locations on all platforms. + include(GNUInstallDirs) + message(STATUS "Project will be installed to ${CMAKE_INSTALL_PREFIX} with 'make install'") -if(catkin_FOUND) -catkin_package( - LIBRARIES ${PROJECT_NAME} - INCLUDE_DIRS include - # DEPENDS rt pthread -) + ## Put all binary files into /bin and libraries into /lib + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}) -## Add catkin install targets -# install(TARGETS ${PROJECT_NAME} -# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} -# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} -# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}) + # Offer the user the choice of overriding the installation directories + set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Installation directory for libraries") + set(INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Installation directory for executables") + set(INSTALL_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Installation directory for header files") + if(WIN32 AND NOT CYGWIN) + set(DEF_INSTALL_CMAKEDIR CMake) + else() + set(DEF_INSTALL_CMAKEDIR share/cmake/${PROJECT_NAME}) + endif() + set(INSTALL_CMAKEDIR ${DEF_INSTALL_CMAKEDIR} CACHE PATH "Installation directory for CMake files") -# install(DIRECTORY include/${PROJECT_NAME}/ -# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}) + # Report to user + foreach(p LIB BIN INCLUDE CMAKE) + file(TO_NATIVE_PATH ${CMAKE_INSTALL_PREFIX}/${INSTALL_${p}DIR} _path) + message(STATUS " - To install ${p} components to ${_path}") + unset(_path) + endforeach() -# install(DIRECTORY asio/asio -# DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION}) + # targets to install + install(TARGETS ${PROJECT_NAME} + EXPORT wrp_sdkTargets + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + RUNTIME DESTINATION bin + INCLUDES DESTINATION include) -# install(FILES asio/asio.hpp -# DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION}) + install(DIRECTORY include/wrp_sdk + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) -# install(DIRECTORY scripts -# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}) -endif() + # export target configuration + include(CMakePackageConfigHelpers) + write_basic_package_version_file( + wrp_sdkConfigVersion.cmake + VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}" + COMPATIBILITY SameMajorVersion) + + install(EXPORT wrp_sdkTargets + FILE wrp_sdkTargets.cmake + NAMESPACE westonrobot:: + DESTINATION lib/cmake/wrp_sdk) + + configure_file(cmake/wrp_sdkConfig.cmake.in wrp_sdkConfig.cmake @ONLY) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/wrp_sdkConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/wrp_sdkConfigVersion.cmake" + DESTINATION lib/cmake/wrp_sdk) + + # Packaging support + set(CPACK_PACKAGE_VENDOR "Weston Robot") + set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Weston Robot Platform - SDK") + set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) + set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) + set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) + set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/weston_robot") + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") + set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md") + + set(CPACK_GENERATOR "DEB") + set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT) + set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Ruixiang Du (ruixiang.du@westonrobot.com)") + set(CPACK_DEBIAN_PACKAGE_DEPENDS "libasio-dev") + set(CPACK_SOURCE_IGNORE_FILES + /.git + /dist + /.*build.* + /\\\\.DS_Store + ) + include(CPack) + +else() # BUILD_WITHOUT_ROS + + catkin_package( + LIBRARIES ${PROJECT_NAME} + INCLUDE_DIRS include + # DEPENDS rt pthread + ) + + ## Add catkin install targets + install(TARGETS ${PROJECT_NAME} + RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} + LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} + ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}) + + install(DIRECTORY include/${PROJECT_NAME}/ + DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}) + + install(DIRECTORY scripts + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}) + +endif() # BUILD_WITHOUT_ROS diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index 5c79ed0..8c8e915 100755 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -3,16 +3,16 @@ # tests add_executable(app_scout_demo scout_demo/scout_demo.cpp) -target_link_libraries(app_scout_demo scoutbase) +target_link_libraries(app_scout_demo wrp_sdk) # add_executable(app_scout_discharge scout_demo/scout_discharge.cpp) -# target_link_libraries(app_scout_discharge scoutbase) +# target_link_libraries(app_scout_discharge wrp_sdk) add_executable(app_hunter_demo hunter_demo/hunter_demo.cpp) -target_link_libraries(app_hunter_demo hunterbase) +target_link_libraries(app_hunter_demo wrp_sdk) -add_executable(app_tracer_demo tracer_demo/tracer_demo.cpp) -target_link_libraries(app_tracer_demo tracerbase) +# add_executable(app_tracer_demo tracer_demo/tracer_demo.cpp) +# target_link_libraries(app_tracer_demo wrp_sdk) if(BUILD_MONITOR) add_subdirectory(scout_monitor) diff --git a/apps/hunter_demo/hunter_demo.cpp b/apps/hunter_demo/hunter_demo.cpp index 694ab45..26d5822 100644 --- a/apps/hunter_demo/hunter_demo.cpp +++ b/apps/hunter_demo/hunter_demo.cpp @@ -7,7 +7,7 @@ * Copyright (c) 2019 Ruixiang Du (rdu) */ -#include "hunter_base/hunter_base.hpp" +#include "wrp_sdk/platforms/hunter/hunter_base.hpp" using namespace westonrobot; diff --git a/apps/scout_demo/scout_demo.cpp b/apps/scout_demo/scout_demo.cpp index 01a3a9a..aa90d4f 100644 --- a/apps/scout_demo/scout_demo.cpp +++ b/apps/scout_demo/scout_demo.cpp @@ -7,7 +7,7 @@ * Copyright (c) 2019 Ruixiang Du (rdu) */ -#include "scout_base/scout_base.hpp" +#include "wrp_sdk/platforms/scout/scout_base.hpp" using namespace westonrobot; diff --git a/apps/scout_monitor/CMakeLists.txt b/apps/scout_monitor/CMakeLists.txt index af348df..2760c92 100644 --- a/apps/scout_monitor/CMakeLists.txt +++ b/apps/scout_monitor/CMakeLists.txt @@ -9,7 +9,7 @@ set(SCOUT_MONITOR_SRC src/scout_monitor.cpp ) add_library(monitor STATIC ${SCOUT_MONITOR_SRC}) -target_link_libraries(monitor scoutbase ${CURSES_LIBRARIES}) +target_link_libraries(monitor wrp_sdk ${CURSES_LIBRARIES}) target_include_directories(monitor PUBLIC $ $ diff --git a/apps/scout_monitor/include/monitor/scout_monitor.hpp b/apps/scout_monitor/include/monitor/scout_monitor.hpp index e7e58e0..84d1074 100644 --- a/apps/scout_monitor/include/monitor/scout_monitor.hpp +++ b/apps/scout_monitor/include/monitor/scout_monitor.hpp @@ -10,7 +10,7 @@ #ifndef SCOUT_MONITOR_HPP #define SCOUT_MONITOR_HPP -#include "scout_base/scout_base.hpp" +#include "wrp_sdk/platforms/scout/scout_base.hpp" #include diff --git a/cmake/wrp_sdkConfig.cmake.in b/cmake/wrp_sdkConfig.cmake.in new file mode 100644 index 0000000..69880f3 --- /dev/null +++ b/cmake/wrp_sdkConfig.cmake.in @@ -0,0 +1,12 @@ +include(CMakeFindDependencyMacro) + +# Capturing values from configure (optional) +# set(my-config-var @my-config-var@) + +# Same syntax as find_package +find_dependency(Threads REQUIRED) + +# Any extra setup + +# Add the targets file +include("${CMAKE_CURRENT_LIST_DIR}/wra_utilsTargets.cmake") \ No newline at end of file