summaryrefslogtreecommitdiffstats
path: root/cmake/arm-gcc-toolchain.cmake
blob: d7dc3408ea9787bd16713452a887613998315f5e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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 ()