Build needed cross toolchain with buildroot for non-x86_64 hosts
The needed precompiled toolchains provided by Arm are only available for
x86_64 hosts. For all other host architectures we build it with
Buildroot itself.
Reviewed-by: Jerome Forissier <jerome@forissier.org>
Tested-by: Jerome Forissier <jerome@forissier.org> (QEMUv8 64/64, host uname -m: aarch64)
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
diff --git a/toolchain.mk b/toolchain.mk
index 1eb7a04..ecf5068 100644
--- a/toolchain.mk
+++ b/toolchain.mk
@@ -4,7 +4,9 @@
SHELL = /bin/bash
ROOT ?= $(CURDIR)/..
TOOLCHAIN_ROOT ?= $(ROOT)/toolchains
+UNAME_M := $(shell uname -m)
+ifeq ($(UNAME_M),x86_64)
AARCH32_PATH ?= $(TOOLCHAIN_ROOT)/aarch32
AARCH32_CROSS_COMPILE ?= $(AARCH32_PATH)/bin/arm-linux-gnueabihf-
AARCH32_GCC_VERSION ?= gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf
@@ -55,3 +57,35 @@
.PHONY: clang-toolchains
clang-toolchains:
$(call dl-clang,$(CLANG_VER),$(CLANG_PATH))
+
+else # $(UNAME_M) != x86_64
+AARCH32_PATH := $(TOOLCHAIN_ROOT)/aarch32
+AARCH32_CROSS_COMPILE := $(AARCH32_PATH)/bin/arm-linux-
+AARCH64_PATH := $(TOOLCHAIN_ROOT)/aarch64
+AARCH64_CROSS_COMPILE := $(AARCH64_PATH)/bin/aarch64-linux-
+
+.PHONY: toolchains
+toolchains: $(AARCH64_PATH)/.done $(AARCH32_PATH)/.done
+
+define build_toolchain
+ @echo Building $1 toolchain
+ @mkdir -p ../out-$1-sdk $2
+ @(cd .. && python build/br-ext/scripts/make_def_config.py \
+ --br buildroot --out out-$1-sdk --br-ext build/br-ext \
+ --top-dir "$(ROOT)" \
+ --br-defconfig build/br-ext/configs/sdk-$1 \
+ --br-defconfig build/br-ext/configs/sdk-common \
+ --make-cmd $(MAKE))
+ @$(MAKE) -C ../out-$1-sdk clean
+ @$(MAKE) -C ../out-$1-sdk sdk
+ @tar xf ../out-$1-sdk/images/$3-buildroot-linux-$4_sdk-buildroot.tar.gz \
+ -C $2 --strip-components=1
+ @touch $2/.done
+endef
+
+$(AARCH64_PATH)/.done:
+ $(call build_toolchain,aarch64,$(AARCH64_PATH),aarch64,gnu)
+
+$(AARCH32_PATH)/.done:
+ $(call build_toolchain,aarch32,$(AARCH32_PATH),arm,gnueabihf)
+endif