|
|
@@ -47,10 +47,12 @@ SET(CMAKE_OBJDUMP ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-objdump CACHE INTERNAL
|
|
|
SET(CMAKE_C_FLAGS_DEBUG "-Og -g" CACHE INTERNAL "c compiler flags debug")
|
|
|
SET(CMAKE_CXX_FLAGS_DEBUG "-Og -g" CACHE INTERNAL "cxx compiler flags debug")
|
|
|
SET(CMAKE_ASM_FLAGS_DEBUG "-g" CACHE INTERNAL "asm compiler flags debug")
|
|
|
+SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "" CACHE INTERNAL "linker flags debug")
|
|
|
|
|
|
-SET(CMAKE_C_FLAGS_RELEASE "-Os" CACHE INTERNAL "c compiler flags release")
|
|
|
-SET(CMAKE_CXX_FLAGS_RELEASE "-Os" CACHE INTERNAL "cxx compiler flags release")
|
|
|
+SET(CMAKE_C_FLAGS_RELEASE "-Os -flto" CACHE INTERNAL "c compiler flags release")
|
|
|
+SET(CMAKE_CXX_FLAGS_RELEASE "-Os -flto" CACHE INTERNAL "cxx compiler flags release")
|
|
|
SET(CMAKE_ASM_FLAGS_RELEASE "" CACHE INTERNAL "asm compiler flags release")
|
|
|
+SET(CMAKE_EXE_LINKER_FLAGS_RELESE "-flto" CACHE INTERNAL "linker flags release")
|
|
|
|
|
|
SET(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_PREFIX}/${TARGET_TRIPLET})
|
|
|
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|
|
@@ -64,3 +66,84 @@ ENDFUNCTION()
|
|
|
|
|
|
STRING(TOLOWER ${STM32_FAMILY} STM32_FAMILY_LOWER)
|
|
|
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/gcc_stm32${STM32_FAMILY_LOWER}.cmake)
|
|
|
+
|
|
|
+MACRO(STM32_KB_TO_BYTES KB BYTES)
|
|
|
+ STRING(REGEX REPLACE "^(.+)[kK]$" "\\1" KILOBYTES ${KB})
|
|
|
+ IF(KILOBYTES)
|
|
|
+ MATH(EXPR ${BYTES} "${KILOBYTES} * 1024")
|
|
|
+ ELSE()
|
|
|
+ SET(${BYTES} ${KB})
|
|
|
+ ENDIF()
|
|
|
+ENDMACRO()
|
|
|
+
|
|
|
+FUNCTION(STM32_SET_FLASH_PARAMS TARGET STM32_FLASH_SIZE STM32_RAM_SIZE STM32_STACK_ADDRESS STM32_MIN_STACK_SIZE STM32_MIN_HEAP_SIZE STM32_FLASH_ORIGIN STM32_RAM_ORIGIN)
|
|
|
+ IF(NOT STM32_LINKER_SCRIPT)
|
|
|
+ MESSAGE(FATAL_ERROR "No linker script specified. Please specify linker script using STM32_LINKER_SCRIPT variable.")
|
|
|
+ ENDIF()
|
|
|
+ CONFIGURE_FILE(${STM32_LINKER_SCRIPT} ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_flash.ld)
|
|
|
+ SET_TARGET_PROPERTIES(${TARGET} PROPERTIES LINK_FLAGS "-T${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_flash.ld ${CMAKE_EXE_LINKER_FLAGS}")
|
|
|
+ENDFUNCTION()
|
|
|
+
|
|
|
+FUNCTION(STM32_SET_FLASH_PARAMS TARGET FLASH_SIZE RAM_SIZE)
|
|
|
+ IF(NOT STM32_LINKER_SCRIPT)
|
|
|
+ MESSAGE(FATAL_ERROR "No linker script specified. Please specify linker script using STM32_LINKER_SCRIPT variable.")
|
|
|
+ ENDIF()
|
|
|
+
|
|
|
+ STM32_KB_TO_BYTES(${FLASH_SIZE} FLASH_SIZE)
|
|
|
+ STM32_KB_TO_BYTES(${RAM_SIZE} RAM_SIZE)
|
|
|
+
|
|
|
+ IF(NOT STM32_FLASH_ORIGIN)
|
|
|
+ SET(STM32_FLASH_ORIGIN "0x08000000")
|
|
|
+ ENDIF()
|
|
|
+
|
|
|
+ IF(NOT STM32_RAM_ORIGIN)
|
|
|
+ SET(STM32_RAM_ORIGIN "536870912")
|
|
|
+ ENDIF()
|
|
|
+
|
|
|
+ IF(NOT STM32_STACK_ADDRESS)
|
|
|
+ MATH(EXPR STM32_STACK_ADDRESS "${STM32_RAM_ORIGIN} + ${RAM_SIZE}")
|
|
|
+ ENDIF()
|
|
|
+
|
|
|
+ SET(STM32_FLASH_SIZE ${FLASH_SIZE})
|
|
|
+ SET(STM32_RAM_SIZE ${RAM_SIZE})
|
|
|
+
|
|
|
+ IF(NOT STM32_MIN_STACK_SIZE)
|
|
|
+ SET(STM32_MIN_STACK_SIZE "0x200")
|
|
|
+ ENDIF()
|
|
|
+
|
|
|
+ IF(NOT STM32_MIN_HEAP_SIZE)
|
|
|
+ SET(STM32_MIN_HEAP_SIZE "0")
|
|
|
+ ENDIF()
|
|
|
+
|
|
|
+ CONFIGURE_FILE(${STM32_LINKER_SCRIPT} ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_flash.ld)
|
|
|
+ SET_TARGET_PROPERTIES(${TARGET} PROPERTIES LINK_FLAGS "-T${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_flash.ld ${CMAKE_EXE_LINKER_FLAGS}")
|
|
|
+ENDFUNCTION()
|
|
|
+
|
|
|
+FUNCTION(STM32_SET_TARGET_PROPERTIES TARGET)
|
|
|
+ IF((NOT STM32_CHIP_TYPE) AND (NOT STM32_CHIP))
|
|
|
+ MESSAGE(WARNING "Neither STM32_CHIP_TYPE nor STM32_CHIP selected, you'll have to use STM32_SET_CHIP_DEFINITIONS directly")
|
|
|
+ ELSE()
|
|
|
+ STM32_SET_CHIP_DEFINITIONS(${TARGET} ${STM32_CHIP_TYPE})
|
|
|
+ IF(((NOT STM32_FLASH_SIZE) OR (NOT STM32_RAM_SIZE)) AND (NOT STM32_CHIP))
|
|
|
+ MESSAGE(FATAL_ERROR "Cannot get chip parameters. Please specify either STM32_CHIP or STM32_FLASH_SIZE/STM32_RAM_SIZE")
|
|
|
+ ENDIF()
|
|
|
+ IF((NOT STM32_FLASH_SIZE) OR (NOT STM32_RAM_SIZE))
|
|
|
+ STM32_GET_CHIP_PARAMETERS(${STM32_CHIP} STM32_FLASH_SIZE STM32_RAM_SIZE)
|
|
|
+ IF((NOT STM32_FLASH_SIZE) OR (NOT STM32_RAM_SIZE))
|
|
|
+ MESSAGE(FATAL_ERROR "Unknown chip: ${STM32_CHIP}. Try to use STM32_FLASH_SIZE/STM32_RAM_SIZE directly.")
|
|
|
+ ENDIF()
|
|
|
+ MESSAGE(STATUS "${STM32_CHIP} has ${STM32_FLASH_SIZE}iB of flash memory and ${STM32_RAM_SIZE}iB of RAM")
|
|
|
+ ENDIF()
|
|
|
+ ENDIF()
|
|
|
+ STM32_SET_FLASH_PARAMS(${TARGET} ${STM32_FLASH_SIZE} ${STM32_RAM_SIZE})
|
|
|
+ENDFUNCTION()
|
|
|
+
|
|
|
+MACRO(STM32_GENERATE_LIBRARIES NAME SOURCES LIBRARIES)
|
|
|
+ STRING(TOLOWER ${STM32_FAMILY} STM32_FAMILY_LOWER)
|
|
|
+ FOREACH(CHIP_TYPE ${STM32_CHIP_TYPES})
|
|
|
+ STRING(TOLOWER ${CHIP_TYPE} CHIP_TYPE_LOWER)
|
|
|
+ LIST(APPEND ${LIBRARIES} ${NAME}_${STM32_FAMILY_LOWER}_${CHIP_TYPE_LOWER})
|
|
|
+ ADD_LIBRARY(${NAME}_${STM32_FAMILY_LOWER}_${CHIP_TYPE_LOWER} ${SOURCES})
|
|
|
+ STM32_SET_CHIP_DEFINITIONS(${NAME}_${STM32_FAMILY_LOWER}_${CHIP_TYPE_LOWER} ${CHIP_TYPE})
|
|
|
+ ENDFOREACH()
|
|
|
+ENDMACRO()
|