forked from qca/open-ath9k-htc-firmware
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
149 lines (126 loc) · 3.83 KB
/
Makefile
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
GMP_VER=6.2.0
GMP_URL=https://ftp.gnu.org/gnu/gmp/gmp-$(GMP_VER).tar.bz2
GMP_TAR=gmp-$(GMP_VER).tar.bz2
GMP_DIR=gmp-$(GMP_VER)
GMP_SUM=f51c99cb114deb21a60075ffb494c1a210eb9d7cb729ed042ddb7de9534451ea
MPFR_VER=4.0.2
MPFR_URL=https://ftp.gnu.org/gnu/mpfr/mpfr-$(MPFR_VER).tar.bz2
MPFR_TAR=mpfr-$(MPFR_VER).tar.bz2
MPFR_DIR=mpfr-$(MPFR_VER)
MPFR_SUM=c05e3f02d09e0e9019384cdd58e0f19c64e6db1fd6f5ecf77b4b1c61ca253acc
MPC_VER=1.1.0
MPC_URL=https://ftp.gnu.org/gnu/mpc/mpc-$(MPC_VER).tar.gz
MPC_TAR=mpc-$(MPC_VER).tar.gz
MPC_DIR=mpc-$(MPC_VER)
MPC_SUM=6985c538143c1208dcb1ac42cedad6ff52e267b47e5f970183a3e75125b43c2e
BINUTILS_VER=2.34
BINUTILS_URL=https://ftp.gnu.org/gnu/binutils/binutils-$(BINUTILS_VER).tar.bz2
BINUTILS_TAR=binutils-$(BINUTILS_VER).tar.bz2
BINUTILS_DIR=binutils-$(BINUTILS_VER)
BINUTILS_PATCHES=local/patches/binutils-2.34_fixup.patch local/patches/binutils.patch
BINUTILS_SUM=89f010078b6cf69c23c27897d686055ab89b198dddf819efb0a4f2c38a0b36e6
GCC_VER=9.2.0
GCC_URL=https://ftp.gnu.org/gnu/gcc/gcc-$(GCC_VER)/gcc-$(GCC_VER).tar.gz
GCC_TAR=gcc-$(GCC_VER).tar.gz
GCC_DIR=gcc-$(GCC_VER)
GCC_PATCHES=local/patches/gcc.patch
GCC_SUM=a931a750d6feadacbeecb321d73925cd5ebb6dfa7eff0802984af3aef63759f4
BASEDIR=$(shell pwd)
TOOLCHAIN_DIR=$(BASEDIR)/toolchain
TARGET=xtensa-elf
DL_DIR=$(TOOLCHAIN_DIR)/dl
BUILD_DIR=$(TOOLCHAIN_DIR)/build
all: toolchain
# 1: package name
# 2: configure arguments
# 3: make command
define Common/Compile
mkdir -p $(BUILD_DIR)/$($(1)_DIR)
+cd $(BUILD_DIR)/$($(1)_DIR) && \
$(DL_DIR)/$($(1)_DIR)/configure \
--prefix=$(TOOLCHAIN_DIR)/inst \
$(2) && \
$(3)
endef
define GMP/Compile
$(call Common/Compile,GMP, \
--disable-shared --enable-static, \
$(MAKE) && $(MAKE) check && $(MAKE) -j1 install \
)
endef
define MPFR/Compile
$(call Common/Compile,MPFR, \
--disable-shared --enable-static \
--with-gmp=$(TOOLCHAIN_DIR)/inst, \
$(MAKE) && $(MAKE) check && $(MAKE) -j1 install \
)
endef
define MPC/Compile
$(call Common/Compile,MPC, \
--disable-shared --enable-static \
--with-gmp=$(TOOLCHAIN_DIR)/inst \
--with-mpfr=$(TOOLCHAIN_DIR)/inst, \
$(MAKE) && $(MAKE) check && $(MAKE) -j1 install \
)
endef
define BINUTILS/Compile
$(call Common/Compile,BINUTILS, \
--target=$(TARGET) \
--disable-werror, \
$(MAKE) && $(MAKE) -j1 install \
)
endef
define GCC/Compile
$(call Common/Compile,GCC, \
--target=$(TARGET) \
--enable-languages=c \
--disable-libssp \
--disable-shared \
--disable-libquadmath \
--with-gmp=$(TOOLCHAIN_DIR)/inst \
--with-mpfr=$(TOOLCHAIN_DIR)/inst \
--with-mpc=$(TOOLCHAIN_DIR)/inst \
--with-newlib, \
$(MAKE) && $(MAKE) -j1 install \
)
endef
# 1: package name
# 2: dependencies on other packages
define Build
$(DL_DIR)/$($(1)_TAR):
mkdir -p $(DL_DIR)
wget -N -P $(DL_DIR) $($(1)_URL)
printf "%s %s\n" $($(1)_SUM) $$@ | shasum -a 256 -c
$(DL_DIR)/$($(1)_DIR)/.prepared: $(DL_DIR)/$($(1)_TAR)
tar -C $(DL_DIR) -x$(if $(findstring bz2,$($(1)_TAR)),j,z)f $(DL_DIR)/$($(1)_TAR)
$(if $($(1)_PATCHES), \
cat $($(1)_PATCHES) | \
patch -p1 -d $(DL_DIR)/$($(1)_DIR))
touch $$@
$(1)_DEPENDS = $(foreach pkg,$(2),$(BUILD_DIR)/$($(pkg)_DIR)/.built)
$(BUILD_DIR)/$($(1)_DIR)/.built: $(DL_DIR)/$($(1)_DIR)/.prepared $$($(1)_DEPENDS)
mkdir -p $(BUILD_DIR)/$($(1)_DIR)
$($(1)/Compile)
touch $$@
clean-dl-$(1):
rm -rf $(DL_DIR)/$($(1)_DIR)
toolchain: $(BUILD_DIR)/$($(1)_DIR)/.built
clean-dl: clean-dl-$(1)
download: $(DL_DIR)/$($(1)_DIR)/.prepared
endef
all: toolchain firmware
toolchain-clean:
rm -rf $(TOOLCHAIN_DIR)/build $(TOOLCHAIN_DIR)/inst
clean-dl:
download:
toolchain:
clean:
$(MAKE) -C target_firmware clean
firmware: toolchain
+$(MAKE) -C target_firmware
.PHONY: all toolchain-clean clean clean-dl download toolchain firmware
$(eval $(call Build,GMP))
$(eval $(call Build,MPFR,GMP))
$(eval $(call Build,MPC,GMP MPFR))
$(eval $(call Build,BINUTILS))
$(eval $(call Build,GCC,MPC MPFR))