From d49e5ea2988b2086c7deaa40d3e077531e449844 Mon Sep 17 00:00:00 2001 From: Xue Liu Date: Thu, 21 Feb 2019 00:27:42 +0100 Subject: [PATCH 1/3] - add cmake support Signed-off-by: Xue Liu --- CMakeLists.txt | 77 +++++++++++++++ cmake/loragw-config.cmake | 1 + libloragw/CMakeLists.txt | 150 ++++++++++++++++++++++++++++++ libloragw/loragw.pc.in | 10 ++ libloragw/loragw_config.h.in | 14 +++ util_lbt_test/CMakeLists.txt | 23 +++++ util_pkt_logger/CMakeLists.txt | 29 ++++++ util_spectral_scan/CMakeLists.txt | 23 +++++ util_spi_stress/CMakeLists.txt | 23 +++++ util_tx_continuous/CMakeLists.txt | 23 +++++ util_tx_test/CMakeLists.txt | 23 +++++ 11 files changed, 396 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 cmake/loragw-config.cmake create mode 100644 libloragw/CMakeLists.txt create mode 100644 libloragw/loragw.pc.in create mode 100644 libloragw/loragw_config.h.in create mode 100644 util_lbt_test/CMakeLists.txt create mode 100644 util_pkt_logger/CMakeLists.txt create mode 100644 util_spectral_scan/CMakeLists.txt create mode 100644 util_spi_stress/CMakeLists.txt create mode 100644 util_tx_continuous/CMakeLists.txt create mode 100644 util_tx_test/CMakeLists.txt --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,77 @@ +# -- Minimum required version +cmake_minimum_required (VERSION 3.2) + +# -- Project name +project (lora_gateway) + +# -- Various includes +include (CMakePackageConfigHelpers) +include (GNUInstallDirs) +include (CheckFunctionExists) + +# -- set c99 standard default +set(CMAKE_C_STANDARD 99) + +# -- options for shared lib (defaults off) +option(lora_gateway_build_shared_libs "build as a shared library" OFF) +set(BUILD_SHARED_LIBS ${lora_gateway_build_shared_libs}) + +# -- Required to build +set(CMAKE_THREAD_PREFER_PTHREAD TRUE) +set(THREADS_PREFER_PTHREAD_FLAG TRUE) +find_package(Threads REQUIRED) + +# -- Versioning with git tag +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git) + execute_process( + COMMAND git describe --tags --always + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + OUTPUT_VARIABLE "lora_gateway_VERSION" + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(lora_gateway_VERSION STREQUAL "") + set(lora_gateway_VERSION 0) + endif(lora_gateway_VERSION STREQUAL "") + message( STATUS "Git full version: ${lora_gateway_VERSION}" ) + execute_process( + COMMAND /bin/bash -c "git describe --tags --abbrev=0 | cut --delimiter='v' --fields=2" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + OUTPUT_VARIABLE "lora_gateway_VERSION_SHORT" + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(lora_gateway_VERSION_SHORT STREQUAL "") + set(lora_gateway_VERSION_SHORT 0) + endif(lora_gateway_VERSION_SHORT STREQUAL "") + message( STATUS "Git version: ${lora_gateway_VERSION_SHORT}" ) +else(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git) + set(lora_gateway_VERSION_SHORT 0) + set(lora_gateway_VERSION 0) +endif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git) + +# when building, don't use the install RPATH already +# (but later on when installing) +SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) +if (NOT (${CMAKE_INSTALL_PREFIX} STREQUAL "/usr" ) ) + SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") +endif() + +# -- add the core library +add_subdirectory(libloragw) + +# -- add util_lbt_test +add_subdirectory(util_lbt_test) + +# -- add util_pkt_logger +add_subdirectory(util_pkt_logger) + +# -- add util_pkt_logger +add_subdirectory(util_spectral_scan) + +# -- add util_spi_stress +add_subdirectory(util_spi_stress) + +# -- add util_tx_continuous +add_subdirectory(util_tx_continuous) + +# -- add util_tx_test +add_subdirectory(util_tx_test) --- /dev/null +++ b/cmake/loragw-config.cmake @@ -0,0 +1 @@ +include("${CMAKE_CURRENT_LIST_DIR}/loragw-targets.cmake") --- /dev/null +++ b/libloragw/CMakeLists.txt @@ -0,0 +1,150 @@ +set(TARGET loragw) + +add_library(${TARGET} "") + +# -- add additional debug options +# Set the DEBUG_* to 1 to activate debug mode in individual modules. +# Warning: that makes the module *very verbose*, do not use for production +option(DEBUG_AUX "Active debug mode in AUX module" OFF) +option(DEBUG_SPI "Active debug mode in SPI module" OFF) +option(DEBUG_REG "Active debug mode in REG module" OFF) +option(DEBUG_HAL "Active debug mode in HAL module" OFF) +option(DEBUG_GPIO "Active debug mode in GPIO module" OFF) +option(DEBUG_LBT "Active debug mode in LBT module" OFF) +option(DEBUG_GPS "Active debug mode in GPS module" OFF) + +message("-- Build with debug AUX: ${DEBUG_AUX}") +message("-- Build with debug SPI: ${DEBUG_SPI}") +message("-- Build with debug REG: ${DEBUG_REG}") +message("-- Build with debug HAL: ${DEBUG_HAL}") +message("-- Build with debug GPIO: ${DEBUG_GPIO}") +message("-- Build with debug LBT: ${DEBUG_LBT}") +message("-- Build with debug GPS: ${DEBUG_GPS}") + +# -- add the compile options +target_compile_options( + ${TARGET} + PRIVATE + -Werror + -Wall + -Wextra +) + +target_sources(${TARGET} + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src/loragw_aux.c + ${CMAKE_CURRENT_LIST_DIR}/src/loragw_fpga.c + ${CMAKE_CURRENT_LIST_DIR}/src/loragw_gps.c + ${CMAKE_CURRENT_LIST_DIR}/src/loragw_hal.c + ${CMAKE_CURRENT_LIST_DIR}/src/loragw_lbt.c + ${CMAKE_CURRENT_LIST_DIR}/src/loragw_radio.c + ${CMAKE_CURRENT_LIST_DIR}/src/loragw_reg.c + ${CMAKE_CURRENT_LIST_DIR}/src/loragw_spi.native.c +) + +# -- add the public headers +set (${TARGET}_PUBLIC_HEADERS + ${CMAKE_CURRENT_LIST_DIR}/inc/loragw_aux.h + ${CMAKE_CURRENT_LIST_DIR}/inc/loragw_fpga.h + ${CMAKE_CURRENT_LIST_DIR}/inc/loragw_gps.h + ${CMAKE_CURRENT_LIST_DIR}/inc/loragw_hal.h + ${CMAKE_CURRENT_LIST_DIR}/inc/loragw_lbt.h + ${CMAKE_CURRENT_LIST_DIR}/inc/loragw_radio.h + ${CMAKE_CURRENT_LIST_DIR}/inc/loragw_reg.h +) + +target_include_directories(${TARGET} + PRIVATE + ${CMAKE_CURRENT_LIST_DIR} + ${CMAKE_CURRENT_LIST_DIR}/inc + PUBLIC + $ + $ + $ +) + +configure_file(${CMAKE_CURRENT_LIST_DIR}/${TARGET}_config.h.in "${CMAKE_CURRENT_BINARY_DIR}/config.h" @ONLY) + +target_link_libraries(${TARGET} + PUBLIC + Threads::Threads + m +) + +set_target_properties(${TARGET} PROPERTIES VERSION ${lora_gateway_VERSION_SHORT}) +set_target_properties(${TARGET} PROPERTIES SOVERSION ${lora_gateway_VERSION_SHORT}) +set_target_properties(${TARGET} PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_BINARY_DIR}/config.h;${${TARGET}_PUBLIC_HEADERS}") + +# -- add the install targets +install (TARGETS ${TARGET} + EXPORT ${TARGET}_targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT shlib + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${TARGET} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${TARGET} +) + +# -- add pkg config file +configure_file ("${CMAKE_CURRENT_LIST_DIR}/${TARGET}.pc.in" "${PROJECT_BINARY_DIR}/${TARGET}.pc" @ONLY) +install (FILES ${PROJECT_BINARY_DIR}/${TARGET}.pc DESTINATION lib/pkgconfig) + +# -- write cmake package config file +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}/${TARGET}-config-version.cmake" + VERSION ${lora_gateway_VERSION} + COMPATIBILITY AnyNewerVersion +) + +export(EXPORT ${TARGET}_targets + FILE "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}/${TARGET}-targets.cmake" + NAMESPACE Semtech:: +) + +configure_file(${PROJECT_SOURCE_DIR}/cmake/${TARGET}-config.cmake + "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}/${TARGET}-config.cmake" + COPYONLY +) + +set(ConfigPackageLocation lib/cmake/${TARGET}) + +install(EXPORT ${TARGET}_targets + FILE ${TARGET}-targets.cmake + NAMESPACE Semtech:: + DESTINATION ${ConfigPackageLocation} +) + +install( + FILES ${PROJECT_SOURCE_DIR}/cmake/${TARGET}-config.cmake "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}/${TARGET}-config-version.cmake" + DESTINATION ${ConfigPackageLocation} + COMPONENT Devel +) + +# -- add test programs +foreach(TEST test_loragw_spi test_loragw_gps test_loragw_reg test_loragw_hal test_loragw_cal) + add_executable(${TEST} "") + + target_sources(${TEST} + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/tst/${TEST}.c + ) + + target_include_directories(${TEST} + PRIVATE + $ + $ + ${CMAKE_CURRENT_LIST_DIR}/inc + ${CMAKE_CURRENT_BINARY_DIR} + ) + + target_link_libraries(${TEST} + PRIVATE + loragw + ) + + install ( + TARGETS ${TEST} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ) + +endforeach() + --- /dev/null +++ b/libloragw/loragw.pc.in @@ -0,0 +1,10 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix}/bin +includedir=${prefix}/include/libloragw +libdir=${prefix}/lib + +Name: LIBLORAGW +Description: BLANK_TEXT +Version: @lora_gateway_VERSION@ +Cflags: -I${includedir} +Libs: -L${libdir} -lloragw --- /dev/null +++ b/libloragw/loragw_config.h.in @@ -0,0 +1,14 @@ +#ifndef _LORAGW_CONFIGURATION_H +#define _LORAGW_CONFIGURATION_H + +#define LIBLORAGW_VERSION "@lora_gateway_VERSION_SHORT@" + +#cmakedefine01 DEBUG_AUX +#cmakedefine01 DEBUG_SPI +#cmakedefine01 DEBUG_REG +#cmakedefine01 DEBUG_HAL +#cmakedefine01 DEBUG_GPS +#cmakedefine01 DEBUG_GPIO +#cmakedefine01 DEBUG_LBT + +#endif --- /dev/null +++ b/util_lbt_test/CMakeLists.txt @@ -0,0 +1,23 @@ + +add_executable(util_lbt_test "") +target_sources(util_lbt_test + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src/util_lbt_test.c +) + +target_link_libraries(util_lbt_test + PUBLIC + loragw +) + +set_target_properties(util_lbt_test PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin +) + +# add the install targets +install ( + TARGETS util_lbt_test + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT shlib + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) --- /dev/null +++ b/util_pkt_logger/CMakeLists.txt @@ -0,0 +1,29 @@ + +add_executable(util_pkt_logger "") +target_sources(util_pkt_logger + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src/util_pkt_logger.c + ${CMAKE_CURRENT_LIST_DIR}/src/parson.c +) + +target_include_directories(util_pkt_logger + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/inc +) + +target_link_libraries(util_pkt_logger + PUBLIC + loragw +) + +set_target_properties(util_pkt_logger PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin +) + +# add the install targets +install ( + TARGETS util_pkt_logger + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT shlib + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) --- /dev/null +++ b/util_spectral_scan/CMakeLists.txt @@ -0,0 +1,23 @@ + +add_executable(util_spectral_scan "") +target_sources(util_spectral_scan + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src/util_spectral_scan.c +) + +target_link_libraries(util_spectral_scan + PUBLIC + loragw +) + +set_target_properties(util_spectral_scan PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin +) + +# add the install targets +install ( + TARGETS util_spectral_scan + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT shlib + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) --- /dev/null +++ b/util_spi_stress/CMakeLists.txt @@ -0,0 +1,23 @@ + +add_executable(util_spi_stress "") +target_sources(util_spi_stress + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src/util_spi_stress.c +) + +target_link_libraries(util_spi_stress + PUBLIC + loragw +) + +set_target_properties(util_spi_stress PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin +) + +# add the install targets +install ( + TARGETS util_spi_stress + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT shlib + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) --- /dev/null +++ b/util_tx_continuous/CMakeLists.txt @@ -0,0 +1,23 @@ + +add_executable(util_tx_continuous "") +target_sources(util_tx_continuous + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src/util_tx_continuous.c +) + +target_link_libraries(util_tx_continuous + PUBLIC + loragw +) + +set_target_properties(util_tx_continuous PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin +) + +# add the install targets +install ( + TARGETS util_tx_continuous + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT shlib + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) --- /dev/null +++ b/util_tx_test/CMakeLists.txt @@ -0,0 +1,23 @@ + +add_executable(util_tx_test "") +target_sources(util_tx_test + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src/util_tx_test.c +) + +target_link_libraries(util_tx_test + PUBLIC + loragw +) + +set_target_properties(util_tx_test PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin +) + +# add the install targets +install ( + TARGETS util_tx_test + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT shlib + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +)