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)
|
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
|
||||||
project(SkullC)
|
|
||||||
|
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_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_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(Utility)
|
||||||
add_subdirectory(Messaging)
|
add_subdirectory(Messaging)
|
||||||
@ -14,3 +31,23 @@ if(WITH_TESTS)
|
|||||||
enable_testing()
|
enable_testing()
|
||||||
add_subdirectory(Tests)
|
add_subdirectory(Tests)
|
||||||
endif()
|
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)
|
add_library(messaging INTERFACE)
|
||||||
|
|
||||||
@ -6,5 +6,8 @@ add_library(skullc::messaging ALIAS messaging)
|
|||||||
|
|
||||||
target_include_directories(messaging
|
target_include_directories(messaging
|
||||||
INTERFACE
|
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)
|
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
|
add_library(utility STATIC
|
||||||
Src/utility_logging.cpp
|
Src/utility_logging.cpp
|
||||||
|
${additional_sources}
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(skullc::utility ALIAS utility)
|
add_library(skullc::utility ALIAS utility)
|
||||||
|
|
||||||
target_include_directories(utility
|
target_include_directories(utility
|
||||||
PUBLIC
|
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