forked from thesofproject/sof
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathxtensa-toolchain.cmake
More file actions
96 lines (79 loc) · 2.97 KB
/
xtensa-toolchain.cmake
File metadata and controls
96 lines (79 loc) · 2.97 KB
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# 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)
set(CMAKE_C_COMPILER ${CROSS_COMPILE}xcc)
else()
set(CMAKE_C_COMPILER ${CROSS_COMPILE}gcc)
endif()
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()