forked from qca/open-ath9k-htc-firmware
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Makefile
142 lines (119 loc) · 3.36 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
GMP_VER=5.0.5
GMP_URL=http://ftp.gnu.org/gnu/gmp/gmp-$(GMP_VER).tar.bz2
GMP_TAR=gmp-$(GMP_VER).tar.bz2
GMP_DIR=gmp-$(GMP_VER)
MPFR_VER=3.1.1
MPFR_URL=http://ftp.gnu.org/gnu/mpfr/mpfr-$(MPFR_VER).tar.bz2
MPFR_TAR=mpfr-$(MPFR_VER).tar.bz2
MPFR_DIR=mpfr-$(MPFR_VER)
MPC_VER=1.0.1
MPC_URL=http://ftp.gnu.org/gnu/mpc/mpc-$(MPC_VER).tar.gz
MPC_TAR=mpc-$(MPC_VER).tar.gz
MPC_DIR=mpc-$(MPC_VER)
BINUTILS_VER=2.23.1
BINUTILS_URL=http://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.patch
GCC_VER=4.7.2
GCC_URL=http://ftp.gnu.org/gnu/gcc/gcc-$(GCC_VER)/gcc-$(GCC_VER).tar.bz2
GCC_TAR=gcc-$(GCC_VER).tar.bz2
GCC_DIR=gcc-$(GCC_VER)
GCC_PATCHES=local/patches/gcc.patch
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), \
$(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)
$(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))