summaryrefslogtreecommitdiff
path: root/sw/cmake/gcc-arm-none-eabi.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'sw/cmake/gcc-arm-none-eabi.cmake')
-rw-r--r--sw/cmake/gcc-arm-none-eabi.cmake51
1 files changed, 51 insertions, 0 deletions
diff --git a/sw/cmake/gcc-arm-none-eabi.cmake b/sw/cmake/gcc-arm-none-eabi.cmake
new file mode 100644
index 0000000..5e91a53
--- /dev/null
+++ b/sw/cmake/gcc-arm-none-eabi.cmake
@@ -0,0 +1,51 @@
+set(WINDOWS_ST_CLT_PATH "C:/ST/STM32CubeCLT/STM32CubeCLT/GNU-tools-for-STM32/bin/")
+set(MAC_ST_CLT_PATH "/opt/ST/STM32CubeCLT/GNU-tools-for-STM32/bin/")
+if(EXISTS "${WINDOWS_ST_CLT_PATH}")
+ set(TOOLCHAIN_DIRECTORIES ${WINDOWS_ST_CLT_PATH})
+elseif(EXISTS "${MAC_ST_CLT_PATH}")
+ set(TOOLCHAIN_DIRECTORIES ${MAC_ST_CLT_PATH})
+else()
+ # Try to find an STM32CubeIDE installation to use for the toolchain.
+ file(GLOB TOOLCHAIN_DIRECTORIES
+ "C:/ST/STM32CubeIDE_*/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.*/tools/bin/"
+ "/opt/st/stm32cubeide_*/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.*/tools/bin/"
+ "/Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.*/tools/bin/"
+ )
+endif()
+list(LENGTH TOOLCHAIN_DIRECTORIES TOOLCHAIN_DIRECTORIES_COUNT)
+
+if(TOOLCHAIN_DIRECTORIES_COUNT LESS 1)
+ message(WARNING "Could not find an STM32CubeIDE installation. Falling back to tools available on PATH.")
+else()
+ list(GET TOOLCHAIN_DIRECTORIES 0 TOOLCHAIN_DIRECTORY)
+ if (TOOLCHAIN_DIRECTORIES_COUNT GREATER 1)
+ message(STATUS "Found multiple STM32CubeIDE installations. Using \"${TOOLCHAIN_DIRECTORY}\".")
+ endif()
+endif()
+
+if(WIN32)
+ set(TOOLCHAIN_SUFFIX ".exe")
+endif()
+
+set(CMAKE_SYSTEM_NAME Generic)
+set(CMAKE_SYSTEM_PROCESSOR arm)
+
+set(TOOLCHAIN_PREFIX "arm-none-eabi-")
+if(DEFINED TOOLCHAIN_DIRECTORY)
+ set(TOOLCHAIN_PREFIX "${TOOLCHAIN_DIRECTORY}/${TOOLCHAIN_PREFIX}")
+endif()
+set(FLAGS "-fdata-sections -ffunction-sections --specs=nano.specs -Wl,--gc-sections")
+set(ASM_FLAGS "-x assembler-with-cpp")
+set(CPP_FLAGS "-fno-rtti -fno-exceptions -fno-threadsafe-statics")
+
+set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc${TOOLCHAIN_SUFFIX} ${FLAGS})
+set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER} ${ASM_FLAGS})
+set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++${TOOLCHAIN_SUFFIX} ${FLAGS} ${CPP_FLAGS})
+set(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy${TOOLCHAIN_SUFFIX})
+set(CMAKE_SIZE ${TOOLCHAIN_PREFIX}size${TOOLCHAIN_SUFFIX})
+
+set(CMAKE_EXECUTABLE_SUFFIX_ASM ".elf")
+set(CMAKE_EXECUTABLE_SUFFIX_C ".elf")
+set(CMAKE_EXECUTABLE_SUFFIX_CXX ".elf")
+
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) \ No newline at end of file