Make the project use cmake components
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
b626999684
commit
9820816d06
@ -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
|
||||
)
|
||||
|
||||
@ -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})
|
||||
|
||||
2
Messaging/messaging-config.cmake.in
Normal file
2
Messaging/messaging-config.cmake.in
Normal file
@ -0,0 +1,2 @@
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/skullc-messaging-config-version.cmake)
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/skullc-messaging-targets.cmake)
|
||||
21
Peripherals/CMakeLists.txt
Normal file
21
Peripherals/CMakeLists.txt
Normal 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})
|
||||
2
Peripherals/peripherals-config.cmake.in
Normal file
2
Peripherals/peripherals-config.cmake.in
Normal file
@ -0,0 +1,2 @@
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/skullc-peripherals-config-version.cmake)
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/skullc-peripherals-targets.cmake)
|
||||
@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
|
||||
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
|
||||
|
||||
find_package(Catch2 REQUIRED)
|
||||
|
||||
|
||||
@ -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})
|
||||
|
||||
2
Utility/utility-config.cmake.in
Normal file
2
Utility/utility-config.cmake.in
Normal file
@ -0,0 +1,2 @@
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/skullc-utility-config-version.cmake)
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/skullc-utility-targets.cmake)
|
||||
44
cmake/skullc-install.cmake
Normal file
44
cmake/skullc-install.cmake
Normal 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
3
skullc-config.cmake
Normal file
@ -0,0 +1,3 @@
|
||||
foreach(component ${skullc_FIND_COMPONENTS})
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/skullc-${component}-config.cmake)
|
||||
endforeach()
|
||||
Loading…
x
Reference in New Issue
Block a user