aboutsummaryrefslogtreecommitdiff
path: root/stm32f103/index.cmake
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2017-01-15 15:04:02 +0100
committerTrygve Laugstøl <trygvis@inamo.no>2017-01-15 15:04:02 +0100
commit2155ab2b72cc4f076dc0a25d0e3a5fdd4d218998 (patch)
tree8f89f8a86b949382456a2813d467518033995782 /stm32f103/index.cmake
parent7bd30b64fb5eaccb9c4a78b0bb4413d5a476089c (diff)
downloadmcu.cmake-2155ab2b72cc4f076dc0a25d0e3a5fdd4d218998.tar.gz
mcu.cmake-2155ab2b72cc4f076dc0a25d0e3a5fdd4d218998.tar.bz2
mcu.cmake-2155ab2b72cc4f076dc0a25d0e3a5fdd4d218998.tar.xz
mcu.cmake-2155ab2b72cc4f076dc0a25d0e3a5fdd4d218998.zip
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.
Diffstat (limited to 'stm32f103/index.cmake')
-rw-r--r--stm32f103/index.cmake81
1 files changed, 81 insertions, 0 deletions
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_PROPERTY:O_LEVEL>")
+ target_compile_options(${ARGS_TARGET} PUBLIC
+ "$<$<BOOL:${o_level}>:-O${o_level}>$<$<NOT:$<BOOL:${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\"$<TARGET_PROPERTY:MCU_LINKER_SCRIPT>\"")
+endfunction()