| # find the compilers for C, CPP, assembly |
| find_program(CMAKE_C_COMPILER ${CROSS_COMPILE}armclang PATHS ${TOOLCHAIN_HOME} NO_DEFAULT_PATH) |
| find_program(CMAKE_CXX_COMPILER ${CROSS_COMPILE}armclang PATHS ${TOOLCHAIN_HOME} NO_DEFAULT_PATH) |
| find_program(CMAKE_ASM_COMPILER ${CROSS_COMPILE}armclang PATHS ${TOOLCHAIN_HOME} NO_DEFAULT_PATH) |
| |
| # The CMAKE_REQUIRED_FLAGS variable is used by check_c_compiler_flag() |
| # (and other commands which end up calling check_c_source_compiles()) |
| # to add additional compiler flags used during checking. These flags |
| # are unused during "real" builds of Zephyr source files linked into |
| # the final executable. |
| # |
| include(${ZEPHYR_BASE}/cmake/gcc-m-cpu.cmake) |
| include(${ZEPHYR_BASE}/cmake/gcc-m-fpu.cmake) |
| |
| # Strip out any trailing +<FOO> from GCC_M_CPU for cases when GCC_M_CPU is |
| # 'cortex-m33+nodsp' we need that to be 'cortex-m33' for CMAKE_SYSTEM_PROCESSOR |
| string(REGEX REPLACE "\\+.*" "" CMAKE_SYSTEM_PROCESSOR ${GCC_M_CPU}) |
| |
| list(APPEND TOOLCHAIN_C_FLAGS |
| -fshort-enums |
| ) |
| |
| if(CONFIG_ARM64) |
| list(APPEND TOOLCHAIN_C_FLAGS -mcpu=${GCC_M_CPU}) |
| |
| list(APPEND TOOLCHAIN_C_FLAGS -mabi=lp64) |
| list(APPEND TOOLCHAIN_LD_FLAGS -mabi=lp64) |
| else() |
| list(APPEND TOOLCHAIN_C_FLAGS -mcpu=${GCC_M_CPU}) |
| |
| if(CONFIG_COMPILER_ISA_THUMB2) |
| list(APPEND TOOLCHAIN_C_FLAGS -mthumb) |
| endif() |
| |
| list(APPEND TOOLCHAIN_C_FLAGS -mabi=aapcs) |
| |
| if(CONFIG_FPU) |
| if(NOT "${GCC_M_FPU}" STREQUAL "auto") |
| list(APPEND TOOLCHAIN_C_FLAGS -mfpu=${GCC_M_FPU}) |
| endif() |
| if (CONFIG_FP_SOFTABI) |
| list(APPEND TOOLCHAIN_C_FLAGS -mfloat-abi=softfp) |
| elseif(CONFIG_FP_HARDABI) |
| list(APPEND TOOLCHAIN_C_FLAGS -mfloat-abi=hard) |
| endif() |
| else() |
| list(APPEND TOOLCHAIN_C_FLAGS -mfloat-abi=soft) |
| endif() |
| endif() |
| |
| foreach(file_name include/stddef.h) |
| execute_process( |
| COMMAND ${CMAKE_C_COMPILER} --print-file-name=${file_name} |
| OUTPUT_VARIABLE _OUTPUT |
| ) |
| get_filename_component(_OUTPUT "${_OUTPUT}" DIRECTORY) |
| string(REGEX REPLACE "\n" "" _OUTPUT ${_OUTPUT}) |
| |
| list(APPEND NOSTDINC ${_OUTPUT}) |
| endforeach() |
| |
| foreach(isystem_include_dir ${NOSTDINC}) |
| list(APPEND isystem_include_flags -isystem ${isystem_include_dir}) |
| endforeach() |
| |
| set(CMAKE_REQUIRED_FLAGS ${isystem_include_flags}) |
| string(REPLACE ";" " " CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") |
| |
| if(CONFIG_ARMCLANG_STD_LIBC) |
| # Zephyr requires AEABI portability to ensure correct functioning of the C |
| # library, for example error numbers, errno.h. |
| list(APPEND TOOLCHAIN_C_FLAGS -D_AEABI_PORTABILITY_LEVEL=1) |
| endif() |