diff --git a/CMakeLists.txt b/CMakeLists.txt index 9ed62e8..f6dd406 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,158 +1,124 @@ +#THIS FILE IS AUTO GENERATED FROM THE TEMPLATE! DO NOT CHANGE! cmake_minimum_required(VERSION 3.23) -set(CMAKE_SYSTEM_NAME Generic) -set(CMAKE_SYSTEM_VERSION 1) -set(CMAKE_C_COMPILER arm-none-eabi-gcc) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_COMPILER arm-none-eabi-g++) -set(CMAKE_ASM_COMPILER arm-none-eabi-gcc) -set(CMAKE_AR arm-none-eabi-ar) -set(CMAKE_OBJCOPY arm-none-eabi-objcopy) -set(CMAKE_OBJDUMP arm-none-eabi-objdump) -set(SIZE arm-none-eabi-size) -set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) -if (BOOT) - project(reader-boot C CXX ASM) + + +#/////////////////////////////////////////////PLEASE CHOOSE THIS OPTIONS BY YOURSELF +set (ENV{HAL_DRIVER_CONFIG} ${CMAKE_CURRENT_SOURCE_DIR}/main_prog/Core/Inc/stm32g0xx_hal_conf.h) +set(ENV{MCU} "STM32G070xx") +set(ENV{LINKER_SCRIPT} ${CMAKE_SOURCE_DIR}/STM32G070CBTX_FLASH.ld) +set(ENV{FREERTOS_CONFIG} "${CMAKE_CURRENT_SOURCE_DIR}/main_prog/Core/Inc/FreeRTOSConfig.h") +#///////////////////////////////////////////// + +string (SUBSTRING "$ENV{MCU}" 0 7 MCU_SERIES) +string(APPEND MCU_SERIES "XX") +if(${MCU_SERIES} MATCHES "STM32F4|STM32F3|STM32WB|STM32WL|STM32L4|STM32WB|STM32WL|STM32G4") + set(ENV{CORTEX-M} "4") + set(ENV{HARDWARE_FLOAT} 1) +elseif(${MCU_SERIES} MATCHES "STM32F2|STM32F1") + set(ENV{CORTEX-M} "3") + set(ENV{HARDWARE_FLOAT} 0) +elseif(${MCU_SERIES} MATCHES "STM32F0|STM32C0|STM32G0|STM32L0" ) + set(ENV{CORTEX-M} "0") + set(ENV{HARDWARE_FLOAT} 0) else() - project(reader-main-prog C CXX ASM) + message(FATAL_ERROR "${MCU_SERIES} is not supported") endif() -set(CORTEX-M 0) -set(COMPILE_OPTIONS -mcpu=cortex-m${CORTEX-M} -mthumb -mthumb-interwork -ffunction-sections -fdata-sections -fno-common -fmessage-length=0 $<$:-fno-rtti>) -set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/STM32G070CBTX_FLASH.ld) -set(LINK_OPTIONS -Wl,-gc-sections,--print-memory-usage,-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map -mcpu=cortex-m${CORTEX-M} -mthumb -mthumb-interwork -T ${LINKER_SCRIPT} -specs=nano.specs -specs=nosys.specs) - +set(ENV{MCU_SERIES} ${MCU_SERIES}) +add_subdirectory(Cmake_templates) if(GTEST) - - add_definitions(-DGTEST) - include(FetchContent) - FetchContent_Declare( - googletest - # Specify the commit you depend on and update it regularly. - URL https://github.com/google/googletest/archive/5376968f6948923e2411081fd9372e71a59d8e77.zip - ) - # For Windows: Prevent overriding the parent project's compiler/linker settings - set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) - FetchContent_MakeAvailable(googletest) - project(gtest C CXX ASM) - add_subdirectory(common_functions) - include_directories(gtests) - add_executable(example gtests/unit-test.cpp) - target_link_libraries(example gtest_main common_functions_lib sim800_lib) - add_test(NAME example_test COMMAND example) - # Now simply link against gtest or gtest_main as needed. Eg - - - +add_subdirectory(libs/Drivers/CMSIS) +add_subdirectory(libs/Drivers/$ENV{MCU_SERIES}_HAL_Driver) +add_subdirectory(gtests) else() + set(CMAKE_SYSTEM_NAME Generic) + set(CMAKE_OBJECT_PATH_MAX 300) + set(CMAKE_C_COMPILER arm-none-eabi-gcc) + set(CMAKE_CXX_COMPILER arm-none-eabi-g++) + set(CMAKE_ASM_COMPILER arm-none-eabi-gcc) set(LEN_OFFSET 0xBC) set (CRC_ADDRESS 0) set (FLASH_MAIN_ADDRESS 0) + set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) add_subdirectory(cmake_func) - set(MEM_MAP_FILE "memory_map.inc") - if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug" AND NOT BOOT) - set(MEM_MAP_FILE_DEBUG "memory_map_debug.inc") - FUNC_CREATE_MEMORY_MAP("${MEM_MAP_FILE_DEBUG}" "128" "0" "4") - else() - set(MEM_MAP_FILE "memory_map.inc") - FUNC_CREATE_MEMORY_MAP("${MEM_MAP_FILE}" "128" "8" "4" ) - endif() math(EXPR LEN_ADDRESS "${FLASH_MAIN_ADDRESS} + ${LEN_OFFSET}" OUTPUT_FORMAT HEXADECIMAL) add_compile_definitions("PAGE_SIZE=0x0800") - #PAGE SIZE FOR F0 Series with 256KB Flash 0x0800 For 128Kb Flash 0x0400 - - # uncomment to mitigate c++17 absolute addresses warnings - #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-register") - if(BOOT) - set (LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/bootloader/STM32G070CBTX_FLASH.ld) - else() - set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/STM32G070CBTX_FLASH.ld ) - endif() - if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release") - message(STATUS "Maximum optimization for speed") - add_definitions(-DWATCHDOG_IWDG) - if (BOOT) - add_compile_options(-Os -g) - else() - add_compile_options(-Ofast -g) - endif() - - elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo") - message(STATUS "Maximum optimization for speed, debug info included") - add_compile_options(-Ofast -g) - - elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel") - message(STATUS "Maximum optimization for size") - add_compile_options(-Os) - else () - message(STATUS "Minimal optimization, debug info included") - add_definitions(-DWATCHDOG_IWDG) - add_compile_options(-Os -g) - endif () - - # project settings if (BOOT) - add_compile_definitions("BOOT_FLASH_VECTOR_TABLE_CS_OFFSET=${LEN_OFFSET}" "LEN_ADDRESS=${LEN_ADDRESS}") - add_definitions(-DDEBUG -DUSE_FULL_LL_DRIVER -DUSE_HAL_DRIVER -DSTM32G070xx) - - include_directories(Boot/Core/Inc Drivers/STM32G0xx_HAL_Driver/Inc Drivers/STM32G0xx_HAL_Driver/Inc/Legacy Drivers/CMSIS/Device/ST/STM32G0xx/Include Drivers/CMSIS/Include Boot/App) - include_directories(Boot/loader) - include_directories(Boot/ARMCM0_STM32G0) - - file(GLOB_RECURSE SOURCES "Boot/Core/*.*" "Drivers/*.*" "Boot/App/*.*" "Boot/loader/*.*" "Boot/ARMCM0_STM32G0/*.*") - list(FILTER SOURCES EXCLUDE REGEX "IAR\\/.*.[c|h]$") - list(FILTER SOURCES EXCLUDE REGEX "Keil\\/.*.[c|h]$") - set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/Boot/STM32G070CBTX_FLASH.ld) - add_executable(${PROJECT_NAME}.elf ${SOURCES} ) - target_compile_options(${PROJECT_NAME}.elf PUBLIC ${COMPILE_OPTIONS}) - target_link_options(${PROJECT_NAME}.elf PUBLIC ${LINK_OPTIONS}) - set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex) - set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin) - add_custom_command(TARGET ${PROJECT_NAME}.elf PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/${MEM_MAP_FILE}" ${PROJECT_BINARY_DIR}/${MEM_MAP_FILE} - ) - add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD - COMMAND ${CMAKE_OBJCOPY} -Oihex $ ${HEX_FILE} - COMMAND ${CMAKE_OBJCOPY} -Obinary $ ${BIN_FILE} - COMMENT "Building ${HEX_FILE} - Building ${BIN_FILE}") - + add_subdirectory(libs) + add_subdirectory(Boot) else() - - include_directories(Core/Inc Drivers/STM32G0xx_HAL_Driver/Inc Drivers/STM32G0xx_HAL_Driver/Inc/Legacy Drivers/CMSIS/Device/ST/STM32G0xx/Include Drivers/CMSIS/Include Core/Interfaces Core/Interfaces/Templates App) - - add_definitions(-DDEBUG -DUSE_HAL_DRIVER -DSTM32G070xx) - - file(GLOB_RECURSE SOURCES "Core/*.*" "Drivers/*.*" "App/*.*") - - set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/STM32G070CBTX_FLASH.ld) + set(CMAKE_AR arm-none-eabi-ar) + set(CMAKE_OBJCOPY arm-none-eabi-objcopy) + set(CMAKE_OBJDUMP arm-none-eabi-objdump) + set(SIZE arm-none-eabi-size) + set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + project(myProject C CXX) + #//////////////////////////////////////////////////////THIS IS USER CODE PART - add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT}) - target_compile_options(${PROJECT_NAME}.elf PUBLIC ${COMPILE_OPTIONS}) - target_link_options(${PROJECT_NAME}.elf PUBLIC ${LINK_OPTIONS}) - set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex) - set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin) - set(HEX_FILE_SRECORD_WITH_LEN_AND_CRC ${PROJECT_BINARY_DIR}/${PROJECT_NAME}_SRECORD.hex) - set(AFTER_BUILD_SCRIPT ${PROJECT_SOURCE_DIR}/scripts/after_build.ps1) - if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") - add_custom_command(TARGET ${PROJECT_NAME}.elf PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/${MEM_MAP_FILE_DEBUG}" ${PROJECT_BINARY_DIR}/${MEM_MAP_FILE} - ) - else() - add_custom_command(TARGET ${PROJECT_NAME}.elf PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/${MEM_MAP_FILE}" ${PROJECT_BINARY_DIR}/${MEM_MAP_FILE} - ) - endif() - math(EXPR CRC_USER_END_ADDRESS "${CRC32_USER_PROG_AND_USER_LIB_ADDRESS} + 4") - add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD - COMMAND ${CMAKE_OBJCOPY} -Oihex $ ${HEX_FILE} - COMMAND ${CMAKE_OBJCOPY} -Obinary $ ${BIN_FILE} - COMMENT "Building ${HEX_FILE} Building ${BIN_FILE}" - COMMAND powershell ${AFTER_BUILD_SCRIPT} ${HEX_FILE} ${HEX_FILE_SRECORD_WITH_LEN_AND_CRC} ${LEN_ADDRESS} + #//////////////////////////////////////////////////////END USER CODE PART + + + set(CMAKE_AR arm-none-eabi-ar) + set(CMAKE_OBJCOPY arm-none-eabi-objcopy) + set(CMAKE_OBJDUMP arm-none-eabi-objdump) + set(SIZE arm-none-eabi-size) + set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + + + set(COMPILE_OPTIONS + -mcpu=cortex-m$ENV{CORTEX-M} + -mthumb -mthumb-interwork + -ffunction-sections + -fdata-sections + -fno-common + -fmessage-length=0 + $<$:-fno-rtti> + $<$:-fpermissive> + ) + set(LINK_OPTIONS + -Wl,-gc-sections,--print-memory-usage,-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map + -mcpu=cortex-m$ENV{CORTEX-M} + -mthumb + -mthumb-interwork + -T $ENV{LINKER_SCRIPT} + ) + + set(COMPILE_DEF + USE_HAL_DRIVER + USE_FULL_LL_DRIVER + ${ENV_MCU} + #//////////////////////////USER DEFINITIONS + MBEDTLS_CONFIG_FILE="mbedtls_config.h" + #///////////////////////////////////////// + FW_VERSION="${FW_VERSION}" + ) + + set(ENV{LINK_OPTIONS} "${LINK_OPTIONS}") + + + add_link_options($ENV{LINK_OPTIONS}) + if ($ENV{CORTEX-M} EQUAL 4) + if ($ENV{HARDWARE_FLOAT} EQUAL 1) + add_compile_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16) + add_link_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16) + add_compile_definitions(ARM_MATH_CM4 ARM_MATH_MATRIX_CHECK ARM_MATH_ROUNDING) + elseif($ENV{HARDWARE_FLOAT} EQUAL 0 AND $ENV}) + string(PREPEND COMPILE_OPTIONS " -mfloat-abi=soft") + endif () + endif() + set(ENV{COMPILE_OPTIONS} "${COMPILE_OPTIONS}") + set(ENV{COMPILE_DEF} "${COMPILE_DEF}") + add_subdirectory(libs) + add_subdirectory(main_prog) endif() + +#//////////////////////////////////////////////////////THIS IS USER CODE PART + +#//////////////////////////////////////////////////////END USER CODE PART endif() \ No newline at end of file