diff options
Diffstat (limited to 'cmake/arm-gcc-toolchain.cmake')
| -rw-r--r-- | cmake/arm-gcc-toolchain.cmake | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/cmake/arm-gcc-toolchain.cmake b/cmake/arm-gcc-toolchain.cmake new file mode 100644 index 0000000..d7dc340 --- /dev/null +++ b/cmake/arm-gcc-toolchain.cmake @@ -0,0 +1,35 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR ARM) + +set(TOOLCHAIN_PREFIX "arm-none-eabi-") + +set(SPECS "-specs=nosys.specs -specs=nano.specs") + +# Without that flag CMake is not able to pass test compilation check +if (${CMAKE_VERSION} VERSION_EQUAL "3.6.0" OR ${CMAKE_VERSION} VERSION_GREATER "3.6") + set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) +endif () + +set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc CACHE STRING "") +set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER} CACHE STRING "") +set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++ CACHE STRING "") + +# Default C compiler flags +set(CMAKE_C_FLAGS_DEBUG_INIT "-g3 -Og -Wall -DDEBUG ${SPECS}") +set(CMAKE_C_FLAGS_RELEASE_INIT "-O3 -Wall ${SPECS}") +set(CMAKE_C_FLAGS_MINSIZEREL_INIT "-Os -Wall ${SPECS}") +set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-O2 -g -Wall ${SPECS}") +# Default C++ compiler flags +set(CMAKE_CXX_FLAGS_DEBUG_INIT "-g3 -Og -Wall -DDEBUG ${SPECS}") +set(CMAKE_CXX_FLAGS_RELEASE_INIT "-O3 -Wall ${SPECS}") +set(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "-Os -Wall ${SPECS}") +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-O2 -g -Wall ${SPECS}") + +find_program(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy DOC "objcopy tool") +find_program(CMAKE_SIZE_UTIL ${TOOLCHAIN_PREFIX}size DOC "size tool") + +if (NOT TARGET toolchain) + add_library(toolchain INTERFACE) + target_compile_options(toolchain INTERFACE "-fno-exceptions") + target_link_options(toolchain INTERFACE "-Wl,--gc-sections" "-Wl,--print-memory-usage") +endif () |
