1 |
13 |
serginhofr |
srcdir := @abs_top_srcdir@
|
2 |
|
|
builddir := @abs_top_builddir@
|
3 |
|
|
INSTALL_DIR := @prefix@
|
4 |
|
|
|
5 |
|
|
PACKAGES := binutils gcc glibc newlib
|
6 |
|
|
gcc_version := 5.2.0
|
7 |
|
|
binutils_version := 2.25.1
|
8 |
|
|
glibc_version := 2.22
|
9 |
|
|
newlib_version := 2.2.0
|
10 |
|
|
|
11 |
|
|
DISTDIR ?= /var/cache/distfiles
|
12 |
|
|
GNU_MIRROR := http://mirrors.kernel.org/gnu
|
13 |
|
|
gcc_url := $(GNU_MIRROR)/gcc/gcc-$(gcc_version)/gcc-$(gcc_version).tar.gz
|
14 |
|
|
binutils_url := $(GNU_MIRROR)/binutils/binutils-$(binutils_version).tar.gz
|
15 |
|
|
glibc_url := $(GNU_MIRROR)/glibc/glibc-$(glibc_version).tar.gz
|
16 |
|
|
newlib_url := ftp://sourceware.org/pub/newlib/newlib-$(newlib_version).tar.gz
|
17 |
|
|
|
18 |
|
|
XLEN ?= @XLEN@
|
19 |
|
|
WITH_ARCH ?= @WITH_ARCH@
|
20 |
|
|
MULTILIB ?=
|
21 |
|
|
SYSROOT := $(INSTALL_DIR)/sysroot
|
22 |
|
|
|
23 |
|
|
SHELL := /bin/sh
|
24 |
|
|
AWK := @GAWK@
|
25 |
|
|
SED := @GSED@
|
26 |
|
|
PATH := $(INSTALL_DIR)/bin:$(PATH)
|
27 |
|
|
|
28 |
|
|
# Check to see if we need wrapper scripts for awk/sed (which point to
|
29 |
|
|
# gawk/gsed on platforms where these aren't the default), otherwise
|
30 |
|
|
# don't override these as the wrappers don't always work.
|
31 |
|
|
ifneq (@GSED@,/bin/sed)
|
32 |
|
|
PATH := $(base_dir)/sed:$(PATH)
|
33 |
|
|
endif
|
34 |
|
|
ifneq (@GAWK@,/usr/bin/gawk)
|
35 |
|
|
PATH := $(base_dir)/awk:$(PATH)
|
36 |
|
|
endif
|
37 |
|
|
|
38 |
|
|
export PATH AWK SED
|
39 |
|
|
|
40 |
|
|
MULTILIB_FLAGS := @multilib_flags@
|
41 |
|
|
ATOMIC_CFLAGS := @atomic_cflags@
|
42 |
|
|
FLOAT_CFLAGS := @float_cflags@
|
43 |
|
|
FLOAT_ASFLAGS := @float_asflags@
|
44 |
|
|
GLIBC_CONFIGURE_FLAGS := @glibc_configure_flags@
|
45 |
|
|
|
46 |
|
|
CFLAGS_FOR_TARGET := $(CFLAGS_FOR_TARGET_EXTRA) $(ATOMIC_CFLAGS) $(FLOAT_CFLAGS)
|
47 |
|
|
ASFLAGS_FOR_TARGET := $(ASFLAGS_FOR_TARGET_EXTRA) $(FLOAT_ASFLAGS)
|
48 |
|
|
|
49 |
|
|
all: @default_target@
|
50 |
|
|
|
51 |
|
|
newlib: stamps/build-gcc-newlib
|
52 |
|
|
|
53 |
|
|
ifneq ($(findstring --disable-multilib,$(MULTILIB_FLAGS)),)
|
54 |
|
|
linux: stamps/build-gcc-linux-stage2
|
55 |
|
|
else
|
56 |
|
|
linux:
|
57 |
|
|
$(MAKE) stamps/build-gcc-linux-stage1 XLEN=64
|
58 |
|
|
$(MAKE) stamps/build-glibc-linux64 XLEN=64
|
59 |
|
|
$(MAKE) stamps/build-glibc-linux64-soft-float XLEN=64 MULTILIB=-soft-float \
|
60 |
|
|
GLIBC_CONFIGURE_FLAGS="--without-fp --libdir=/usr/lib/soft-float libc_cv_slibdir=/lib/soft-float"
|
61 |
|
|
$(MAKE) stamps/build-glibc-linux64-no-atomic XLEN=64 MULTILIB=-no-atomic \
|
62 |
|
|
CC="riscv64-unknown-linux-gnu-gcc -mno-atomic" \
|
63 |
|
|
CFLAGS_FOR_TARGET_EXTRA="-mno-atomic" \
|
64 |
|
|
ASFLAGS_FOR_TARGET_EXTRA="-mno-atomic" \
|
65 |
|
|
GLIBC_CONFIGURE_FLAGS="--libdir=/usr/lib/no-atomic libc_cv_slibdir=/lib/no-atomic"
|
66 |
|
|
$(MAKE) stamps/build-glibc-linux64-soft-float-no-atomic XLEN=64 MULTILIB=-soft-float-no-atomic \
|
67 |
|
|
CC="riscv64-unknown-linux-gnu-gcc -mno-atomic" \
|
68 |
|
|
CFLAGS_FOR_TARGET_EXTRA="-mno-atomic" \
|
69 |
|
|
ASFLAGS_FOR_TARGET_EXTRA="-mno-atomic" \
|
70 |
|
|
GLIBC_CONFIGURE_FLAGS="--without-fp --libdir=/usr/lib/soft-float/no-atomic libc_cv_slibdir=/lib/soft-float/no-atomic"
|
71 |
|
|
$(MAKE) stamps/build-glibc-linux32 XLEN=32 \
|
72 |
|
|
CC="riscv64-unknown-linux-gnu-gcc -m32" \
|
73 |
|
|
READELF=riscv64-unknown-linux-gnu-readelf \
|
74 |
|
|
CFLAGS_FOR_TARGET_EXTRA="-m32" \
|
75 |
|
|
ASFLAGS_FOR_TARGET_EXTRA="-m32"
|
76 |
|
|
$(MAKE) stamps/build-glibc-linux32-soft-float XLEN=32 MULTILIB=-soft-float \
|
77 |
|
|
CC="riscv64-unknown-linux-gnu-gcc -m32" \
|
78 |
|
|
READELF=riscv64-unknown-linux-gnu-readelf \
|
79 |
|
|
CFLAGS_FOR_TARGET_EXTRA="-m32" \
|
80 |
|
|
ASFLAGS_FOR_TARGET_EXTRA="-m32" \
|
81 |
|
|
GLIBC_CONFIGURE_FLAGS="--without-fp --libdir=/usr/lib32/soft-float libc_cv_slibdir=/lib32/soft-float"
|
82 |
|
|
$(MAKE) stamps/build-glibc-linux32-no-atomic XLEN=32 MULTILIB=-no-atomic \
|
83 |
|
|
CC="riscv64-unknown-linux-gnu-gcc -m32 -mno-atomic" \
|
84 |
|
|
READELF=riscv64-unknown-linux-gnu-readelf \
|
85 |
|
|
CFLAGS_FOR_TARGET_EXTRA="-m32 -mno-atomic" \
|
86 |
|
|
ASFLAGS_FOR_TARGET_EXTRA="-m32 -mno-atomic" \
|
87 |
|
|
GLIBC_CONFIGURE_FLAGS="--libdir=/usr/lib32/no-atomic libc_cv_slibdir=/lib32/no-atomic"
|
88 |
|
|
$(MAKE) stamps/build-glibc-linux32-soft-float-no-atomic XLEN=32 MULTILIB=-soft-float-no-atomic \
|
89 |
|
|
CC="riscv64-unknown-linux-gnu-gcc -m32 -mno-atomic" \
|
90 |
|
|
READELF=riscv64-unknown-linux-gnu-readelf \
|
91 |
|
|
CFLAGS_FOR_TARGET_EXTRA="-m32 -mno-atomic" \
|
92 |
|
|
ASFLAGS_FOR_TARGET_EXTRA="-m32 -mno-atomic" \
|
93 |
|
|
GLIBC_CONFIGURE_FLAGS="--without-fp --libdir=/usr/lib32/soft-float/no-atomic libc_cv_slibdir=/lib32/soft-float/no-atomic"
|
94 |
|
|
$(MAKE) stamps/build-gcc-linux-stage2 XLEN=64
|
95 |
|
|
endif
|
96 |
|
|
|
97 |
|
|
$(addprefix src/original-,$(PACKAGES)):
|
98 |
|
|
mkdir -p src
|
99 |
|
|
rm -rf $@ $(subst original-,,$@)-*
|
100 |
|
|
cd src && (cat $(DISTDIR)/$(subst src/original-,,$@)-$($(subst src/original-,,$@)_version).tar.gz || @FETCHER@ $($(subst src/original-,,$@)_url)) | tar zxf -
|
101 |
|
|
mv $(subst original-,,$@)-$($(subst src/original-,,$@)_version) $@
|
102 |
|
|
|
103 |
|
|
$(addprefix src/,$(PACKAGES)): src/%: src/original-%
|
104 |
|
|
rm -rf $@ $@.tmp
|
105 |
|
|
cp -a $< $@.tmp
|
106 |
|
|
$(srcdir)/scripts/cp_s $(srcdir)/$(notdir $@) $@.tmp
|
107 |
|
|
cd $@.tmp && patch -p1 < $(srcdir)/patches/$(notdir $@)
|
108 |
|
|
if test -f $@.tmp/contrib/download_prerequisites && test "@NEED_GCC_EXTERNAL_LIBRARIES@" == "true"; then cd $@.tmp && ./contrib/download_prerequisites; fi
|
109 |
|
|
mv $@.tmp $@
|
110 |
|
|
|
111 |
|
|
.PHONY: patches $(addprefix $(srcdir)/patches/,$(PACKAGES))
|
112 |
|
|
$(addprefix $(srcdir)/patches/,$(PACKAGES)): $(srcdir)/patches/%: src/%
|
113 |
|
|
-cd src/$(notdir $@) && rm `cd $(srcdir)/$(notdir $@) && find . -type f`
|
114 |
|
|
-cd src && diff --exclude=manual --exclude=autom4te.cache -rupN original-$(notdir $@) $(notdir $@) | filterdiff --remove-timestamps > $@
|
115 |
|
|
$(srcdir)/scripts/cp_s $(srcdir)/$(notdir $@) $<
|
116 |
|
|
|
117 |
|
|
patches: $(addprefix $(srcdir)/patches/,$(PACKAGES))
|
118 |
|
|
|
119 |
|
|
stamps/build-binutils-linux: src/binutils
|
120 |
|
|
rm -rf $@ $(notdir $@)
|
121 |
|
|
mkdir $(notdir $@)
|
122 |
|
|
cd $(notdir $@) && $(CURDIR)/$
|
123 |
|
|
--target=riscv$(XLEN)-unknown-linux-gnu \
|
124 |
|
|
--prefix=$(INSTALL_DIR) \
|
125 |
|
|
--with-sysroot=$(SYSROOT) \
|
126 |
|
|
$(MULTILIB_FLAGS) \
|
127 |
|
|
--disable-nls
|
128 |
|
|
$(MAKE) -C $(notdir $@)
|
129 |
|
|
$(MAKE) -C $(notdir $@) install
|
130 |
|
|
mkdir -p $(dir $@) && touch $@
|
131 |
|
|
|
132 |
|
|
stamps/build-linux-headers:
|
133 |
|
|
mkdir -p $(SYSROOT)/usr/
|
134 |
|
|
cp -a $(srcdir)/linux-headers/include $(SYSROOT)/usr/
|
135 |
|
|
mkdir -p $(dir $@) && touch $@
|
136 |
|
|
|
137 |
|
|
stamps/build-glibc-linux-headers: src/glibc stamps/build-gcc-linux-stage1
|
138 |
|
|
rm -rf $@ $(notdir $@)
|
139 |
|
|
mkdir $(notdir $@)
|
140 |
|
|
mkdir -p $(SYSROOT)/usr/lib $(SYSROOT)/lib
|
141 |
|
|
cd $(notdir $@) && $(CURDIR)/$
|
142 |
|
|
--host=riscv$(XLEN)-unknown-linux-gnu \
|
143 |
|
|
--prefix=/usr \
|
144 |
|
|
libc_cv_forced_unwind=yes \
|
145 |
|
|
libc_cv_c_cleanup=yes \
|
146 |
|
|
--enable-shared \
|
147 |
|
|
--enable-__thread \
|
148 |
|
|
--disable-multilib \
|
149 |
|
|
--enable-kernel=2.6.32
|
150 |
|
|
$(MAKE) -C $(notdir $@) install-headers install_root=$(SYSROOT)
|
151 |
|
|
mkdir -p $(dir $@) && touch $@
|
152 |
|
|
|
153 |
|
|
stamps/build-glibc-linux$(XLEN)$(MULTILIB): src/glibc stamps/build-gcc-linux-stage1
|
154 |
|
|
rm -rf $@ $(notdir $@)
|
155 |
|
|
mkdir $(notdir $@)
|
156 |
|
|
mkdir -p $(SYSROOT)/usr/lib $(SYSROOT)/lib
|
157 |
|
|
cd $(notdir $@) && CFLAGS="$(CFLAGS_FOR_TARGET) -g -O2" \
|
158 |
|
|
ASFLAGS="$(ASFLAGS_FOR_TARGET)" \
|
159 |
|
|
$(CURDIR)/$
|
160 |
|
|
--host=riscv$(XLEN)-unknown-linux-gnu \
|
161 |
|
|
--prefix=/usr \
|
162 |
|
|
libc_cv_forced_unwind=yes \
|
163 |
|
|
libc_cv_c_cleanup=yes \
|
164 |
|
|
--enable-shared \
|
165 |
|
|
--enable-__thread \
|
166 |
|
|
$(MULTILIB_FLAGS) \
|
167 |
|
|
--enable-kernel=2.6.32 \
|
168 |
|
|
$(GLIBC_CONFIGURE_FLAGS)
|
169 |
|
|
$(MAKE) -C $(notdir $@)
|
170 |
|
|
$(MAKE) -C $(notdir $@) install install_root=$(SYSROOT)
|
171 |
|
|
mkdir -p $(dir $@) && touch $@
|
172 |
|
|
|
173 |
|
|
stamps/build-gcc-linux-stage1: src/gcc stamps/build-binutils-linux \
|
174 |
|
|
stamps/build-linux-headers
|
175 |
|
|
rm -rf $@ $(notdir $@)
|
176 |
|
|
mkdir $(notdir $@)
|
177 |
|
|
cd $(notdir $@) && $(CURDIR)/$
|
178 |
|
|
--target=riscv$(XLEN)-unknown-linux-gnu \
|
179 |
|
|
--prefix=$(INSTALL_DIR) \
|
180 |
|
|
--with-sysroot=$(SYSROOT) \
|
181 |
|
|
--with-newlib \
|
182 |
|
|
--without-headers \
|
183 |
|
|
--disable-shared \
|
184 |
|
|
--disable-threads \
|
185 |
|
|
--enable-tls \
|
186 |
|
|
--enable-languages=c \
|
187 |
|
|
--disable-libatomic \
|
188 |
|
|
--disable-libmudflap \
|
189 |
|
|
--disable-libssp \
|
190 |
|
|
--disable-libquadmath \
|
191 |
|
|
--disable-libgomp \
|
192 |
|
|
--disable-nls \
|
193 |
|
|
--disable-bootstrap \
|
194 |
|
|
$(MULTILIB_FLAGS) \
|
195 |
|
|
$(WITH_ARCH)
|
196 |
|
|
$(MAKE) -C $(notdir $@) inhibit-libc=true all-gcc
|
197 |
|
|
$(MAKE) -C $(notdir $@) inhibit-libc=true install-gcc
|
198 |
|
|
$(MAKE) -C $(notdir $@) inhibit-libc=true all-target-libgcc
|
199 |
|
|
$(MAKE) -C $(notdir $@) inhibit-libc=true install-target-libgcc
|
200 |
|
|
mkdir -p $(dir $@) && touch $@
|
201 |
|
|
|
202 |
|
|
stamps/build-gcc-linux-stage2: src/gcc stamps/build-glibc-linux$(XLEN) \
|
203 |
|
|
stamps/build-glibc-linux-headers
|
204 |
|
|
rm -rf $@ $(notdir $@)
|
205 |
|
|
mkdir $(notdir $@)
|
206 |
|
|
cd $(notdir $@) && $(CURDIR)/$
|
207 |
|
|
--target=riscv$(XLEN)-unknown-linux-gnu \
|
208 |
|
|
--prefix=$(INSTALL_DIR) \
|
209 |
|
|
--with-sysroot=$(SYSROOT) \
|
210 |
|
|
--enable-shared \
|
211 |
|
|
--enable-tls \
|
212 |
|
|
--enable-languages=c,c++,fortran \
|
213 |
|
|
--disable-libmudflap \
|
214 |
|
|
--disable-libssp \
|
215 |
|
|
--disable-libquadmath \
|
216 |
|
|
--disable-nls \
|
217 |
|
|
$(MULTILIB_FLAGS) \
|
218 |
|
|
--disable-bootstrap \
|
219 |
|
|
$(WITH_ARCH)
|
220 |
|
|
$(MAKE) -C $(notdir $@)
|
221 |
|
|
$(MAKE) -C $(notdir $@) install
|
222 |
|
|
mkdir -p $(dir $@) && touch $@
|
223 |
|
|
|
224 |
|
|
stamps/build-binutils-newlib: src/binutils
|
225 |
|
|
rm -rf $@ $(notdir $@)
|
226 |
|
|
mkdir $(notdir $@)
|
227 |
|
|
cd $(notdir $@) && $(CURDIR)/$
|
228 |
|
|
--target=riscv$(XLEN)-unknown-elf \
|
229 |
|
|
--prefix=$(INSTALL_DIR) \
|
230 |
|
|
--enable-tls \
|
231 |
|
|
--disable-werror
|
232 |
|
|
$(MAKE) -C $(notdir $@)
|
233 |
|
|
$(MAKE) -C $(notdir $@) install
|
234 |
|
|
mkdir -p $(dir $@) && touch $@
|
235 |
|
|
|
236 |
|
|
src/newlib-gcc: src/gcc src/newlib
|
237 |
|
|
rm -rf $@ $@.tmp
|
238 |
|
|
cp -a src/gcc $@.tmp
|
239 |
|
|
cp -a src/newlib/newlib $@.tmp
|
240 |
|
|
cp -a src/newlib/libgloss $@.tmp
|
241 |
|
|
$(srcdir)/scripts/cp_s $(srcdir)/newlib $@.tmp
|
242 |
|
|
mv $@.tmp $@
|
243 |
|
|
|
244 |
|
|
stamps/build-gcc-newlib: src/newlib-gcc stamps/build-binutils-newlib
|
245 |
|
|
rm -rf $@ $(notdir $@)
|
246 |
|
|
mkdir $(notdir $@)
|
247 |
|
|
cd $(notdir $@) && $(CURDIR)/$
|
248 |
|
|
--target=riscv$(XLEN)-unknown-elf \
|
249 |
|
|
--prefix=$(INSTALL_DIR) \
|
250 |
|
|
--disable-shared \
|
251 |
|
|
--disable-threads \
|
252 |
|
|
--enable-tls \
|
253 |
|
|
--enable-languages=c,c++ \
|
254 |
|
|
--with-newlib \
|
255 |
|
|
--disable-libmudflap \
|
256 |
|
|
--disable-libssp \
|
257 |
|
|
--disable-libquadmath \
|
258 |
|
|
--disable-libgomp \
|
259 |
|
|
--disable-nls \
|
260 |
|
|
$(MULTILIB_FLAGS) \
|
261 |
|
|
$(WITH_ARCH)
|
262 |
|
|
$(MAKE) -C $(notdir $@) inhibit-libc=true
|
263 |
|
|
$(MAKE) -C $(notdir $@) install
|
264 |
|
|
mkdir -p $(dir $@) && touch $@
|
265 |
|
|
|
266 |
|
|
clean:
|
267 |
|
|
rm -rf build-* $(addprefix src/,$(PACKAGES)) stamps
|
268 |
|
|
|
269 |
|
|
distclean: clean
|
270 |
|
|
rm -rf src
|
271 |
|
|
|
272 |
|
|
# All of the packages install themselves, so our install target does nothing.
|
273 |
|
|
install:
|