From 2155ab2b72cc4f076dc0a25d0e3a5fdd4d218998 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sun, 15 Jan 2017 15:04:02 +0100 Subject: o Adding a generic binutils part for creating the info files (.nm, disassembly, size, hex and bin files.) o Adding initial support for STM32F103xx chips. Can easily be expanded to all at least the F1 series. --- stm32f103/index.cmake | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 stm32f103/index.cmake (limited to 'stm32f103/index.cmake') diff --git a/stm32f103/index.cmake b/stm32f103/index.cmake new file mode 100644 index 0000000..c840aa5 --- /dev/null +++ b/stm32f103/index.cmake @@ -0,0 +1,81 @@ +set(CMAKE_C_STANDARD "11") +set(CMAKE_CXX_STANDARD "14") + +set(MCU_INIT_SOURCES "") +list(APPEND MCU_INIT_SOURCES "${MCU_BASEDIR}/stm32f103/src/init_low.s") +list(APPEND MCU_INIT_SOURCES "${MCU_BASEDIR}/stm32f103/src/init_high.cpp") +list(APPEND MCU_INIT_SOURCES "${MCU_BASEDIR}/stm32f103/src/default_handler.cpp") +list(APPEND MCU_INIT_SOURCES "${MCU_BASEDIR}/stm32f103/include/mcu/init.h") +set(MCU_INIT_INCLUDES "") +list(APPEND MCU_INIT_INCLUDES "${MCU_BASEDIR}/stm32f103/include") + +function(mcu_add_executable) + + set(options) + set(oneValueArgs TARGET LINKER_SCRIPT) + set(multiValueArgs) + cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if (NOT ARGS_TARGET) + message(FATAL_ERROR "MCU: Missing required argument: TARGET") + endif () + + if (MCU_CHIP MATCHES "stm32f103.4" OR MCU_CHIP MATCHES "stm32f103.6") + set(size_define STM32F10X_SM) + elseif (MCU_CHIP MATCHES "stm32f103.8" OR MCU_CHIP MATCHES "stm32f103.b") + set(size_define STM32F10X_MD) + elseif (MCU_CHIP MATCHES "stm32f103.c" OR MCU_CHIP MATCHES "stm32f103.d" OR MCU_CHIP MATCHES "stm32f103.e") + set(size_define STM32F10X_LD) + else () + message(FATAL_ERROR "Unknown STM32 version: ${MCU_CHIP}") + endif () + + target_compile_definitions(${ARGS_TARGET} PUBLIC ${size_define}) + + # Compile and linker options + + set(o_level "$") + target_compile_options(${ARGS_TARGET} PUBLIC + "$<$:-O${o_level}>$<$>:-O3>") + unset(o_level) + + target_compile_options(${ARGS_TARGET} PUBLIC + -mcpu=cortex-m3 + -mthumb + -g + ) + + target_link_libraries(${ARGS_TARGET} PUBLIC + -mcpu=cortex-m3 + -mthumb + -nostdlib + -nostartfiles + -Wl,--gc-sections + ) + + # Linker script + + if (ARGS_LINKER_SCRIPT) + if (NOT IS_ABSOLUTE "${ARGS_LINKER_SCRIPT}") + set(ARGS_LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/${ARGS_LINKER_SCRIPT}") + endif () + set_target_properties(${ARGS_TARGET} PROPERTIES MCU_LINKER_SCRIPT "${ARGS_LINKER_SCRIPT}") + endif () + + stm32_configure_linker_script(${ARGS_TARGET}) + +endfunction() + +function(stm32_configure_linker_script T) + get_target_property(MCU_LINKER_SCRIPT ${T} MCU_LINKER_SCRIPT) + + if (NOT MCU_LINKER_SCRIPT) + set(ld "${MCU_BASEDIR}/stm32f103/stm32f103.ld") + message("MCU: Using built-in linker script: ${ld}") + + set_target_properties(${T} PROPERTIES MCU_LINKER_SCRIPT ${ld}) + endif () + + target_link_libraries(${T} PUBLIC + "-T\"$\"") +endfunction() -- cgit v1.2.3