diff --git a/CMakeLists.txt b/CMakeLists.txt index 49270209..c6c7dbbe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,31 +1,18 @@ -cmake_minimum_required(VERSION 2.8.3) -project(serial) +cmake_minimum_required(VERSION 3.16) -# Find catkin -find_package(catkin REQUIRED) +# General setup +project(serial + VERSION 1.2.1 + LANGUAGES CXX + DESCRIPTION "Cross-platform, Serial Port library written in C++" + HOMEPAGE_URL "http://wjwwood.io/serial/" +) if(APPLE) find_library(IOKIT_LIBRARY IOKit) find_library(FOUNDATION_LIBRARY Foundation) endif() -if(UNIX AND NOT APPLE) - # If Linux, add rt and pthread - set(rt_LIBRARIES rt) - set(pthread_LIBRARIES pthread) - catkin_package( - LIBRARIES ${PROJECT_NAME} - INCLUDE_DIRS include - DEPENDS rt pthread - ) -else() - # Otherwise normal call - catkin_package( - LIBRARIES ${PROJECT_NAME} - INCLUDE_DIRS include - ) -endif() - ## Sources set(serial_SRCS src/serial.cc @@ -47,7 +34,23 @@ else() endif() ## Add serial library +set(serial_HEADERS + include/serial/serial.h + include/serial/v8stdint.h +) +# Build, link and install main library +if(NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE) + set(CMAKE_POSITION_INDEPENDENT_CODE ON) +endif() add_library(${PROJECT_NAME} ${serial_SRCS}) +set_target_properties(${PROJECT_NAME} PROPERTIES + VERSION ${PROJECT_VERSION} + SOVERSION 1 + PUBLIC_HEADER "${serial_HEADERS}" +) + +target_include_directories(${PROJECT_NAME} PUBLIC include) + if(APPLE) target_link_libraries(${PROJECT_NAME} ${FOUNDATION_LIBRARY} ${IOKIT_LIBRARY}) elseif(UNIX) @@ -66,16 +69,27 @@ include_directories(include) ## Install executable install(TARGETS ${PROJECT_NAME} - ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} - LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} - RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION} + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin + PUBLIC_HEADER DESTINATION include/${PROJECT_NAME} ) ## Install headers install(FILES include/serial/serial.h include/serial/v8stdint.h - DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION}/serial) + DESTINATION include/serial) + +## Install CMake config +install(FILES cmake/serialConfig.cmake + DESTINATION share/serial/cmake) + + +## Install package.xml +install(FILES package.xml + DESTINATION share/serial) ## Tests -if(CATKIN_ENABLE_TESTING) +include(CTest) +if(BUILD_TESTING) add_subdirectory(tests) endif() diff --git a/Makefile b/Makefile index e1720722..0f49ddc7 100644 --- a/Makefile +++ b/Makefile @@ -56,7 +56,7 @@ test: @mkdir -p build cd build && cmake $(CMAKE_FLAGS) .. ifneq ($(MAKE),) - cd build && $(MAKE) run_tests + cd build && $(MAKE) all test else - cd build && make run_tests + cd build && make all test endif diff --git a/cmake/serialConfig.cmake b/cmake/serialConfig.cmake new file mode 100644 index 00000000..e90bdf69 --- /dev/null +++ b/cmake/serialConfig.cmake @@ -0,0 +1,3 @@ +get_filename_component(SERIAL_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +set(SERIAL_INCLUDE_DIRS "${SERIAL_CMAKE_DIR}/../../../include") +find_library(SERIAL_LIBRARIES serial PATHS ${SERIAL_CMAKE_DIR}/../../../lib/serial) diff --git a/package.xml b/package.xml index 959f9b87..a63b88ab 100644 --- a/package.xml +++ b/package.xml @@ -19,6 +19,13 @@ William Woodall John Harrison - catkin + cmake + + + gtest + + + cmake + diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index ac9a4214..db3f7de0 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,12 +1,18 @@ if(UNIX) - catkin_add_gtest(${PROJECT_NAME}-test unix_serial_tests.cc) - target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) + find_package(GTest REQUIRED) + + add_executable(${PROJECT_NAME}-test unix_serial_tests.cc) + target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME} GTest::GTest) if(NOT APPLE) target_link_libraries(${PROJECT_NAME}-test util) endif() + add_test("${PROJECT_NAME}-test-gtest" ${PROJECT_NAME}-test) if(NOT APPLE) # these tests are unreliable on macOS - catkin_add_gtest(${PROJECT_NAME}-test-timer unit/unix_timer_tests.cc) - target_link_libraries(${PROJECT_NAME}-test-timer ${PROJECT_NAME}) + add_executable(${PROJECT_NAME}-test-timer unit/unix_timer_tests.cc) + target_link_libraries(${PROJECT_NAME}-test-timer ${PROJECT_NAME} GTest::GTest) + add_test("${PROJECT_NAME}-test-timer-gtest" ${PROJECT_NAME}-test-timer) endif() + # Boost is only required for tests/proof_of_concepts which are not enabled by default + # find_package(Boost REQUIRED) endif()