Make the project use cmake components
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Erki 2021-03-28 18:18:27 +03:00
parent b626999684
commit 9820816d06
10 changed files with 136 additions and 10 deletions

View File

@ -1,11 +1,28 @@
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
project(SkullC)
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
set(version 0.1.0)
project(skullc
VERSION ${version}
LANGUAGES
C
CXX
)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/)
set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
list(APPEND CMAKE_CXX_FLAGS "-Wall -Wextra")
option(WITH_TESTS "Enable unit testing." OFF)
option(WITH_HAL "Enable the compiling and deployment of the HAL dependent sections." OFF)
include(skullc-install)
if(WITH_HAL)
add_subdirectory(Peripherals)
endif()
add_subdirectory(Utility)
add_subdirectory(Messaging)
@ -14,3 +31,23 @@ if(WITH_TESTS)
enable_testing()
add_subdirectory(Tests)
endif()
## Install
configure_file(skullc-config.cmake
"${CMAKE_BINARY_DIR}/skullc-config.cmake"
@ONLY
)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${CMAKE_BINARY_DIR}/skullc-config-version.cmake"
VERSION ${version}
COMPATIBILITY AnyNewerVersion
)
install(
FILES
"${CMAKE_BINARY_DIR}/skullc-config.cmake"
DESTINATION lib/cmake/skullc
)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
add_library(messaging INTERFACE)
@ -6,5 +6,8 @@ add_library(skullc::messaging ALIAS messaging)
target_include_directories(messaging
INTERFACE
${CMAKE_CURRENT_SOURCE_DIR}/Inc
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Inc>
$<INSTALL_INTERFACE:include>
)
skullc_install_packages(skullc messaging ${version})

View File

@ -0,0 +1,2 @@
include(${CMAKE_CURRENT_LIST_DIR}/skullc-messaging-config-version.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/skullc-messaging-targets.cmake)

View File

@ -0,0 +1,21 @@
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
add_library(peripherals STATIC
Src/peripherals_imu_icm.cpp
Src/peripherals_io.cpp
Src/peripherals_motors.cpp
Src/peripherals_pwm_channel.cpp
Src/peripherals_spi.cpp
Src/peripherals_utility.cpp
)
add_library(skullc::peripherals ALIAS peripherals)
target_include_directories(peripherals
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Inc>
$<INSTALL_INTERFACE:include>
)
## INSTALL
skullc_install_packages(skullc peripherals ${version})

View File

@ -0,0 +1,2 @@
include(${CMAKE_CURRENT_LIST_DIR}/skullc-peripherals-config-version.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/skullc-peripherals-targets.cmake)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
find_package(Catch2 REQUIRED)

View File

@ -1,12 +1,24 @@
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
if(WITH_HAL)
set(additional_sources
Src/utility_asynchuartlogger.cpp
Src/utility_atomicscopeguard.cpp
Src/utility_itmlogger.cpp
Src/utility_uartlogger.cpp)
endif()
add_library(utility STATIC
Src/utility_logging.cpp
${additional_sources}
)
add_library(skullc::utility ALIAS utility)
target_include_directories(utility
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/Inc
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Inc>
$<INSTALL_INTERFACE:include>
)
skullc_install_packages(skullc utility ${version})

View File

@ -0,0 +1,2 @@
include(${CMAKE_CURRENT_LIST_DIR}/skullc-utility-config-version.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/skullc-utility-targets.cmake)

View File

@ -0,0 +1,44 @@
macro(skullc_install_packages in_project in_component in_version)
# reference: https://stackoverflow.com/questions/54702582/how-to-configure-project-with-components-in-cmake
install(TARGETS ${in_component} EXPORT ${in_component}-targets
COMPONENT ${in_component}
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
RUNTIME DESTINATION bin
INCLUDES DESTINATION include
)
install(EXPORT ${in_component}-targets
FILE "${in_project}-${in_component}-targets.cmake"
NAMESPACE ${in_project}::
DESTINATION lib/cmake/${in_project}
COMPONENT ${in_component}
)
configure_file("${in_component}-config.cmake.in"
"${CMAKE_BINARY_DIR}/${in_project}-${in_component}-config.cmake"
@ONLY
)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${CMAKE_BINARY_DIR}/${in_project}-${in_component}-config-version.cmake"
VERSION ${in_version}
COMPATIBILITY AnyNewerVersion
)
install(
FILES
"${CMAKE_BINARY_DIR}/${in_project}-${in_component}-config.cmake"
"${CMAKE_BINARY_DIR}/${in_project}-${in_component}-config-version.cmake"
DESTINATION lib/cmake/${in_project}
COMPONENT ${in_component}
)
install(
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Inc/
COMPONENT ${in_component}
DESTINATION ${CMAKE_INSTALL_PREFIX}/include
)
endmacro()

3
skullc-config.cmake Normal file
View File

@ -0,0 +1,3 @@
foreach(component ${skullc_FIND_COMPONENTS})
include(${CMAKE_CURRENT_LIST_DIR}/skullc-${component}-config.cmake)
endforeach()