From 8f970800f695c6c9569fe5ae5ade8440934baa43 Mon Sep 17 00:00:00 2001 From: PonomarevDA Date: Mon, 24 Jun 2024 22:15:37 +0300 Subject: [PATCH] use add_subdirectory() instead of include() for platform cmake files --- CMakeLists.txt | 77 ++------------------------- Makefile | 4 +- Src/platform/stm32f103/CMakeLists.txt | 68 +++++++++++++++++++++++ Src/platform/ubuntu/CMakeLists.txt | 37 +++++++++++++ 4 files changed, 112 insertions(+), 74 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0eaafa9..64a69ab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,9 @@ cmake_minimum_required(VERSION 3.15.3) project(example CXX C ASM) +# Define options +option(USE_PLATFORM_UBUNTU "Build for SITL (Software In The Loop)" OFF) + if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() @@ -13,6 +16,7 @@ set(SRC_DIR ${ROOT_DIR}/Src) set(CMAKE_DIR ${ROOT_DIR}/cmake) set(LIBPARAMS_PATH ${ROOT_DIR}/Libs/libparams) set(BUILD_SRC_DIR ${ROOT_DIR}/build/src) +set(BUILD_OBJ_DIR ${ROOT_DIR}/build/obj) if(CAN_PROTOCOL STREQUAL "dronecan" OR CAN_PROTOCOL STREQUAL "cyphal") set(APPLICATION_DIR ${ROOT_DIR}/Src/${CAN_PROTOCOL}_application) @@ -62,75 +66,4 @@ add_definitions(-DHW_VERSION_MINOR=1) set(CMAKE_CXX_STANDARD 20) -include(${ROOT_DIR}/Src/platform/${APP_PLATFORM}/CMakeLists.txt) -set(EXECUTABLE ${PROJECT_NAME}.out) -add_executable(${EXECUTABLE} - ${libparams} - ${APPLICATION_SOURCES} - ${BUILD_SRC_DIR}/params.cpp - ${ROOT_DIR}/Src/common/algorithms.cpp - ${ROOT_DIR}/Src/common/module.cpp - ${PLATFORM_SOURCES} -) - -target_include_directories(${EXECUTABLE} PRIVATE - ${BUILD_SRC_DIR} - ${APPLICATION_HEADERS} - ${ROOT_DIR}/Src/common - ${PLATFORM_HEADERS} -) - -target_compile_options(${EXECUTABLE} PRIVATE - -Wall - -Wextra - -Wfloat-equal - -Werror - -Wundef - -Wshadow - -Wpointer-arith - -Wunreachable-code - -Wstrict-overflow=5 - -Wwrite-strings - -Wswitch-default -) - - -if(USE_PLATFORM_UBUNTU) -else() - target_compile_definitions(${EXECUTABLE} PRIVATE - -DUSE_HAL_DRIVER - -D${CPU} - -DCYPHAL_NUM_OF_CAN_BUSES=1 - ) - target_compile_options(${EXECUTABLE} PRIVATE - -mcpu=${TARGET_ARCHITECTURE} - -mthumb - -fdata-sections - -ffunction-sections - -lc -lm -lnosys - -specs=nano.specs - --specs=nosys.specs - ) - - target_link_options(${EXECUTABLE} PRIVATE - -T${ldFile} - -mcpu=${TARGET_ARCHITECTURE} - -mthumb - --specs=nosys.specs - -specs=nano.specs - -lc - -lm - -lnosys - -Wl,-Map=${PROJECT_NAME}.map,--cref - -Wl,--gc-sections - ) - - # Post-build - add_custom_command(TARGET ${EXECUTABLE} - POST_BUILD - COMMAND ${CMAKE_SIZE} ${EXECUTABLE} - COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE} ${PROJECT_NAME}.hex - COMMAND ${CMAKE_OBJCOPY} -O binary ${EXECUTABLE} ${PROJECT_NAME}.bin - COMMAND ${CMAKE_OBJCOPY} -I binary -O elf32-little ${EXECUTABLE} ${PROJECT_NAME}.elf - ) -endif() +add_subdirectory(${ROOT_DIR}/Src/platform/${APP_PLATFORM}) diff --git a/Makefile b/Makefile index 0fadc40..5c4f337 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ cyphal: checks generate_dsdl clean cd ${BUILD_OBJ_DIR} && cmake -DCAN_PROTOCOL=cyphal ../.. && make sitl_cyphal: checks generate_dsdl clean mkdir -p ${BUILD_OBJ_DIR} - cd ${BUILD_OBJ_DIR} && cmake -DCAN_PROTOCOL=cyphal -DUSE_PLATFORM_UBUNTU=1 ../.. && make + cd ${BUILD_OBJ_DIR} && cmake -DCAN_PROTOCOL=cyphal -DUSE_PLATFORM_UBUNTU=ON ../.. && make # Dronecan: dronecan: checks clean @@ -29,7 +29,7 @@ dronecan: checks clean cd ${BUILD_OBJ_DIR} && cmake -DCAN_PROTOCOL=dronecan ../.. && make sitl_dronecan: checks clean mkdir -p ${BUILD_OBJ_DIR} - cd ${BUILD_OBJ_DIR} && cmake -DCAN_PROTOCOL=dronecan -DUSE_PLATFORM_UBUNTU=1 ../.. && make + cd ${BUILD_OBJ_DIR} && cmake -DCAN_PROTOCOL=dronecan -DUSE_PLATFORM_UBUNTU=ON ../.. && make # Common: checks: diff --git a/Src/platform/stm32f103/CMakeLists.txt b/Src/platform/stm32f103/CMakeLists.txt index e32f301..b8cb76a 100644 --- a/Src/platform/stm32f103/CMakeLists.txt +++ b/Src/platform/stm32f103/CMakeLists.txt @@ -43,3 +43,71 @@ set(PLATFORM_SOURCES set(PLATFORM_HEADERS ${stm32CubeMxHeaders} ) + +set(EXECUTABLE ${PROJECT_NAME}.out) +add_executable(${EXECUTABLE} + ${libparams} + ${APPLICATION_SOURCES} + ${BUILD_SRC_DIR}/params.cpp + ${ROOT_DIR}/Src/common/algorithms.cpp + ${ROOT_DIR}/Src/common/module.cpp + ${PLATFORM_SOURCES} +) + +target_include_directories(${EXECUTABLE} PRIVATE + ${BUILD_SRC_DIR} + ${APPLICATION_HEADERS} + ${ROOT_DIR}/Src/common + ${PLATFORM_HEADERS} +) + +target_compile_options(${EXECUTABLE} PRIVATE + -Wall + -Wextra + -Wfloat-equal + -Werror + -Wundef + -Wshadow + -Wpointer-arith + -Wunreachable-code + -Wstrict-overflow=5 + -Wwrite-strings + -Wswitch-default +) + +target_compile_definitions(${EXECUTABLE} PRIVATE + -DUSE_HAL_DRIVER + -D${CPU} + -DCYPHAL_NUM_OF_CAN_BUSES=1 +) +target_compile_options(${EXECUTABLE} PRIVATE + -mcpu=${TARGET_ARCHITECTURE} + -mthumb + -fdata-sections + -ffunction-sections + -lc -lm -lnosys + -specs=nano.specs + --specs=nosys.specs +) + +target_link_options(${EXECUTABLE} PRIVATE + -T${ldFile} + -mcpu=${TARGET_ARCHITECTURE} + -mthumb + --specs=nosys.specs + -specs=nano.specs + -lc + -lm + -lnosys + -Wl,-Map=${PROJECT_NAME}.map,--cref + -Wl,--gc-sections +) + +# Post-build +add_custom_command(TARGET ${EXECUTABLE} + POST_BUILD + COMMAND ${CMAKE_SIZE} ${EXECUTABLE} + COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE} ${BUILD_OBJ_DIR}/${PROJECT_NAME}.hex + COMMAND ${CMAKE_OBJCOPY} -O binary ${EXECUTABLE} ${BUILD_OBJ_DIR}/${PROJECT_NAME}.bin + COMMAND ${CMAKE_OBJCOPY} -I binary -O elf32-little ${EXECUTABLE} ${BUILD_OBJ_DIR}/${PROJECT_NAME}.elf +) diff --git a/Src/platform/ubuntu/CMakeLists.txt b/Src/platform/ubuntu/CMakeLists.txt index 6c6a95e..ee65bce 100644 --- a/Src/platform/ubuntu/CMakeLists.txt +++ b/Src/platform/ubuntu/CMakeLists.txt @@ -13,3 +13,40 @@ set(PLATFORM_SOURCES set(PLATFORM_HEADERS ${CMAKE_CURRENT_LIST_DIR} ) + +set(EXECUTABLE ${PROJECT_NAME}.out) +add_executable(${EXECUTABLE} + ${libparams} + ${APPLICATION_SOURCES} + ${BUILD_SRC_DIR}/params.cpp + ${ROOT_DIR}/Src/common/algorithms.cpp + ${ROOT_DIR}/Src/common/module.cpp + ${PLATFORM_SOURCES} +) + +target_include_directories(${EXECUTABLE} PRIVATE + ${BUILD_SRC_DIR} + ${APPLICATION_HEADERS} + ${ROOT_DIR}/Src/common + ${PLATFORM_HEADERS} +) + +target_compile_options(${EXECUTABLE} PRIVATE + -Wall + -Wextra + -Wfloat-equal + -Werror + -Wundef + -Wshadow + -Wpointer-arith + -Wunreachable-code + -Wstrict-overflow=5 + -Wwrite-strings + -Wswitch-default +) + +# Post-build +add_custom_command(TARGET ${EXECUTABLE} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${EXECUTABLE} ${BUILD_OBJ_DIR}/${EXECUTABLE} +)