Joakim Bech | 427dd63 | 2015-05-04 15:52:33 +0200 | [diff] [blame] | 1 | ################################################################################ |
| 2 | # Toolchains |
| 3 | ################################################################################ |
Yunli Liu | 904f148 | 2021-01-22 11:08:08 +0800 | [diff] [blame] | 4 | SHELL = /bin/bash |
Joakim Bech | c960663 | 2017-01-27 11:50:49 +0100 | [diff] [blame] | 5 | ROOT ?= $(CURDIR)/.. |
Joakim Bech | 427dd63 | 2015-05-04 15:52:33 +0200 | [diff] [blame] | 6 | TOOLCHAIN_ROOT ?= $(ROOT)/toolchains |
Jens Wiklander | 68f7f8d | 2021-06-07 16:02:24 +0000 | [diff] [blame] | 7 | UNAME_M := $(shell uname -m) |
Joakim Bech | 427dd63 | 2015-05-04 15:52:33 +0200 | [diff] [blame] | 8 | |
Jens Wiklander | 68f7f8d | 2021-06-07 16:02:24 +0000 | [diff] [blame] | 9 | ifeq ($(UNAME_M),x86_64) |
Joakim Bech | 427dd63 | 2015-05-04 15:52:33 +0200 | [diff] [blame] | 10 | AARCH32_PATH ?= $(TOOLCHAIN_ROOT)/aarch32 |
| 11 | AARCH32_CROSS_COMPILE ?= $(AARCH32_PATH)/bin/arm-linux-gnueabihf- |
Joakim Bech | 19ea713 | 2021-06-14 11:32:46 +0200 | [diff] [blame] | 12 | AARCH32_GCC_VERSION ?= gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf |
| 13 | SRC_AARCH32_GCC ?= https://developer.arm.com/-/media/Files/downloads/gnu-a/10.2-2020.11/binrel/$(AARCH32_GCC_VERSION).tar.xz |
Joakim Bech | 427dd63 | 2015-05-04 15:52:33 +0200 | [diff] [blame] | 14 | |
| 15 | AARCH64_PATH ?= $(TOOLCHAIN_ROOT)/aarch64 |
| 16 | AARCH64_CROSS_COMPILE ?= $(AARCH64_PATH)/bin/aarch64-linux-gnu- |
Joakim Bech | 19ea713 | 2021-06-14 11:32:46 +0200 | [diff] [blame] | 17 | AARCH64_GCC_VERSION ?= gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu |
| 18 | SRC_AARCH64_GCC ?= https://developer.arm.com/-/media/Files/downloads/gnu-a/10.2-2020.11/binrel/$(AARCH64_GCC_VERSION).tar.xz |
Joakim Bech | 427dd63 | 2015-05-04 15:52:33 +0200 | [diff] [blame] | 19 | |
Joakim Bech | c960663 | 2017-01-27 11:50:49 +0100 | [diff] [blame] | 20 | # Download toolchain macro for saving some repetition |
| 21 | # $(1) is $AARCH.._PATH : i.e., path to the destination |
| 22 | # $(2) is $SRC_AARCH.._GCC : is the downloaded tar.gz file |
| 23 | # $(3) is $.._GCC_VERSION : the name of the file to download |
| 24 | define dltc |
| 25 | @if [ ! -d "$(1)" ]; then \ |
| 26 | mkdir -p $(1); \ |
| 27 | echo "Downloading $(3) ..."; \ |
| 28 | curl -s -L $(2) -o $(TOOLCHAIN_ROOT)/$(3).tar.xz; \ |
| 29 | tar xf $(TOOLCHAIN_ROOT)/$(3).tar.xz -C $(1) --strip-components=1; \ |
Jerome Forissier | 38cc5a8 | 2020-09-21 17:42:09 +0200 | [diff] [blame] | 30 | (cd $(1)/bin && for f in *-none-linux*; do ln -s $$f $${f//-none} ; done;) \ |
Joakim Bech | c960663 | 2017-01-27 11:50:49 +0100 | [diff] [blame] | 31 | fi |
| 32 | endef |
| 33 | |
| 34 | .PHONY: toolchains |
Joakim Bech | 6a0fc2b | 2018-05-23 08:38:47 +0200 | [diff] [blame] | 35 | toolchains: aarch32 aarch64 |
Joakim Bech | 427dd63 | 2015-05-04 15:52:33 +0200 | [diff] [blame] | 36 | |
Joakim Bech | c960663 | 2017-01-27 11:50:49 +0100 | [diff] [blame] | 37 | .PHONY: aarch32 |
Joakim Bech | 42807a7 | 2017-01-27 10:43:28 +0100 | [diff] [blame] | 38 | aarch32: |
Joakim Bech | c960663 | 2017-01-27 11:50:49 +0100 | [diff] [blame] | 39 | $(call dltc,$(AARCH32_PATH),$(SRC_AARCH32_GCC),$(AARCH32_GCC_VERSION)) |
Joakim Bech | 427dd63 | 2015-05-04 15:52:33 +0200 | [diff] [blame] | 40 | |
Joakim Bech | c960663 | 2017-01-27 11:50:49 +0100 | [diff] [blame] | 41 | .PHONY: aarch64 |
Joakim Bech | 42807a7 | 2017-01-27 10:43:28 +0100 | [diff] [blame] | 42 | aarch64: |
Joakim Bech | c960663 | 2017-01-27 11:50:49 +0100 | [diff] [blame] | 43 | $(call dltc,$(AARCH64_PATH),$(SRC_AARCH64_GCC),$(AARCH64_GCC_VERSION)) |
Jerome Forissier | c3cd9f5 | 2020-05-25 18:47:00 +0200 | [diff] [blame] | 44 | |
Jerome Forissier | c09d34c | 2021-04-15 17:09:44 +0200 | [diff] [blame] | 45 | CLANG_VER ?= 12.0.0 |
Jerome Forissier | 0ae3f0a | 2021-04-15 17:09:44 +0200 | [diff] [blame] | 46 | CLANG_PATH ?= $(ROOT)/clang-$(CLANG_VER) |
Jerome Forissier | c3cd9f5 | 2020-05-25 18:47:00 +0200 | [diff] [blame] | 47 | |
| 48 | # Download the Clang compiler with LLVM tools and compiler-rt libraries |
| 49 | define dl-clang |
Jerome Forissier | 0ae3f0a | 2021-04-15 17:09:44 +0200 | [diff] [blame] | 50 | @if [ ! -d "$(2)" ]; then \ |
| 51 | ./get_clang.sh $(1) $(2); \ |
Jerome Forissier | c3cd9f5 | 2020-05-25 18:47:00 +0200 | [diff] [blame] | 52 | else \ |
Jerome Forissier | 0ae3f0a | 2021-04-15 17:09:44 +0200 | [diff] [blame] | 53 | echo "$(2) already exists"; \ |
Jerome Forissier | c3cd9f5 | 2020-05-25 18:47:00 +0200 | [diff] [blame] | 54 | fi |
| 55 | endef |
| 56 | |
| 57 | .PHONY: clang-toolchains |
| 58 | clang-toolchains: |
Jerome Forissier | 0ae3f0a | 2021-04-15 17:09:44 +0200 | [diff] [blame] | 59 | $(call dl-clang,$(CLANG_VER),$(CLANG_PATH)) |
Jens Wiklander | 68f7f8d | 2021-06-07 16:02:24 +0000 | [diff] [blame] | 60 | |
| 61 | else # $(UNAME_M) != x86_64 |
| 62 | AARCH32_PATH := $(TOOLCHAIN_ROOT)/aarch32 |
| 63 | AARCH32_CROSS_COMPILE := $(AARCH32_PATH)/bin/arm-linux- |
| 64 | AARCH64_PATH := $(TOOLCHAIN_ROOT)/aarch64 |
| 65 | AARCH64_CROSS_COMPILE := $(AARCH64_PATH)/bin/aarch64-linux- |
| 66 | |
| 67 | .PHONY: toolchains |
| 68 | toolchains: $(AARCH64_PATH)/.done $(AARCH32_PATH)/.done |
| 69 | |
| 70 | define build_toolchain |
| 71 | @echo Building $1 toolchain |
| 72 | @mkdir -p ../out-$1-sdk $2 |
| 73 | @(cd .. && python build/br-ext/scripts/make_def_config.py \ |
| 74 | --br buildroot --out out-$1-sdk --br-ext build/br-ext \ |
| 75 | --top-dir "$(ROOT)" \ |
| 76 | --br-defconfig build/br-ext/configs/sdk-$1 \ |
| 77 | --br-defconfig build/br-ext/configs/sdk-common \ |
| 78 | --make-cmd $(MAKE)) |
| 79 | @$(MAKE) -C ../out-$1-sdk clean |
| 80 | @$(MAKE) -C ../out-$1-sdk sdk |
| 81 | @tar xf ../out-$1-sdk/images/$3-buildroot-linux-$4_sdk-buildroot.tar.gz \ |
| 82 | -C $2 --strip-components=1 |
| 83 | @touch $2/.done |
| 84 | endef |
| 85 | |
| 86 | $(AARCH64_PATH)/.done: |
| 87 | $(call build_toolchain,aarch64,$(AARCH64_PATH),aarch64,gnu) |
| 88 | |
| 89 | $(AARCH32_PATH)/.done: |
| 90 | $(call build_toolchain,aarch32,$(AARCH32_PATH),arm,gnueabihf) |
| 91 | endif |