This patch adds support for using device tree configuration files for configuring ARM platforms. In this patch, only the FLASH_SIZE, SRAM_SIZE, NUM_IRQS, and NUM_IRQ_PRIO_BITS were removed from the Kconfig options. A minimal set of options were removed so that it would be easier to work through the plumbing of the build system. It should be noted that the host system must provide access to the device tree compiler (DTC). The DTC can usually be installed on host systems through distribution packages or by downloading and compiling from https://git.kernel.org/pub/scm/utils/dtc/dtc.git This patch also requires the Python yaml package. This change implements parts of each of the following Jira: ZEP-1304 ZEP-1305 ZEP-1306 ZEP-1307 ZEP-1589 Change-Id: If1403801e19d9d85031401b55308935dadf8c9d8 Signed-off-by: Andy Gross <andy.gross@linaro.org>
121 lines
4.4 KiB
Makefile
121 lines
4.4 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
|
|
|
|
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
|
|
|
|
export LIB_INCLUDE_DIR CROSS_COMPILE TOOLCHAIN_LIBS QEMU_BIN_PATH QEMU TOOLCHAIN_CFLAGS OPENOCD OPENOCD_DEFAULT_PATH DTC
|
|
|
|
ifndef MAKEFILE_TOOLCHAIN_DO_PASS2
|
|
MAKEFILE_TOOLCHAIN_DO_PASS2=true
|
|
endif
|