mirror of https://github.com/thesofproject/sof.git
100 lines
3.0 KiB
CMake
100 lines
3.0 KiB
CMake
# SPDX-License-Identifier: BSD-3-Clause
|
|
if(TOOLCHAIN)
|
|
set(CROSS_COMPILE "${TOOLCHAIN}-")
|
|
else()
|
|
message(FATAL_ERROR
|
|
" Please specify toolchain to use.\n"
|
|
" Examples:\n"
|
|
" 1) cmake -DTOOLCHAIN=xt ...\n"
|
|
" 2) cmake -DTOOLCHAIN=xtensa-cnl-elf ...\n"
|
|
)
|
|
endif()
|
|
|
|
if(BUILD_CLANG_SCAN)
|
|
# scan-build has to set its own compiler,
|
|
# so we need to unset current one
|
|
message(STATUS "Reset C Compiler for scan-build")
|
|
set(CMAKE_C_COMPILER)
|
|
|
|
# scan-build proxies only compiler, other tools are used directly
|
|
find_program(CMAKE_AR NAMES "${CROSS_COMPILE}ar" PATHS ENV PATH NO_DEFAULT_PATH)
|
|
find_program(CMAKE_RANLIB NAMES "${CROSS_COMPILE}ranlib" PATHS ENV PATH NO_DEFAULT_PATH)
|
|
|
|
set(XCC_TOOLS_VERSION "CLANG-SCAN-BUILD")
|
|
|
|
if(TOOLCHAIN STREQUAL "xt")
|
|
set(XCC 1)
|
|
endif()
|
|
|
|
return()
|
|
endif()
|
|
|
|
message(STATUS "Preparing Xtensa toolchain")
|
|
|
|
set(CMAKE_USER_MAKE_RULES_OVERRIDE "${CMAKE_CURRENT_LIST_DIR}/xtensa-platform.cmake")
|
|
|
|
set(CMAKE_SYSTEM_NAME Generic)
|
|
set(CMAKE_SYSTEM_VERSION 1)
|
|
|
|
set(CMAKE_ASM_COMPILER_FORCED 1)
|
|
set(CMAKE_C_COMPILER_FORCED 1)
|
|
|
|
set(CMAKE_ASM_COMPILER_ID GNU)
|
|
set(CMAKE_C_COMPILER_ID GNU)
|
|
|
|
# in case if *_FORCED variables are ignored,
|
|
# try to just compile lib instead of executable
|
|
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
|
|
|
# xt toolchain only partially follows gcc convention
|
|
if(TOOLCHAIN STREQUAL "xt")
|
|
set(XCC 1)
|
|
endif()
|
|
|
|
if(NOT DEFINED SOF_CC_BASE)
|
|
set(SOF_CC_BASE "gcc")
|
|
endif()
|
|
# e.g.: "xt-" + "xcc"
|
|
set(CMAKE_C_COMPILER ${CROSS_COMPILE}${SOF_CC_BASE})
|
|
|
|
find_program(CMAKE_LD NAMES "${CROSS_COMPILE}ld" PATHS ENV PATH NO_DEFAULT_PATH)
|
|
find_program(CMAKE_AR NAMES "${CROSS_COMPILE}ar" PATHS ENV PATH NO_DEFAULT_PATH)
|
|
find_program(CMAKE_RANLIB NAMES "${CROSS_COMPILE}ranlib" PATHS ENV PATH NO_DEFAULT_PATH)
|
|
find_program(CMAKE_OBJCOPY NAMES "${CROSS_COMPILE}objcopy" PATHS ENV PATH NO_DEFAULT_PATH)
|
|
find_program(CMAKE_OBJDUMP NAMES "${CROSS_COMPILE}objdump" PATHS ENV PATH NO_DEFAULT_PATH)
|
|
|
|
set(CMAKE_FIND_ROOT_PATH ".")
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
|
|
|
if(XCC)
|
|
# get compiler description
|
|
execute_process(
|
|
COMMAND ${CMAKE_C_COMPILER} --show-config=config
|
|
OUTPUT_VARIABLE cc_config_output
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
RESULT_VARIABLE show_config_res
|
|
)
|
|
if(NOT ${show_config_res} EQUAL 0)
|
|
message(WARNING "${CMAKE_C_COMPILER} --show-config "
|
|
"failed with: ${show_config_res}")
|
|
endif()
|
|
|
|
string(REGEX MATCH "[a-zA-Z]+-[0-9]+.[0-9]+-[a-zA-Z]*" XCC_TOOLS_VERSION "${cc_config_output}")
|
|
if(NOT XCC_TOOLS_VERSION)
|
|
message(WARNING
|
|
"Couldn't get ${CMAKE_C_COMPILER} description,"
|
|
" --show-config printed: '${cc_config_output}'")
|
|
set(XCC_TOOLS_VERSION "UNKNOWN-${CMAKE_SYSTEM_NAME}")
|
|
endif()
|
|
else()
|
|
string(REGEX MATCH "([^\/\\]+)$" XCC_TOOLS_VERSION "${TOOLCHAIN}")
|
|
endif()
|
|
|
|
string(LENGTH "${XCC_TOOLS_VERSION}" XCC_TOOLS_VERSION_STR_LEN)
|
|
math(EXPR XCC_TOOLS_VERSION_PADDING "(${XCC_TOOLS_VERSION_STR_LEN} + 1) % 4")
|
|
if(XCC_TOOLS_VERSION_PADDING EQUAL 0)
|
|
set(XCC_TOOLS_VERSION "<${XCC_TOOLS_VERSION}>")
|
|
endif()
|