mirror of https://github.com/ARMmbed/mbed-os.git
131 lines
3.8 KiB
CMake
131 lines
3.8 KiB
CMake
# Copyright (c) 2020 ARM Limited. All rights reserved.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
set(CMAKE_ASM_COMPILER "arm-none-eabi-gcc")
|
|
set(CMAKE_C_COMPILER "arm-none-eabi-gcc")
|
|
set(CMAKE_CXX_COMPILER "arm-none-eabi-g++")
|
|
set(GCC_ELF2BIN "arm-none-eabi-objcopy")
|
|
set_property(GLOBAL PROPERTY ELF2BIN ${GCC_ELF2BIN})
|
|
|
|
|
|
# Sets toolchain options
|
|
function(mbed_set_toolchain_options target)
|
|
list(APPEND link_options
|
|
"-Wl,--start-group"
|
|
"-lstdc++"
|
|
"-lsupc++"
|
|
"-lm"
|
|
"-lc"
|
|
"-lgcc"
|
|
"-lnosys"
|
|
"-Wl,--end-group"
|
|
"-specs=nosys.specs"
|
|
"-T" "${CMAKE_BINARY_DIR}/${APP_TARGET}.link_script.ld"
|
|
"-Wl,-Map=${CMAKE_BINARY_DIR}/${APP_TARGET}.map"
|
|
"-Wl,--cref"
|
|
)
|
|
|
|
# Add linking time preprocessor macro for TFM targets
|
|
if("TFM" IN_LIST MBED_TARGET_LABELS)
|
|
list(APPEND link_options
|
|
"-DDOMAIN_NS=1"
|
|
)
|
|
endif()
|
|
|
|
list(APPEND common_options
|
|
"-Wall"
|
|
"-Wextra"
|
|
"-Wno-unused-parameter"
|
|
"-Wno-missing-field-initializers"
|
|
"-fmessage-length=0"
|
|
"-fno-exceptions"
|
|
"-ffunction-sections"
|
|
"-fdata-sections"
|
|
"-funsigned-char"
|
|
"-MMD"
|
|
"-fomit-frame-pointer"
|
|
"-g3"
|
|
)
|
|
|
|
target_compile_options(${target}
|
|
INTERFACE
|
|
${common_options}
|
|
)
|
|
|
|
target_compile_definitions(${target}
|
|
INTERFACE
|
|
TOOLCHAIN_GCC_ARM
|
|
TOOLCHAIN_GCC
|
|
)
|
|
|
|
|
|
target_link_options(${target}
|
|
INTERFACE
|
|
${common_options}
|
|
${link_options}
|
|
)
|
|
endfunction()
|
|
|
|
# Generate a file containing compile definitions
|
|
function(mbed_generate_gcc_options_for_linker target definitions_file)
|
|
set(_compile_definitions
|
|
"$<TARGET_PROPERTY:${target},COMPILE_DEFINITIONS>"
|
|
)
|
|
|
|
# Remove macro definitions that contain spaces as the lack of escape sequences and quotation marks
|
|
# in the macro when retrieved using generator expressions causes linker errors.
|
|
# This includes string macros, array macros, and macros with operations.
|
|
# TODO CMake: Add escape sequences and quotation marks where necessary instead of removing these macros.
|
|
set(_compile_definitions
|
|
"$<FILTER:${_compile_definitions},EXCLUDE, +>"
|
|
)
|
|
|
|
# Append -D to all macros as we pass these as response file to cxx compiler
|
|
set(_compile_definitions
|
|
"$<$<BOOL:${_compile_definitions}>:-D$<JOIN:${_compile_definitions}, -D>>"
|
|
)
|
|
file(GENERATE OUTPUT "${CMAKE_BINARY_DIR}/compile_time_defs.txt" CONTENT "${_compile_definitions}\n")
|
|
set(${definitions_file} @${CMAKE_BINARY_DIR}/compile_time_defs.txt PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
# Configure the toolchain to select the selected C library
|
|
function(mbed_set_c_lib target lib_type)
|
|
if (${lib_type} STREQUAL "small")
|
|
target_compile_definitions(${target}
|
|
INTERFACE
|
|
MBED_RTOS_SINGLE_THREAD
|
|
__NEWLIB_NANO
|
|
)
|
|
|
|
target_link_options(${target}
|
|
INTERFACE
|
|
"--specs=nano.specs"
|
|
)
|
|
endif()
|
|
endfunction()
|
|
|
|
# Configure the toolchain to select the selected printf library
|
|
function(mbed_set_printf_lib target lib_type)
|
|
if (${lib_type} STREQUAL "minimal-printf")
|
|
target_compile_definitions(${target}
|
|
INTERFACE
|
|
MBED_MINIMAL_PRINTF
|
|
)
|
|
|
|
list(APPEND link_options
|
|
"-Wl,--wrap,printf"
|
|
"-Wl,--wrap,sprintf"
|
|
"-Wl,--wrap,snprintf"
|
|
"-Wl,--wrap,vprintf"
|
|
"-Wl,--wrap,vsprintf"
|
|
"-Wl,--wrap,vsnprintf"
|
|
"-Wl,--wrap,fprintf"
|
|
"-Wl,--wrap,vfprintf"
|
|
)
|
|
target_link_options(${target}
|
|
INTERFACE
|
|
${link_options}
|
|
)
|
|
endif()
|
|
endfunction()
|