mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-08-04 13:15:53 +00:00
This is intended as a temporary fix for ZEP-1882. Investigation for this bug has shown that the current SDK 0.9 compiler for ARC generates incorrect code under -Os optimization level. Kuo-Lang Tseng found out that SDK 0.8.2 does not have this issue, and that lowering optimization level to -O2 fixes the issue with SDK 0.9. Juro Bystricky is working on an updated SDK with ARC GCC 6.3.0, but there are still problems with it, so he also suggested to use -O2 in the meantime. Instead of blindly setting -O2 for all toolchains and architectures, let Makefile.toolchain.zephyr make the decision for ARC and 0.9 only. Tested with hello_world, CONFIG_ADC=y and BOARD=arduino_101_sss. Jira: ZEP-1882 Change-Id: Ifde2e3950c9d93eed8982149805acfda9d13a94f Signed-off-by: Patrice Buriez <patrice.buriez@intel.com>
133 lines
4.7 KiB
Makefile
133 lines
4.7 KiB
Makefile
########################################################################
|
|
#
|
|
# Pass1: Determine CROSS_COMPILE only.
|
|
# We need CROSS_COMPILE in order to validate various KBUILD_CFLAGS
|
|
# GCC CROSS_COMILE is needed in order to validate compiler options
|
|
# via constructs such as:
|
|
# KBUILD_CFLAGS += $(call cc-option,-option,)
|
|
#
|
|
# Pass2: Determine LIB_INCLUDE_DIR and TOOLCHAIN_CFLAGS.
|
|
# Knowing KBUILD_CFLAGS, we can query GCC compiler for the location
|
|
# of the libraries corresponding to the KBUILD_CFLAGS.
|
|
#
|
|
#######################################################################
|
|
|
|
REQUIRED_SDK_VER=0.8.2
|
|
|
|
ifndef ZEPHYR_SDK_INSTALL_DIR
|
|
|
|
$(error ZEPHYR_SDK_INSTALL_DIR is not set)
|
|
else
|
|
SDK_VERSION = $(shell cat ${ZEPHYR_SDK_INSTALL_DIR}/sdk_version)
|
|
SDK_CHECK = $(shell ${ZEPHYR_BASE}/scripts/vercomp $(REQUIRED_SDK_VER) $(SDK_VERSION) || echo $$?)
|
|
|
|
ifeq ($(SDK_CHECK),1)
|
|
$(error (The SDK version you are using is old, please update your SDK. You need at least SDK version $(REQUIRED_SDK_VER)))
|
|
endif
|
|
endif
|
|
|
|
TOOLCHAIN_VENDOR := zephyr
|
|
TOOLCHAIN_ARCH := x86_64
|
|
|
|
# TODO remove once we retire 0.8.2 in favor of 0.9
|
|
# See also conditional below near iamcu (pass1)
|
|
ifeq ($(SDK_VERSION),0.8.2)
|
|
TOOLCHAIN_VENDOR := poky
|
|
TOOLCHAIN_ARCH := i686
|
|
endif
|
|
|
|
# TODO remove once we have a replacement for 0.9 that fixes ZEP-1882
|
|
# See https://jira.zephyrproject.org/browse/ZEP-1882
|
|
ifeq ($(SDK_VERSION),0.9)
|
|
ifeq ($(ARCH),arc)
|
|
ifneq ($(CONFIG_DEBUG),y)
|
|
KBUILD_CFLAGS_OPTIMIZE := -O2
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(HOST_OS),MINGW)
|
|
TOOLCHAIN_HOME = ${ZEPHYR_SDK_INSTALL_DIR}/sysroots/i686-pokysdk-mingw32
|
|
else
|
|
TOOLCHAIN_HOME = ${ZEPHYR_SDK_INSTALL_DIR}/sysroots/$(TOOLCHAIN_ARCH)-pokysdk-linux
|
|
endif
|
|
|
|
ifndef MAKEFILE_TOOLCHAIN_DO_PASS2
|
|
|
|
# arm (pass1)
|
|
CROSS_COMPILE_TARGET_arm = arm-$(TOOLCHAIN_VENDOR)-eabi
|
|
SYSROOT_TARGET_arm = armv5-$(TOOLCHAIN_VENDOR)-eabi
|
|
CROSS_COMPILE_arm=$(TOOLCHAIN_HOME)/usr/bin/$(CROSS_COMPILE_TARGET_arm)/$(CROSS_COMPILE_TARGET_arm)-
|
|
|
|
# arc (pass1)
|
|
CROSS_COMPILE_TARGET_arc = arc-$(TOOLCHAIN_VENDOR)-elf
|
|
SYSROOT_TARGET_arc = arc-$(TOOLCHAIN_VENDOR)-elf
|
|
CROSS_COMPILE_arc=$(TOOLCHAIN_HOME)/usr/bin/$(CROSS_COMPILE_TARGET_arc)/$(CROSS_COMPILE_TARGET_arc)-
|
|
|
|
# iamcu (pass1)
|
|
CROSS_COMPILE_TARGET_iamcu = i586-$(TOOLCHAIN_VENDOR)-elfiamcu
|
|
SYSROOT_TARGET_iamcu = iamcu-$(TOOLCHAIN_VENDOR)-elfiamcu
|
|
ifeq ($(SDK_VERSION),0.8.2)
|
|
CROSS_COMPILE_iamcu=$(TOOLCHAIN_HOME)/usr/bin/iamcu-poky-elfiamcu/$(CROSS_COMPILE_TARGET_iamcu)-
|
|
else
|
|
CROSS_COMPILE_iamcu=$(TOOLCHAIN_HOME)/usr/bin/$(CROSS_COMPILE_TARGET_iamcu)/$(CROSS_COMPILE_TARGET_iamcu)-
|
|
endif
|
|
|
|
# x86 (pass1)
|
|
CROSS_COMPILE_TARGET_x86 = i586-$(TOOLCHAIN_VENDOR)-elf
|
|
SYSROOT_TARGET_x86 = i586-$(TOOLCHAIN_VENDOR)-elf
|
|
CROSS_COMPILE_x86=$(TOOLCHAIN_HOME)/usr/bin/$(CROSS_COMPILE_TARGET_x86)/$(CROSS_COMPILE_TARGET_x86)-
|
|
|
|
# nios2 (pass1)
|
|
CROSS_COMPILE_TARGET_nios2 = nios2-$(TOOLCHAIN_VENDOR)-elf
|
|
SYSROOT_TARGET_nios2 = nios2-$(TOOLCHAIN_VENDOR)-elf
|
|
CROSS_COMPILE_nios2=$(TOOLCHAIN_HOME)/usr/bin/$(CROSS_COMPILE_TARGET_nios2)/$(CROSS_COMPILE_TARGET_nios2)-
|
|
|
|
# xtensa (pass1)
|
|
CROSS_COMPILE_TARGET_xtensa = xtensa-$(TOOLCHAIN_VENDOR)-elf
|
|
SYSROOT_TARGET_xtensa = xtensa-$(TOOLCHAIN_VENDOR)-elf
|
|
CROSS_COMPILE_xtensa=$(TOOLCHAIN_HOME)/usr/bin/$(CROSS_COMPILE_TARGET_xtensa)/$(CROSS_COMPILE_TARGET_xtensa)-
|
|
|
|
# riscv32 (pass1)
|
|
CROSS_COMPILE_TARGET_riscv32 = riscv32-$(TOOLCHAIN_VENDOR)-elf
|
|
SYSROOT_TARGET_riscv32 = riscv32-$(TOOLCHAIN_VENDOR)-elf
|
|
CROSS_COMPILE_riscv32=$(TOOLCHAIN_HOME)/usr/bin/$(CROSS_COMPILE_TARGET_riscv32)/$(CROSS_COMPILE_TARGET_riscv32)-
|
|
|
|
else
|
|
|
|
# Test CONFIG_TOOLCHAIN_VARIANT value with surrounding quotes removed (if any)
|
|
ifneq ($(CONFIG_TOOLCHAIN_VARIANT:"%"=%),)
|
|
SYSROOT := ${ZEPHYR_SDK_INSTALL_DIR}/sysroots/${SYSROOT_TARGET_$(subst $\",,${CONFIG_TOOLCHAIN_VARIANT})}
|
|
else
|
|
SYSROOT := ${ZEPHYR_SDK_INSTALL_DIR}/sysroots/${SYSROOT_TARGET_${ARCH}}
|
|
endif
|
|
|
|
LIBGCC_DIR = $(shell dirname `$(CROSS_COMPILE)gcc --sysroot=$(SYSROOT) $(KBUILD_CFLAGS) -print-libgcc-file-name`)
|
|
NEWLIB_DIR = $(shell $(CROSS_COMPILE)gcc --sysroot=$(SYSROOT) $(KBUILD_CFLAGS) -print-multi-directory)
|
|
TOOLCHAIN_CFLAGS = -I $(SYSROOT)/usr/include
|
|
LIB_INCLUDE_DIR += -L $(LIBGCC_DIR) -L $(SYSROOT)/usr/lib/$(NEWLIB_DIR)
|
|
endif
|
|
|
|
ifneq ($(CONFIG_TOOLCHAIN_VARIANT:"%"=%),)
|
|
CROSS_COMPILE = $(CROSS_COMPILE_$(subst $\",,$(CONFIG_TOOLCHAIN_VARIANT)))
|
|
else
|
|
CROSS_COMPILE = $(CROSS_COMPILE_$(ARCH))
|
|
endif
|
|
|
|
QEMU_BIN_PATH ?= $(TOOLCHAIN_HOME)/usr/bin
|
|
QEMU_BIOS=$(TOOLCHAIN_HOME)/usr/share/qemu
|
|
|
|
TOOLCHAIN_LIBS = gcc
|
|
|
|
DTC = ${TOOLCHAIN_HOME}/usr/bin/dtc
|
|
OPENOCD ?= ${TOOLCHAIN_HOME}/usr/bin/openocd
|
|
OPENOCD_DEFAULT_PATH ?= ${TOOLCHAIN_HOME}/usr/share/openocd/scripts
|
|
|
|
BOSSAC ?= ${TOOLCHAIN_HOME}/usr/bin/bossac
|
|
|
|
export LIB_INCLUDE_DIR CROSS_COMPILE TOOLCHAIN_LIBS QEMU_BIN_PATH QEMU TOOLCHAIN_CFLAGS OPENOCD OPENOCD_DEFAULT_PATH DTC BOSSAC
|
|
|
|
ifndef MAKEFILE_TOOLCHAIN_DO_PASS2
|
|
MAKEFILE_TOOLCHAIN_DO_PASS2=true
|
|
endif
|