Loading...
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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | # Path to base directory for installed Xtensa SDK. This should be # the parent directory of all the individual toolchain versions. ifndef XTENSA_SDK XTENSA_SDK := /opt/xtensa endif ifeq ($(wildcard $(XTENSA_SDK)),) $(error Please set XTENSA_SDK to correct location of SDK path, not found in $(XTENSA_SDK)) endif # List of paths to base directories for xtensa builds. Can have multiple paths # here; for example the base path for the installed xtensa SDK plus paths to # vendor-supplied builds. It's expected that each of these paths is a base # directory with children of the form <toolchain version>/<build name>/ where # the build name corresponds to CONFIG_SOC. By default, we append all the # builds included in the SDK XTENSA_BUILD_PATHS += $(XTENSA_SDK)/XtDevTools/install/builds # Legacy; make sure this is un-set. The compiler actually uses this value # if set to find command line tools, and we would rather it automatically # derive this. ifneq ($(XTENSA_TOOLS_PATH),) $(error Please leave XTENSA_TOOLS_PATH unset) endif ifeq (${CONFIG_XTENSA},y) # Every Zephyr Xtensa SOC configuration should have CONFIG_SOC match the name # of the build, and have CONFIG_TOOLCHAIN_VARIANT match the intended # toolchain release. TOOLCHAIN_VER = $(call unquote,$(CONFIG_TOOLCHAIN_VARIANT)) BUILD_NAME = $(call unquote,$(CONFIG_SOC)) # Attempt to find the canonical build directory using $(wildcard ..) to filter # out potential build directories that don't exist XCC_BUILD := $(strip $(foreach builddir,$(XTENSA_BUILD_PATHS),$(wildcard $(builddir)/$(TOOLCHAIN_VER)/$(BUILD_NAME)))) ifeq ($(XCC_BUILD),) $(error Unable to find build $(BUILD_NAME) for $(TOOLCHAIN_VER) in $(XTENSA_BUILD_PATHS), you may need to set XTENSA_BUILD_PATHS) endif ifneq ($(words $(XCC_BUILD)),1) $(error Multiple build matches for $(BUILD_NAME) on $(TOOLCHAIN_VER) in $(XCC_BUILD)) endif # Strip quotes from cross compiler anme prefix CROSS_COMPILE_xtensa = $(call unquote,$(CONFIG_CROSS_COMPILE)) ifeq (${CROSS_COMPILE_xtensa},) # Use default name prefix if no cross compiler name prefix is set CROSS_COMPILE_xtensa=xt- endif XCC_TOOLS := $(XTENSA_SDK)/XtDevTools/install/tools/$(TOOLCHAIN_VER)/XtensaTools CROSS_COMPILE = ${XCC_TOOLS}/bin/$(CROSS_COMPILE_$(ARCH)) ifeq ($(KBUILD_VERBOSE),1) $(info Using Xtensa tools located in $(XCC_TOOLS)) $(info Using Xtensa core build in $(XCC_BUILD)) endif XCC_FLAGS := --xtensa-core=$(CONFIG_SOC) ifeq ($(USE_CCACHE),1) CC = $(CCACHE) ${CROSS_COMPILE}xcc $(XCC_FLAGS) CXX = $(CCACHE) ${CROSS_COMPILE}xc++ $(XCC_FLAGS) else CC = ${CROSS_COMPILE}xcc $(XCC_FLAGS) CXX = ${CROSS_COMPILE}xc++ $(XCC_FLAGS) endif AS = ${CROSS_COMPILE}as $(XCC_FLAGS) LD = ${CROSS_COMPILE}ld $(XCC_FLAGS) CROSS_COMPILE_TARGET = ${CROSS_COMPILE_TARGET_${ARCH}} # Can either pass --xtensa-system to every single tool in the toolchain (and # force redefinition of OBJCOPY, READELF, etc) or just export to environment # (simpler) XTENSA_SYSTEM := $(XCC_BUILD)/config XTSC_INC = $(realpath $(call unquote,${CONFIG_XTENSA_XTSC_INC})) ifeq (${XTSC_INC},) XTSC_INC = $(realpath ../$(call unquote,${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${XCC_BUILD}/xtensa-elf/lib/xcc \ -L${XCC_BUILD}/xtensa-elf/lib \ -L${XCC_BUILD}/xtensa-elf/arch/lib KBUILD_CPPFLAGS += -I$(XCC_TOOLS)/lib/xcc/include \ -I$(XCC_TOOLS)/xtensa-elf/include \ -I${XCC_BUILD}/xtensa-elf/arch/include \ -I${XCC_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 += --turbo --cc_none export CROSS_COMPILE XTENSA_SYSTEM LIB_INCLUDE_DIR XCC_TOOLS endif # CONFIG_XTENSA |