summaryrefslogtreecommitdiff
path: root/scripts/Makefile.toolchain.xcc
blob: 7846f4add34351a8f257e99189499559b6c2acbc (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
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
XTENSA_ISS_CYCLES_LIMIT := 1000000000 # Simulate 10^9 cycles.

ifndef XTENSA_TOOLS_PATH
    $(error Please set XTENSA_TOOLS_PATH first)
endif

ifndef XTENSA_BUILDS_PATH
    $(error Please set XTENSA_BUILDS_PATH first)
endif

XTENSA_BUILD_DIR := $(patsubst "%",%,${XTENSA_BUILD_DIR})

ifeq (${XTENSA_BUILD_DIR},)
    XTENSA_BUILD=$(shell echo ${XTENSA_BUILDS_PATH}/${CONFIG_SOC})
else
    ifeq ($(patsubst /%,/,${XTENSA_BUILD_DIR}),/)
        XTENSA_BUILD=${XTENSA_BUILD_DIR}
    else
        XTENSA_BUILD=$(shell echo ${CONFIG_XTENSA_BUILDS_PATH}/${XTENSA_BUILD_DIR})
    endif
endif

# Strip quotes from cross compiler anme prefix
CROSS_COMPILE_xtensa=$(patsubst "%",%,${CONFIG_CROSS_COMPILE})

ifeq (${CROSS_COMPILE_xtensa},)
    # Use default name prefix if no cross compiler name prefix is set
    CROSS_COMPILE_xtensa=xt-
endif

ifeq (${CONFIG_XTENSA},y)
CROSS_COMPILE = ${XTENSA_TOOLS_PATH}/bin/$(CROSS_COMPILE_$(ARCH))

ifeq ($(USE_CCACHE),1)
    CC = $(CCACHE) ${CROSS_COMPILE}xcc --xtensa-core=$(CONFIG_SOC)
    CXX = $(CCACHE) ${CROSS_COMPILE}xc++ --xtensa-core=$(CONFIG_SOC)
else
    CC = ${CROSS_COMPILE}xcc --xtensa-core=$(CONFIG_SOC)
    CXX = ${CROSS_COMPILE}xc++ --xtensa-core=$(CONFIG_SOC)
endif
AS = ${CROSS_COMPILE}as --xtensa-core=$(CONFIG_SOC)
LD = ${CROSS_COMPILE}ld --xtensa-core=$(CONFIG_SOC)
CROSS_COMPILE_TARGET = ${CROSS_COMPILE_TARGET_${ARCH}}

XTENSA_SYSTEM=$(XTENSA_BUILD)/config

XTSC_INC=$(realpath $(patsubst "%",%,${CONFIG_XTENSA_XTSC_INC}))
ifeq (${XTSC_INC},)
XTSC_INC=$(realpath ../$(patsubst "%",%,${CONFIG_XTENSA_XTSC_INC}))
endif
XTSC_WORK_DIR=$(dir ${XTSC_INC})
XTSC_INC_FILE=$(notdir ${XTSC_INC})

# Include XCC standard libraries so that users used to Xplorer IDE can port
# their code easily
TOOLCHAIN_LIBS += gcc hal
LIB_INCLUDE_DIR += -L${XTENSA_BUILD}/xtensa-elf/lib/xcc \
                   -L${XTENSA_BUILD}/xtensa-elf/lib \
                   -L${XTENSA_BUILD}/xtensa-elf/arch/lib

KBUILD_CPPFLAGS += -I$(XTENSA_TOOLS_PATH)/lib/xcc/include \
                   -I$(XTENSA_TOOLS_PATH)/xtensa-elf/include \
                   -I${XTENSA_BUILD}/xtensa-elf/arch/include \
                   -I${XTENSA_BUILD}/xtensa-elf/include \
                   -D'__builtin_unreachable()=while(1);'

# xt-xcc does not support -Og, replace with -O0
KBUILD_CFLAGS_OPTIMIZE:=$(patsubst -Og,-O0,${KBUILD_CFLAGS_OPTIMIZE})
KBUILD_CXXFLAGS:=$(filter-out \
			-std=c++11 \
			-fno-reorder-functions \
			-fno-asynchronous-unwind-tables \
			-fno-defer-pop \
			-Wno-unused-but-set-variable \
			-fno-omit-frame-pointer \
			,${KBUILD_CXXFLAGS})

# Support for Xtensa simulator from Cadence Design Systems, Inc.
XTRUN=${CROSS_COMPILE}run
XTRUN_FLAGS += --cycle_limit=${XTENSA_ISS_CYCLES_LIMIT}

export CROSS_COMPILE XTENSA_SYSTEM LIB_INCLUDE_DIR
endif # CONFIG_XTENSA

prepare2:
	${Q}test -d ${XTENSA_BUILD} || ( \
		echo '*** Error: Invalid Xtensa core configuration path \
			"${XTENSA_BUILD}"' && \
		exit 1 \
	)