stage3: Build xz before rpm, since rpm depends on xz.
[fedora-riscv.git] / Makefile
1 # Refer to the README file to understand how Fedora on RISC-V is
2 # bootstrapped.
3
4 # Absolute path to the current directory.
5 ROOT := $(shell pwd)
6
7 # Note these are chosen very specifically to ensure the different
8 # versions work together.  Don't blindly update to the latest
9 # versions.  See also:
10 # https://github.com/riscv/riscv-pk/issues/18#issuecomment-206115996
11 RISCV_QEMU_COMMIT               = 94f5eb73091fb4fe272db3e943f173ecc0f78ffd
12 RISCV_QEMU_SHORTCOMMIT          = 94f5eb73
13 RISCV_FESVR_COMMIT              = 0f34d7ad311f78455a674224225f5b3056efba1d
14 RISCV_FESVR_SHORTCOMMIT         = 0f34d7ad
15 RISCV_ISA_SIM_COMMIT            = 3bfc00ef2a1b1f0b0472a39a866261b00f67027e
16 RISCV_ISA_SIM_SHORTCOMMIT       = 3bfc00ef
17 RISCV_GNU_TOOLCHAIN_COMMIT      = 728afcddcb0526a0f6560c4032da82805f054d58
18 RISCV_GNU_TOOLCHAIN_SHORTCOMMIT = 728afcdd
19 RISCV_PK_COMMIT                 = 85ae17aa149b9ea114bdd70cc30ea7e73813fb48
20 RISCV_PK_SHORTCOMMIT            = 85ae17aa
21
22 # For the correct versions, see
23 # riscv-gnu-toolchain/Makefile.in *_version variables
24 BINUTILS_VERSION = 2.25.1
25 GLIBC_VERSION    = 2.22
26 GCC_VERSION      = 5.3.0
27 NEWLIB_VERSION   = 2.2.0
28
29 # See linux-4.1.y-riscv branch of
30 # https://github.com/riscv/riscv-linux
31 KERNEL_VERSION   = 4.1.26
32
33 # A local copy of Linux git repo so you don't have to keep downloading
34 # git commits (optional).
35 LOCAL_LINUX_GIT_COPY = $(HOME)/d/linux
36
37 # The root packages (plus their dependencies) that we want to in the
38 # stage 3 chroot.  This must include all the cross-compiled packages
39 # below, and may also include any noarch package we like.
40 STAGE3_PACKAGES = iso-codes \
41 ncurses-devel readline-devel bash coreutils gmp-devel \
42 mpfr-devel libmpc-devel binutils gcc gcc-c++ util-linux tar \
43 gzip zlib-devel file-devel popt-devel beecrypt-devel \
44 rpm rpm-build rpm-devel libdb-utils libdb-devel nano \
45 grep less strace bzip2-devel make diffutils findutils \
46 sed patch hostname gettext-devel lua-devel xz-devel gawk \
47 vim
48
49 # Versions of cross-compiled packages.
50 NCURSES_VERSION    = 6.0-20160730
51 READLINE_VERSION   = 6.3
52 BASH_VERSION       = 4.3
53 COREUTILS_VERSION  = 8.25
54 GMP_VERSION        = 6.1.1
55 MPFR_VERSION       = 3.1.4
56 MPC_VERSION        = 1.0.3
57 BINUTILS_X_VERSION = 2.26
58 GCC_X_VERSION      = 6.1.0
59 UTIL_LINUX_VERSION = 2.28
60 TAR_VERSION        = 1.29
61 GZIP_VERSION       = 1.8
62 ZLIB_VERSION       = 1.2.8
63 # Needs to match the version of 'file' installed (on host), otherwise:
64 #   "Cannot use the installed version of file (xx) to cross-compile file yy"
65 # Also note that 5.25 is definitely broken (segfaults in libmagic:magic_close).
66 FILE_VERSION       = 5.28
67 POPT_VERSION       = 1.16
68 BEECRYPT_VERSION   = 4.2.1
69 RPM_COMMIT         = 95712183458748ea6cafebac1bdd5daa097d9bee
70 RPM_SHORT_COMMIT   = 9571218
71 BDB_VERSION        = 4.5.20
72 NANO_VERSION       = 2.6.2
73 GREP_VERSION       = 2.25
74 LESS_VERSION       = 481
75 STRACE_COMMIT      = f320e1897832fd07a62e18ed288e75d8e79f4c5b
76 STRACE_SHORT_COMMIT = f320e189
77 BZIP2_VERSION      = 1.0.6
78 MAKE_VERSION       = 4.1
79 DIFFUTILS_VERSION  = 3.4
80 FINDUTILS_VERSION  = 4.6.0
81 SED_VERSION        = 4.2
82 PATCH_VERSION      = 2.7.5
83 HOSTNAME_VERSION   = 3.15
84 GETTEXT_VERSION    = 0.19
85 LUA_VERSION        = 5.3.3
86 XZ_VERSION         = 5.2.2
87 GAWK_VERSION       = 4.1.3
88 VIM_VERSION        = 7.4
89
90 all: stage1 stage2 stage3 stage4
91
92 # Stage 1
93
94 stage1: stage1-riscv-qemu/riscv-qemu-$(RISCV_QEMU_SHORTCOMMIT).tar.gz \
95         stage1-riscv-qemu/riscv-qemu.spec \
96         stamp-riscv-qemu-installed \
97         stage1-riscv-fesvr/riscv-fesvr-$(RISCV_FESVR_SHORTCOMMIT).tar.gz \
98         stage1-riscv-fesvr/riscv-fesvr.spec \
99         stamp-riscv-fesvr-installed \
100         stage1-riscv-isa-sim/riscv-isa-sim-$(RISCV_ISA_SIM_SHORTCOMMIT).tar.gz \
101         stage1-riscv-isa-sim/riscv-isa-sim.spec \
102         stamp-riscv-isa-sim-installed
103
104 stage1-riscv-qemu/riscv-qemu-$(RISCV_QEMU_SHORTCOMMIT).tar.gz:
105         rm -f $@ $@-t
106         wget -O $@-t 'https://github.com/riscv/riscv-qemu/archive/$(RISCV_QEMU_COMMIT)/riscv-qemu-$(RISCV_QEMU_SHORTCOMMIT).tar.gz'
107         mv $@-t $@
108
109 stage1-riscv-qemu/riscv-qemu.spec: stage1-riscv-qemu/riscv-qemu.spec.in
110         sed -e 's/@COMMIT@/$(RISCV_QEMU_COMMIT)/g' \
111             -e 's/@SHORTCOMMIT@/$(RISCV_QEMU_SHORTCOMMIT)/g' \
112             < $^ > $@-t
113         mv $@-t $@
114
115 stamp-riscv-qemu-installed:
116         rm -f $@
117         @rpm -q riscv-qemu >/dev/null || { \
118           echo "ERROR: You must install riscv-qemu:"; \
119           echo; \
120           echo "       dnf copr enable rjones/riscv"; \
121           echo "       dnf install riscv-qemu"; \
122           echo; \
123           echo "OR: you can build it yourself from the stage1-riscv-qemu directory."; \
124           echo; \
125           exit 1; \
126         }
127         @qemu-system-riscv --version || { \
128           echo "ERROR: qemu-system-riscv is not working."; \
129           echo "Make sure you installed the riscv-qemu package."; \
130           exit 1; \
131         }
132         touch $@
133
134 stage1-riscv-fesvr/riscv-fesvr-$(RISCV_FESVR_SHORTCOMMIT).tar.gz:
135         rm -f $@ $@-t
136         wget -O $@-t 'https://github.com/riscv/riscv-fesvr/archive/$(RISCV_FESVR_COMMIT)/riscv-fesvr-$(RISCV_FESVR_SHORTCOMMIT).tar.gz'
137         mv $@-t $@
138
139 stage1-riscv-fesvr/riscv-fesvr.spec: stage1-riscv-fesvr/riscv-fesvr.spec.in
140         sed -e 's/@COMMIT@/$(RISCV_FESVR_COMMIT)/g' \
141             -e 's/@SHORTCOMMIT@/$(RISCV_FESVR_SHORTCOMMIT)/g' \
142             < $^ > $@-t
143         mv $@-t $@
144
145 stamp-riscv-fesvr-installed:
146         rm -f $@
147         @rpm -q riscv-fesvr >/dev/null || { \
148           echo "ERROR: You must install riscv-fesvr:"; \
149           echo; \
150           echo "       dnf copr enable rjones/riscv"; \
151           echo "       dnf install riscv-fesvr"; \
152           echo; \
153           echo "OR: you can build it yourself from the stage1-riscv-fesvr directory."; \
154           echo; \
155           exit 1; \
156         }
157         touch $@
158
159 stage1-riscv-isa-sim/riscv-isa-sim-$(RISCV_ISA_SIM_SHORTCOMMIT).tar.gz:
160         rm -f $@ $@-t
161         wget -O $@-t 'https://github.com/riscv/riscv-isa-sim/archive/$(RISCV_ISA_SIM_COMMIT)/riscv-isa-sim-$(RISCV_ISA_SIM_SHORTCOMMIT).tar.gz'
162         mv $@-t $@
163
164 stage1-riscv-isa-sim/riscv-isa-sim.spec: stage1-riscv-isa-sim/riscv-isa-sim.spec.in
165         sed -e 's/@COMMIT@/$(RISCV_ISA_SIM_COMMIT)/g' \
166             -e 's/@SHORTCOMMIT@/$(RISCV_ISA_SIM_SHORTCOMMIT)/g' \
167             < $^ > $@-t
168         mv $@-t $@
169
170 stamp-riscv-isa-sim-installed:
171         rm -f $@
172         @rpm -q riscv-isa-sim >/dev/null || { \
173           echo "ERROR: You must install riscv-isa-sim:"; \
174           echo; \
175           echo "       dnf copr enable rjones/riscv"; \
176           echo "       dnf install riscv-isa-sim"; \
177           echo; \
178           echo "OR: you can build it yourself from the stage1-riscv-isa-sim directory."; \
179           echo; \
180           exit 1; \
181         }
182         touch $@
183
184 # Stage 2
185
186 stage2: stage2-riscv-gnu-toolchain/riscv-gnu-toolchain-$(RISCV_GNU_TOOLCHAIN_SHORTCOMMIT).tar.gz \
187         stage2-riscv-gnu-toolchain/binutils-$(BINUTILS_VERSION).tar.gz \
188         stage2-riscv-gnu-toolchain/gcc-$(GCC_VERSION).tar.gz \
189         stage2-riscv-gnu-toolchain/glibc-$(GLIBC_VERSION).tar.gz \
190         stage2-riscv-gnu-toolchain/newlib-$(NEWLIB_VERSION).tar.gz \
191         stage2-riscv-gnu-toolchain/riscv-gnu-toolchain.spec \
192         stamp-riscv-gnu-toolchain-installed \
193         stage2-riscv-pk/riscv-pk-$(RISCV_PK_SHORTCOMMIT).tar.gz \
194         stage2-riscv-pk/riscv-pk.spec \
195         stamp-riscv-pk-installed
196
197 stage2-riscv-gnu-toolchain/riscv-gnu-toolchain-$(RISCV_GNU_TOOLCHAIN_SHORTCOMMIT).tar.gz:
198         rm -f $@ $@-t
199         wget -O $@-t https://github.com/lowRISC/riscv-gnu-toolchain/archive/$(RISCV_GNU_TOOLCHAIN_COMMIT)/riscv-gnu-toolchain-$(RISCV_GNU_TOOLCHAIN_SHORTCOMMIT).tar.gz
200         mv $@-t $@
201
202 stage2-riscv-gnu-toolchain/binutils-$(BINUTILS_VERSION).tar.gz:
203         rm -f $@ $@-t
204         wget -O $@-t http://mirrors.kernel.org/gnu/binutils/binutils-$(BINUTILS_VERSION).tar.gz
205         mv $@-t $@
206
207 # GCC 5 no longer compiles with GCC 6 unless we patch it.
208 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69959
209 stage2-riscv-gnu-toolchain/gcc-$(GCC_VERSION).tar.gz:
210         rm -f $@ $@-t
211         wget -O $@-t http://mirrors.kernel.org/gnu/gcc/gcc-$(GCC_VERSION)/gcc-$(GCC_VERSION).tar.gz
212         zcat $@-t | tar xf -
213         cd gcc-$(GCC_VERSION) && patch -p0 < ../stage2-riscv-gnu-toolchain/gcc-5-fix-compilation-with-gcc-6.patch
214         tar zcf $@-t gcc-$(GCC_VERSION)
215         rm -r gcc-$(GCC_VERSION)
216         mv $@-t $@
217
218 stage2-riscv-gnu-toolchain/glibc-$(GLIBC_VERSION).tar.gz:
219         rm -f $@ $@-t
220         wget -O $@-t http://mirrors.kernel.org/gnu/glibc/glibc-$(GLIBC_VERSION).tar.gz
221         mv $@-t $@
222
223 stage2-riscv-gnu-toolchain/newlib-$(NEWLIB_VERSION).tar.gz:
224         rm -f $@ $@-t
225         wget -O $@-t ftp://sourceware.org/pub/newlib/newlib-$(NEWLIB_VERSION).tar.gz
226         mv $@-t $@
227
228 stage2-riscv-gnu-toolchain/riscv-gnu-toolchain.spec: stage2-riscv-gnu-toolchain/riscv-gnu-toolchain.spec.in
229         sed -e 's/@COMMIT@/$(RISCV_GNU_TOOLCHAIN_COMMIT)/g' \
230             -e 's/@SHORTCOMMIT@/$(RISCV_GNU_TOOLCHAIN_SHORTCOMMIT)/g' \
231             -e 's/@BINUTILS_VERSION@/$(BINUTILS_VERSION)/g' \
232             -e 's/@GCC_VERSION@/$(GCC_VERSION)/g' \
233             -e 's/@GLIBC_VERSION@/$(GLIBC_VERSION)/g' \
234             -e 's/@NEWLIB_VERSION@/$(NEWLIB_VERSION)/g' \
235             < $^ > $@-t
236         mv $@-t $@
237
238 stamp-riscv-gnu-toolchain-installed:
239         rm -f $@
240         @rpm -q riscv-gnu-toolchain >/dev/null || { \
241           echo "ERROR: You must install riscv-gnu-toolchain:"; \
242           echo; \
243           echo "       dnf copr enable rjones/riscv"; \
244           echo "       dnf install riscv-gnu-toolchain"; \
245           echo; \
246           echo "OR: you can build it yourself from the stage2-riscv-gnu-toolchain directory."; \
247           echo; \
248           exit 1; \
249         }
250         @riscv64-unknown-elf-gcc --version || { \
251           echo "ERROR: riscv64-unknown-elf-gcc (cross compiler) is not working."; \
252           echo "Make sure you installed the riscv-gnu-toolchain package."; \
253           exit 1; \
254         }
255         touch $@
256
257 stage2-riscv-pk/riscv-pk-$(RISCV_PK_SHORTCOMMIT).tar.gz:
258         rm -f $@ $@-t
259         wget -O $@-t https://github.com/lowRISC/riscv-pk/archive/$(RISCV_PK_COMMIT)/riscv-pk-$(RISCV_PK_SHORTCOMMIT).tar.gz
260         mv $@-t $@
261
262 stage2-riscv-pk/riscv-pk.spec: stage2-riscv-pk/riscv-pk.spec.in
263         sed -e 's/@COMMIT@/$(RISCV_PK_COMMIT)/g' \
264             -e 's/@SHORTCOMMIT@/$(RISCV_PK_SHORTCOMMIT)/g' \
265             < $^ > $@-t
266         mv $@-t $@
267
268 stamp-riscv-pk-installed:
269         rm -f $@
270         @rpm -q riscv-pk >/dev/null || { \
271           echo "ERROR: You must install riscv-pk:"; \
272           echo; \
273           echo "       dnf copr enable rjones/riscv"; \
274           echo "       dnf install riscv-pk"; \
275           echo; \
276           echo "OR: you can build it yourself from the stage2-riscv-pk directory."; \
277           echo; \
278           exit 1; \
279         }
280         touch $@
281
282 # Stage 3
283
284 stage3: stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux \
285         stage3-chroot-original/etc/fedora-release \
286         stage3-chroot/etc/fedora-release \
287         stage3-chroot/lib64/libc.so.6 \
288         stage3-chroot/usr/bin/tic \
289         stage3-chroot/usr/lib64/libhistory.so.6 \
290         stage3-chroot/bin/bash \
291         stage3-chroot/bin/ls \
292         stage3-chroot/usr/lib64/libgmp.so.10 \
293         stage3-chroot/usr/lib64/libmpfr.so.4 \
294         stage3-chroot/usr/lib64/libmpc.so.3 \
295         stage3-chroot/usr/bin/as \
296         stage3-chroot/usr/bin/gcc \
297         stage3-chroot/usr/bin/mount \
298         stage3-chroot/usr/bin/tar \
299         stage3-chroot/usr/bin/gzip \
300         stage3-chroot/usr/lib64/libz.so \
301         stage3-chroot/usr/bin/file \
302         stage3-chroot/usr/lib64/libpopt.so \
303         stage3-chroot/usr/lib64/libbeecrypt.so \
304         stage3-chroot/usr/bin/nano \
305         stage3-chroot/usr/bin/grep \
306         stage3-chroot/usr/bin/less \
307         stage3-chroot/usr/bin/strace \
308         stage3-chroot/usr/bin/bzip2 \
309         stage3-chroot/usr/bin/make \
310         stage3-chroot/usr/bin/diff \
311         stage3-chroot/usr/bin/find \
312         stage3-chroot/usr/bin/sed \
313         stage3-chroot/usr/bin/patch \
314         stage3-chroot/usr/bin/hostname \
315         stage3-chroot/usr/bin/gettext \
316         stage3-chroot/usr/bin/lua \
317         stage3-chroot/usr/bin/xz \
318         stage3-chroot/usr/bin/rpm \
319         stage3-chroot/usr/bin/gawk \
320         stage3-chroot/usr/bin/vim \
321         stage3-chroot/init \
322         stage3-disk.img
323
324 stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux:
325         rm -rf stage3-kernel/linux-$(KERNEL_VERSION)
326         cp -a $(LOCAL_LINUX_GIT_COPY) stage3-kernel/linux-$(KERNEL_VERSION) || { \
327           mkdir stage3-kernel/linux-$(KERNEL_VERSION) && \
328           cd stage3-kernel/linux-$(KERNEL_VERSION) && \
329           git init; \
330         }
331         cd stage3-kernel/linux-$(KERNEL_VERSION) && \
332         git remote add riscv https://github.com/riscv/riscv-linux && \
333         git fetch riscv && \
334         git checkout -f linux-4.1.y-riscv && \
335         make mrproper && \
336         make ARCH=riscv defconfig
337         echo CONFIG_CMDLINE=\"root=/dev/htifblk0 init=/init\" >> stage3-kernel/linux-$(KERNEL_VERSION)/.config
338         echo CONFIG_CROSS_COMPILE=riscv64-unknown-elf- >> stage3-kernel/linux-$(KERNEL_VERSION)/.config
339         cd stage3-kernel/linux-$(KERNEL_VERSION) && \
340         make ARCH=riscv olddefconfig
341         cd stage3-kernel/linux-$(KERNEL_VERSION) && \
342         make ARCH=riscv vmlinux
343         ls -l $@
344
345 # Build an original (x86-64) chroot using supermin.  We then aim to
346 # rebuild (using cross-compiled versions) every ELF binary in this
347 # chroot.
348 stage3-chroot-original/etc/fedora-release:
349         rm -rf stage3-chroot-original tmp-supermin.d
350         supermin --prepare $(STAGE3_PACKAGES) -o tmp-supermin.d
351         supermin --build -f chroot tmp-supermin.d -o stage3-chroot-original
352         rm -r tmp-supermin.d
353         @echo -n "Total files in chroot: "
354         @find stage3-chroot-original -type f | wc -l
355         @echo -n "ELF files to be rebuilt: "
356         @find stage3-chroot-original -type f | xargs file -N | grep -E '\bELF.*LSB\b' | wc -l
357
358 # Copy the original chroot to the final chroot, remove all the ELF
359 # files.
360 stage3-chroot/etc/fedora-release: stage3-chroot-original/etc/fedora-release
361         rm -rf stage3-chroot
362         cp -a stage3-chroot-original stage3-chroot
363         find stage3-chroot -type d -print0 | xargs -0 chmod u+w
364         find stage3-chroot -type f -print0 | xargs -0 chmod u+w
365         find stage3-chroot -type f -print0 | xargs -0 file -N | grep -E '\bELF.*LSB\b' | awk -F: '{print $$1}' | xargs rm -f
366         rm -f stage3-chroot/lib64/libc.so.6
367
368 # Copy in compiled glibc from the riscv-gnu-toolchain sysroot.  Only
369 # copy files and symlinks, leave the target directory structure
370 # intact.
371 stage3-chroot/lib64/libc.so.6:
372         mkdir -p stage3-chroot/usr/lib/audit
373         mkdir -p stage3-chroot/usr/lib/gconv
374         for f in `cd /usr/sysroot && find -type f -o -type l`; do \
375             cp -d /usr/sysroot/$$f stage3-chroot/$$f; \
376         done
377         cd stage3-chroot/lib64 && for f in ../lib/*; do ln -sf $$f; done
378
379 # Cross-compile ncurses.
380 stage3-chroot/usr/bin/tic: ncurses-$(NCURSES_VERSION).tgz
381         tar zxf $^
382         cd ncurses-$(NCURSES_VERSION) && \
383         PATH=$(ROOT)/fixed-gcc:$$PATH \
384         ./configure --host=riscv64-unknown-linux-gnu \
385             --prefix=/usr --libdir=/usr/lib64 \
386             --with-shared \
387             --with-termlib=tinfo \
388             --enable-widec
389         cd ncurses-$(NCURSES_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
390         cd ncurses-$(NCURSES_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make install DESTDIR=$(ROOT)/stage3-chroot
391
392 ncurses-$(NCURSES_VERSION).tgz:
393         rm -f $@ $@-t
394         wget -O $@-t ftp://invisible-island.net/ncurses/current/ncurses-$(NCURSES_VERSION).tgz
395         mv $@-t $@
396
397 # Cross-compile readline.
398 stage3-chroot/usr/lib64/libhistory.so.6: readline-$(READLINE_VERSION).tar.gz
399         tar zxf $^
400         cd readline-$(READLINE_VERSION) && \
401         PATH=$(ROOT)/fixed-gcc:$$PATH \
402         bash_cv_wcwidth_broken=no \
403         ./configure --host=riscv64-unknown-linux-gnu \
404             --prefix=/usr --libdir=/usr/lib64
405         cd readline-$(READLINE_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
406         cd readline-$(READLINE_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
407         rm -f stage3-chroot/usr/lib64/*.la
408
409 readline-$(READLINE_VERSION).tar.gz:
410         rm -f $@ $@-t
411         wget -O $@-t ftp://ftp.gnu.org/gnu/readline/readline-$(READLINE_VERSION).tar.gz
412         mv $@-t $@
413
414 # Cross-compile bash.
415 stage3-chroot/bin/bash: bash-$(BASH_VERSION).tar.gz
416         tar zxf $^
417         cd bash-$(BASH_VERSION) && \
418         PATH=$(ROOT)/fixed-gcc:$$PATH \
419         ./configure --host=riscv64-unknown-linux-gnu \
420             --prefix=/usr --libdir=/usr/lib64
421         cd bash-$(BASH_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
422         cd bash-$(BASH_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
423
424 bash-$(BASH_VERSION).tar.gz:
425         rm -f $@ $@-t
426         wget -O $@-t ftp://ftp.gnu.org/gnu/bash/bash-$(BASH_VERSION).tar.gz
427         mv $@-t $@
428
429 # Cross-compile coreutils.  Bleah, coreutils cross-compilation is
430 # known-broken and upstream don't care, hence the 'touch' command.
431
432 COREUTILS_PROGRAMS = arch base32 base64 basename cat chcon chgrp chmod chown chroot cksum comm cp csplit cut date dd df dir dircolors dirname du echo env expand expr factor false fmt fold ginstall groups head hostid hostname id install join kill link ln logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup nproc numfmt od paste pathchk pinky pr printenv printf ptx pwd readlink realpath rm rmdir runcon seq sha1sum sha224sum sha256sum sha384sum sha512sum shred shuf sleep sort split stat stdbuf stty sum sync tac tail tee test timeout touch tr true truncate tsort tty uname unexpand uniq unlink uptime users vdir wc who whoami yes
433
434 stage3-chroot/bin/ls: coreutils-$(COREUTILS_VERSION).tar.xz
435         rm -rf coreutils-$(COREUTILS_VERSION)
436         tar Jxf $^
437         cd coreutils-$(COREUTILS_VERSION) && \
438         PATH=$(ROOT)/fixed-gcc:$$PATH \
439         ./configure --host=riscv64-unknown-linux-gnu \
440             --prefix=/usr --libdir=/usr/lib64
441         -cd coreutils-$(COREUTILS_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
442         cd coreutils-$(COREUTILS_VERSION)/man && \
443         for f in $(COREUTILS_PROGRAMS); do touch $$f.1; done
444         cd coreutils-$(COREUTILS_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
445         cd coreutils-$(COREUTILS_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
446
447 coreutils-$(COREUTILS_VERSION).tar.xz:
448         rm -f $@ $@-t
449         wget -O $@-t ftp://ftp.gnu.org/gnu/coreutils/coreutils-$(COREUTILS_VERSION).tar.xz
450         mv $@-t $@
451
452 # Cross-compile binutils.
453 stage3-chroot/usr/bin/as: binutils-$(BINUTILS_X_VERSION).tar.gz
454         rm -rf riscv-binutils-gdb-riscv-binutils-$(BINUTILS_X_VERSION)
455         zcat $^ | tar xf -
456         mkdir riscv-binutils-gdb-riscv-binutils-$(BINUTILS_X_VERSION)/build
457         cd riscv-binutils-gdb-riscv-binutils-$(BINUTILS_X_VERSION)/build && \
458         PATH=$(ROOT)/fixed-gcc:$$PATH \
459         ../configure \
460             --host=riscv64-unknown-linux-gnu \
461             --prefix=/usr --libdir=/usr/lib64
462         cd riscv-binutils-gdb-riscv-binutils-$(BINUTILS_X_VERSION)/build && PATH=$(ROOT)/fixed-gcc:$$PATH make
463         cd riscv-binutils-gdb-riscv-binutils-$(BINUTILS_X_VERSION)/build && make DESTDIR=$(ROOT)/stage3-chroot install
464
465 binutils-$(BINUTILS_X_VERSION).tar.gz:
466         rm -f $@ $@-t
467         wget -O $@-t https://github.com/riscv/riscv-binutils-gdb/archive/riscv-binutils-$(BINUTILS_X_VERSION).tar.gz
468         mv $@-t $@
469
470 # Cross-compile GMP, MPFR and MPC (deps of GCC).
471 stage3-chroot/usr/lib64/libgmp.so.10: gmp-$(GMP_VERSION).tar.lz
472         rm -rf gmp-$(GMP_VERSION)
473         tar --lzip -xf gmp-$(GMP_VERSION).tar.lz
474         cd gmp-$(GMP_VERSION) && \
475         PATH=$(ROOT)/fixed-gcc:$$PATH \
476         ./configure --host=riscv64-unknown-linux-gnu \
477             --prefix=/usr --libdir=/usr/lib64
478         cd gmp-$(GMP_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
479         cd gmp-$(GMP_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
480         cd stage3-chroot/usr/lib && ln -s ../lib64/libgmp.so
481
482 gmp-$(GMP_VERSION).tar.lz:
483         rm -f $@ $@-t
484         wget -O $@-t https://gmplib.org/download/gmp/gmp-$(GMP_VERSION).tar.lz
485         mv $@-t $@
486
487 stage3-chroot/usr/lib64/libmpfr.so.4: mpfr-$(MPFR_VERSION).tar.gz
488         rm -rf mpfr-$(MPFR_VERSION)
489         tar -zxf mpfr-$(MPFR_VERSION).tar.gz
490         cd mpfr-$(MPFR_VERSION) && \
491         PATH=$(ROOT)/fixed-gcc:$$PATH \
492         ./configure --host=riscv64-unknown-linux-gnu \
493             --prefix=/usr --libdir=/usr/lib64 \
494             --with-gmp=$(ROOT)/stage3-chroot/usr
495         cd mpfr-$(MPFR_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
496         cd mpfr-$(MPFR_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
497         cd stage3-chroot/usr/lib && ln -s ../lib64/libmpfr.so
498         rm -f stage3-chroot/usr/lib64/*.la
499
500 mpfr-$(MPFR_VERSION).tar.gz:
501         rm -f $@ $@-t
502         wget -O $@-t http://www.mpfr.org/mpfr-current/mpfr-$(MPFR_VERSION).tar.gz
503         mv $@-t $@
504
505 stage3-chroot/usr/lib64/libmpc.so.3: mpc-$(MPC_VERSION).tar.gz
506         rm -rf mpc-$(MPC_VERSION)
507         tar -zxf mpc-$(MPC_VERSION).tar.gz
508         cd mpc-$(MPC_VERSION) && \
509         PATH=$(ROOT)/fixed-gcc:$$PATH \
510         ./configure --host=riscv64-unknown-linux-gnu \
511             --prefix=/usr --libdir=/usr/lib64 \
512             --with-gmp=$(ROOT)/stage3-chroot/usr \
513             --with-mpfr=$(ROOT)/stage3-chroot/usr
514         cd mpc-$(MPC_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
515         cd mpc-$(MPC_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
516         cd stage3-chroot/usr/lib && ln -s ../lib64/libmpc.so
517         rm -f stage3-chroot/usr/lib64/*.la
518
519 mpc-$(MPC_VERSION).tar.gz:
520         rm -f $@ $@-t
521         wget -O $@-t ftp://ftp.gnu.org/gnu/mpc/mpc-$(MPC_VERSION).tar.gz
522         mv $@-t $@
523
524 # Cross-compile GCC.
525 stage3-chroot/usr/bin/gcc: gcc-$(GCC_X_VERSION).tar.gz
526         rm -rf riscv-gcc-riscv-gcc-$(GCC_X_VERSION)
527         zcat $^ | tar xf -
528         cd riscv-gcc-riscv-gcc-$(GCC_X_VERSION) && \
529         patch -p1 < ../0001-HACKS-TO-GET-GCC-TO-COMPILE.patch
530         mkdir riscv-gcc-riscv-gcc-$(GCC_X_VERSION)/build
531         cd riscv-gcc-riscv-gcc-$(GCC_X_VERSION)/build && \
532         gcc_cv_as_leb128=no \
533         PATH=$(ROOT)/fixed-gcc:$$PATH \
534         ../configure \
535             --host=riscv64-unknown-linux-gnu \
536             --prefix=/usr --libdir=/usr/lib64 \
537             --enable-shared \
538             --enable-tls \
539             --enable-languages=c,c++ \
540             --disable-libmudflap \
541             --disable-libssp \
542             --disable-libquadmath \
543             --disable-nls \
544             --disable-multilib
545         cd riscv-gcc-riscv-gcc-$(GCC_X_VERSION)/build && gcc_cv_as_leb128=no PATH=$(ROOT)/fixed-gcc:$$PATH make
546         cd riscv-gcc-riscv-gcc-$(GCC_X_VERSION)/build && make install DESTDIR=$(ROOT)/stage3-chroot
547         rm -f stage3-chroot/usr/lib64/*.la
548
549 gcc-$(GCC_X_VERSION).tar.gz:
550         rm -f $@ $@-t
551         wget -O $@-t https://github.com/riscv/riscv-gcc/archive/riscv-gcc-$(GCC_X_VERSION).tar.gz
552         mv $@-t $@
553
554 # Cross-compile util-linux.
555 stage3-chroot/usr/bin/mount: util-linux-$(UTIL_LINUX_VERSION).tar.xz
556         rm -rf util-linux-$(UTIL_LINUX_VERSION)
557         tar -Jxf $^
558         cd util-linux-$(UTIL_LINUX_VERSION) && \
559         PATH=$(ROOT)/fixed-gcc:$$PATH \
560         LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
561         ./configure \
562             --host=riscv64-unknown-linux-gnu \
563             --prefix=/usr --libdir=/usr/lib64 \
564             --without-python \
565             --without-systemd \
566             --disable-makeinstall-chown \
567             --enable-static-programs=mount
568         cd util-linux-$(UTIL_LINUX_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
569         cd util-linux-$(UTIL_LINUX_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make install DESTDIR=$(ROOT)/stage3-chroot
570         rm -f stage3-chroot/usr/lib64/*.la
571
572 util-linux-$(UTIL_LINUX_VERSION).tar.xz:
573         rm -f $@ $@-t
574         wget -O $@-t ftp://ftp.kernel.org/pub/linux/utils/util-linux/v$(UTIL_LINUX_VERSION)/util-linux-$(UTIL_LINUX_VERSION).tar.xz
575         mv $@-t $@
576
577 # Cross-compile GNU tar.
578 stage3-chroot/usr/bin/tar: tar-$(TAR_VERSION).tar.xz
579         rm -rf tar-$(TAR_VERSION)
580         tar -Jxf $^
581         cd tar-$(TAR_VERSION) && \
582         PATH=$(ROOT)/fixed-gcc:$$PATH \
583         ./configure \
584             --host=riscv64-unknown-linux-gnu \
585             --prefix=/usr --libdir=/usr/lib64
586         cd tar-$(TAR_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
587         cd tar-$(TAR_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
588
589 tar-$(TAR_VERSION).tar.xz:
590         rm -f $@ $@-t
591         wget -O $@-t https://ftp.gnu.org/gnu/tar/tar-$(TAR_VERSION).tar.xz
592         mv $@-t $@
593
594 # Cross-compile GNU gzip.
595 stage3-chroot/usr/bin/gzip: gzip-$(GZIP_VERSION).tar.gz
596         rm -rf gzip-$(GZIP_VERSION)
597         tar -zxf $^
598         cd gzip-$(GZIP_VERSION) && \
599         PATH=$(ROOT)/fixed-gcc:$$PATH \
600         ./configure \
601             --host=riscv64-unknown-linux-gnu \
602             --prefix=/usr --libdir=/usr/lib64
603         cd gzip-$(GZIP_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
604         cd gzip-$(GZIP_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
605
606 gzip-$(GZIP_VERSION).tar.gz:
607         rm -f $@ $@-t
608         wget -O $@-t https://ftp.gnu.org/gnu/gzip/gzip-$(GZIP_VERSION).tar.gz
609         mv $@-t $@
610
611 # Cross-compile zlib.
612 stage3-chroot/usr/lib64/libz.so: zlib-$(ZLIB_VERSION).tar.gz
613         rm -rf zlib-$(ZLIB_VERSION)
614         tar -zxf $^
615         cd zlib-$(ZLIB_VERSION) && \
616         PATH=$(ROOT)/fixed-gcc:$$PATH \
617         CC=riscv64-unknown-linux-gnu-gcc \
618         CFLAGS="-I$(ROOT)/stage3-chroot/usr/include -L$(ROOT)/stage3-chroot/usr/lib" \
619         ./configure \
620             --prefix=/usr --libdir=/usr/lib64
621         cd zlib-$(ZLIB_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make shared
622         cd zlib-$(ZLIB_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
623
624 zlib-$(ZLIB_VERSION).tar.gz:
625         rm -f $@ $@-t
626         wget -O $@-t http://zlib.net/zlib-$(ZLIB_VERSION).tar.gz
627         mv $@-t $@
628
629 # Cross-compile file/libmagic.
630 stage3-chroot/usr/bin/file: file-$(FILE_VERSION).tar.gz
631         rm -rf file-$(FILE_VERSION)
632         tar -zxf $^
633         cd file-$(FILE_VERSION) && \
634         PATH=$(ROOT)/fixed-gcc:$$PATH \
635         LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
636         ./configure \
637             --host=riscv64-unknown-linux-gnu \
638             --prefix=/usr --libdir=/usr/lib64 \
639             --disable-static --enable-shared
640         cd file-$(FILE_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make V=1
641         cd file-$(FILE_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
642         rm -f stage3-chroot/usr/lib64/*.la
643
644 file-$(FILE_VERSION).tar.gz:
645         rm -f $@ $@-t
646         wget -O $@-t ftp://ftp.astron.com/pub/file/file-$(FILE_VERSION).tar.gz
647         mv $@-t $@
648
649 # Cross-compile popt.
650 stage3-chroot/usr/lib64/libpopt.so: popt-$(POPT_VERSION).tar.gz
651         rm -rf popt-$(POPT_VERSION)
652         tar -zxf $^
653         cd popt-$(POPT_VERSION) && \
654         PATH=$(ROOT)/fixed-gcc:$$PATH \
655         LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
656         ./configure \
657             --host=riscv64-unknown-linux-gnu \
658             --prefix=/usr --libdir=/usr/lib64 \
659             --disable-static --enable-shared
660         cd popt-$(POPT_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make V=1
661         cd popt-$(POPT_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
662         rm -f stage3-chroot/usr/lib64/*.la
663
664 popt-$(POPT_VERSION).tar.gz:
665         rm -f $@ $@-t
666         wget -O $@-t http://rpm5.org/files/popt/popt-$(POPT_VERSION).tar.gz
667         mv $@-t $@
668
669 # Cross-compile beecrypt.
670 stage3-chroot/usr/lib64/libbeecrypt.so: beecrypt-$(BEECRYPT_VERSION).tar.gz
671         rm -rf beecrypt-$(BEECRYPT_VERSION)
672         tar -zxf $^
673         cd beecrypt-$(BEECRYPT_VERSION) && patch -p0 < ../beecrypt-disable-cplusplus.patch
674         cd beecrypt-$(BEECRYPT_VERSION) && autoreconf -i
675         cd beecrypt-$(BEECRYPT_VERSION) && \
676         PATH=$(ROOT)/fixed-gcc:$$PATH \
677         LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
678         ./configure \
679             --host=riscv64-unknown-linux-gnu \
680             --prefix=/usr --libdir=/usr/lib64 \
681             --without-cplusplus \
682             --without-java \
683             --disable-openmp \
684             --disable-static \
685             --enable-shared
686         cd beecrypt-$(BEECRYPT_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make V=1
687         cd beecrypt-$(BEECRYPT_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make install DESTDIR=$(ROOT)/stage3-chroot V=1
688         chrpath -d stage3-chroot/usr/lib64/libbeecrypt.so.*
689         rm -f stage3-chroot/usr/lib64/*.la
690
691 beecrypt-$(BEECRYPT_VERSION).tar.gz:
692         rm -f $@ $@-t
693         wget -O $@-t http://downloads.sourceforge.net/sourceforge/beecrypt/beecrypt-$(BEECRYPT_VERSION).tar.gz
694         mv $@-t $@
695
696 # Cross-compile GNU nano (editor).
697 stage3-chroot/usr/bin/nano: nano-$(NANO_VERSION).tar.gz
698         rm -rf nano-$(NANO_VERSION)
699         tar -zxf $^
700         cd nano-$(NANO_VERSION) && \
701         PATH=$(ROOT)/fixed-gcc:$$PATH \
702         LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
703         ./configure \
704             --host=riscv64-unknown-linux-gnu \
705             --prefix=/usr --libdir=/usr/lib64
706         cd nano-$(NANO_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
707         cd nano-$(NANO_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
708
709 nano-$(NANO_VERSION).tar.gz:
710         rm -f $@ $@-t
711         wget -O $@-t https://www.nano-editor.org/dist/v2.6/nano-$(NANO_VERSION).tar.gz
712         mv $@-t $@
713
714 # Cross-compile GNU grep.
715 stage3-chroot/usr/bin/grep: grep-$(GREP_VERSION).tar.xz
716         rm -rf grep-$(GREP_VERSION)
717         tar -Jxf $^
718         cd grep-$(GREP_VERSION) && \
719         PATH=$(ROOT)/fixed-gcc:$$PATH \
720         ./configure \
721             --host=riscv64-unknown-linux-gnu \
722             --prefix=/usr --libdir=/usr/lib64
723         cd grep-$(GREP_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
724         cd grep-$(GREP_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
725
726 grep-$(GREP_VERSION).tar.xz:
727         rm -f $@ $@-t
728         wget -O $@-t https://ftp.gnu.org/gnu/grep/grep-$(GREP_VERSION).tar.xz
729         mv $@-t $@
730
731 # Cross-compile less.
732 stage3-chroot/usr/bin/less: less-$(LESS_VERSION).tar.gz
733         rm -rf less-$(LESS_VERSION)
734         tar -zxf $^
735         cd less-$(LESS_VERSION) && \
736         PATH=$(ROOT)/fixed-gcc:$$PATH \
737         LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
738         ./configure \
739             --host=riscv64-unknown-linux-gnu \
740             --prefix=/usr --libdir=/usr/lib64
741         cd less-$(LESS_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
742         cd less-$(LESS_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
743
744 less-$(LESS_VERSION).tar.gz:
745         rm -f $@ $@-t
746         wget -O $@-t http://www.greenwoodsoftware.com/less/less-$(LESS_VERSION).tar.gz
747         mv $@-t $@
748
749 # Cross-compile strace.
750 # XXX This does not work.
751 stage3-chroot/usr/bin/strace: strace-$(STRACE_SHORT_COMMIT).tar.gz
752         rm -rf strace-$(STRACE_SHORT_COMMIT)
753         tar -zxf $^
754         cd riscv-strace-$(STRACE_COMMIT) && patch -p1 < ../0001-Update-riscv_regs-for-ptrace.h-from-Linux-4.1.x.patch
755         cd riscv-strace-$(STRACE_COMMIT) && \
756         PATH=$(ROOT)/fixed-gcc:$$PATH \
757         LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
758         ./configure \
759             --host=riscv64-unknown-linux-gnu \
760             --prefix=/usr --libdir=/usr/lib64
761         cd riscv-strace-$(STRACE_COMMIT) && PATH=$(ROOT)/fixed-gcc:$$PATH make
762         cd riscv-strace-$(STRACE_COMMIT) && make install DESTDIR=$(ROOT)/stage3-chroot
763
764 strace-$(STRACE_SHORT_COMMIT).tar.gz:
765         rm -f $@ $@-t
766         wget -O $@-t 'https://github.com/riscv/riscv-strace/archive/$(STRACE_COMMIT)/riscv-strace-$(STRACE_SHORTCOMMIT).tar.gz'
767         mv $@-t $@
768
769 # Cross-compile bzip2.
770 stage3-chroot/usr/bin/bzip2: bzip2-$(BZIP2_VERSION).tar.gz
771         rm -rf bzip2-$(BZIP2_VERSION)
772         tar -zxf $^
773         cd bzip2-$(BZIP2_VERSION) && \
774         PATH=$(ROOT)/fixed-gcc:$$PATH \
775         make libbz2.a bzip2 bzip2recover \
776         PREFIX=/usr \
777         CC=riscv64-unknown-linux-gnu-gcc \
778         AR=riscv64-unknown-linux-gnu-ar \
779         RANLIB=riscv64-unknown-linux-gnu-ranlib \
780         CFLAGS="-Wall -Winline -O2 -g -D_FILE_OFFSET_BITS=64 -fPIC"
781         cd bzip2-$(BZIP2_VERSION) && \
782         make install PREFIX=$(ROOT)/stage3-chroot/usr
783
784 bzip2-$(BZIP2_VERSION).tar.gz:
785         rm -f $@ $@-t
786         wget -O $@-t http://www.bzip.org/1.0.6/bzip2-$(BZIP2_VERSION).tar.gz
787         mv $@-t $@
788
789 # Cross-compile GNU make.
790 stage3-chroot/usr/bin/make: make-$(MAKE_VERSION).tar.gz
791         rm -rf make-$(MAKE_VERSION)
792         tar -zxf $^
793         cd make-$(MAKE_VERSION) && \
794         PATH=$(ROOT)/fixed-gcc:$$PATH \
795         ./configure \
796             --host=riscv64-unknown-linux-gnu \
797             --prefix=/usr --libdir=/usr/lib64
798         cd make-$(MAKE_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
799         cd make-$(MAKE_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
800
801 make-$(MAKE_VERSION).tar.gz:
802         rm -f $@ $@-t
803         wget -O $@-t https://ftp.gnu.org/gnu/make/make-$(MAKE_VERSION).tar.gz
804         mv $@-t $@
805
806 # Cross-compile GNU diffutils.
807 stage3-chroot/usr/bin/diff: diffutils-$(DIFFUTILS_VERSION).tar.xz
808         rm -rf diffutils-$(DIFFUTILS_VERSION)
809         tar -Jxf $^
810         cd diffutils-$(DIFFUTILS_VERSION) && \
811         PATH=$(ROOT)/fixed-gcc:$$PATH \
812         ./configure \
813             --host=riscv64-unknown-linux-gnu \
814             --prefix=/usr --libdir=/usr/lib64
815         cd diffutils-$(DIFFUTILS_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
816         cd diffutils-$(DIFFUTILS_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
817
818 diffutils-$(DIFFUTILS_VERSION).tar.xz:
819         rm -f $@ $@-t
820         wget -O $@-t https://ftp.gnu.org/gnu/diffutils/diffutils-$(DIFFUTILS_VERSION).tar.xz
821         mv $@-t $@
822
823 # Cross-compile GNU findutils.
824 stage3-chroot/usr/bin/find: findutils-$(FINDUTILS_VERSION).tar.gz
825         rm -rf findutils-$(FINDUTILS_VERSION)
826         tar -zxf $^
827         cd findutils-$(FINDUTILS_VERSION) && \
828         PATH=$(ROOT)/fixed-gcc:$$PATH \
829         ./configure \
830             --host=riscv64-unknown-linux-gnu \
831             --prefix=/usr --libdir=/usr/lib64
832         cd findutils-$(FINDUTILS_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
833         cd findutils-$(FINDUTILS_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
834
835 findutils-$(FINDUTILS_VERSION).tar.gz:
836         rm -f $@ $@-t
837         wget -O $@-t https://ftp.gnu.org/gnu/findutils/findutils-$(FINDUTILS_VERSION).tar.gz
838         mv $@-t $@
839
840 # Cross-compile GNU sed.
841 stage3-chroot/usr/bin/sed: sed-$(SED_VERSION).tar.gz
842         rm -rf sed-$(SED_VERSION)
843         tar -zxf $^
844         cd sed-$(SED_VERSION) && \
845         PATH=$(ROOT)/fixed-gcc:$$PATH \
846         ./configure \
847             --host=riscv64-unknown-linux-gnu \
848             --prefix=/usr --libdir=/usr/lib64
849         cd sed-$(SED_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
850         cd sed-$(SED_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
851
852 sed-$(SED_VERSION).tar.gz:
853         rm -f $@ $@-t
854         wget -O $@-t https://ftp.gnu.org/gnu/sed/sed-$(SED_VERSION).tar.gz
855         mv $@-t $@
856
857 # Cross-compile patch.
858 stage3-chroot/usr/bin/patch: patch-$(PATCH_VERSION).tar.gz
859         rm -rf patch-$(PATCH_VERSION)
860         tar -zxf $^
861         cd patch-$(PATCH_VERSION) && \
862         PATH=$(ROOT)/fixed-gcc:$$PATH \
863         ./configure \
864             --host=riscv64-unknown-linux-gnu \
865             --prefix=/usr --libdir=/usr/lib64
866         cd patch-$(PATCH_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
867         cd patch-$(PATCH_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
868
869 patch-$(PATCH_VERSION).tar.gz:
870         rm -f $@ $@-t
871         wget -O $@-t https://ftp.gnu.org/gnu/patch/patch-$(PATCH_VERSION).tar.gz
872         mv $@-t $@
873
874 # Cross-compile hostname.
875 stage3-chroot/usr/bin/hostname: hostname-$(HOSTNAME_VERSION).tar.gz
876         rm -rf hostname-$(HOSTNAME_VERSION)
877         tar -zxf $^
878         cd hostname && patch -p1 < ../hostname-rh.patch
879         cd hostname && \
880         PATH=$(ROOT)/fixed-gcc:$$PATH \
881         make \
882         CC=riscv64-unknown-linux-gnu-gcc \
883         CFLAGS="-O2 -g"
884         cd hostname && make install BASEDIR=$(ROOT)/stage3-chroot
885
886 hostname-$(HOSTNAME_VERSION).tar.gz:
887         rm -f $@ $@-t
888         wget -O $@-t http://ftp.de.debian.org/debian/pool/main/h/hostname/hostname_$(HOSTNAME_VERSION).tar.gz
889         mv $@-t $@
890
891 # Cross-compile GNU gettext.
892 stage3-chroot/usr/bin/gettext: gettext-$(GETTEXT_VERSION).tar.gz
893         rm -rf gettext-$(GETTEXT_VERSION)
894         tar -zxf $^
895         cd gettext-$(GETTEXT_VERSION) && \
896         PATH=$(ROOT)/fixed-gcc:$$PATH \
897         ./configure \
898             --host=riscv64-unknown-linux-gnu \
899             --prefix=/usr --libdir=/usr/lib64
900         cd gettext-$(GETTEXT_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
901         cd gettext-$(GETTEXT_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make install DESTDIR=$(ROOT)/stage3-chroot
902         rm -f stage3-chroot/usr/lib64/*.la
903
904 gettext-$(GETTEXT_VERSION).tar.gz:
905         rm -f $@ $@-t
906         wget -O $@-t https://ftp.gnu.org/gnu/gettext/gettext-$(GETTEXT_VERSION).tar.gz
907         mv $@-t $@
908
909 # Cross-compile lua.
910 stage3-chroot/usr/bin/lua: lua-$(LUA_VERSION).tar.gz
911         rm -rf lua-$(LUA_VERSION)
912         tar -zxf $^
913         cd lua-$(LUA_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make PLAT=linux INSTALL_TOP=/usr CC=riscv64-unknown-linux-gnu-gcc AR="riscv64-unknown-linux-gnu-ar rcu" RANLIB="riscv64-unknown-linux-gnu-ranlib" MYLDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 MYLIBS=-ltinfo MYCFLAGS="-fPIC -DLUA_COMPAT_5_1"
914         cd lua-$(LUA_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make install INSTALL_TOP=$(ROOT)/stage3-chroot/usr INSTALL_LIB=$(ROOT)/stage3-chroot/usr/lib64
915
916 lua-$(LUA_VERSION).tar.gz:
917         rm -f $@ $@-t
918         wget -O $@-t https://www.lua.org/ftp/lua-$(LUA_VERSION).tar.gz
919         mv $@-t $@
920
921 # Cross-compile xz.
922 stage3-chroot/usr/bin/xz: xz-$(XZ_VERSION).tar.gz
923         rm -rf xz-$(XZ_VERSION)
924         tar -zxf $^
925         cd xz-$(XZ_VERSION) && \
926         PATH=$(ROOT)/fixed-gcc:$$PATH \
927         ./configure \
928             --host=riscv64-unknown-linux-gnu \
929             --prefix=/usr --libdir=/usr/lib64
930         cd xz-$(XZ_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
931         cd xz-$(XZ_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make install DESTDIR=$(ROOT)/stage3-chroot
932         rm -f stage3-chroot/usr/lib64/*.la
933
934 xz-$(XZ_VERSION).tar.gz:
935         rm -f $@ $@-t
936         wget -O $@-t http://tukaani.org/xz/xz-$(XZ_VERSION).tar.gz
937         mv $@-t $@
938
939 # Cross-compile GNU awk.
940 stage3-chroot/usr/bin/gawk: gawk-$(GAWK_VERSION).tar.gz
941         rm -rf gawk-$(GAWK_VERSION)
942         tar -zxf $^
943         cd gawk-$(GAWK_VERSION) && \
944         PATH=$(ROOT)/fixed-gcc:$$PATH \
945         ./configure \
946             --host=riscv64-unknown-linux-gnu \
947             --prefix=/usr --libdir=/usr/lib64
948         cd gawk-$(GAWK_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
949         cd gawk-$(GAWK_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
950
951 gawk-$(GAWK_VERSION).tar.gz:
952         rm -f $@ $@-t
953         wget -O $@-t https://ftp.gnu.org/gnu/gawk/gawk-$(GAWK_VERSION).tar.gz
954         mv $@-t $@
955
956 # Cross-compile vim.
957 stage3-chroot/usr/bin/vim: vim-$(VIM_VERSION).tar.gz
958         rm -rf vim-$(VIM_VERSION)
959         bzcat $^ | tar xf -
960         cd vim74/src && \
961         PATH=$(ROOT)/fixed-gcc:$$PATH \
962         vim_cv_memmove_handles_overlap=yes \
963         vim_cv_stat_ignores_slash=no \
964         vim_cv_getcwd_broken=no \
965         vim_cv_tty_group=world \
966         vim_cv_terminfo=yes \
967         vim_cv_toupper_broken=no \
968         LDFLAGS=-L/home/rjones/d/fedora-riscv/stage3-chroot/usr/lib64 \
969         ./configure \
970             --host=riscv64-unknown-linux-gnu \
971             --prefix=/usr --libdir=/usr/lib64 \
972             --with-tlib=tinfo
973         cd vim74/src && PATH=$(ROOT)/fixed-gcc:$$PATH make
974         cd vim74/src && make install DESTDIR=$(ROOT)/stage3-chroot STRIP=riscv64-unknown-linux-gnu-strip
975
976 vim-$(VIM_VERSION).tar.gz:
977         rm -f $@ $@-t
978         wget -O $@-t ftp://ftp.vim.org/pub/vim/unix/vim-$(VIM_VERSION).tar.bz2
979         mv $@-t $@
980
981 # Cross-compile RPM / rpmbuild.
982 # We build this from a git commit, with a few hacks to the configure
983 # script.
984 stage3-chroot/usr/bin/rpm: rpm-$(RPM_SHORT_COMMIT).tar.gz db-$(BDB_VERSION).tar.gz
985         rm -rf rpm-$(RPM_SHORT_COMMIT)
986         tar -zxf rpm-$(RPM_SHORT_COMMIT).tar.gz
987         tar -zxf db-$(BDB_VERSION).tar.gz -C rpm-$(RPM_SHORT_COMMIT)
988         cd rpm-$(RPM_SHORT_COMMIT) && ln -s db-$(BDB_VERSION) db
989         cd rpm-$(RPM_SHORT_COMMIT) && \
990         patch -p1 < ../0001-RISCV-64-bit-riscv64-support.patch && \
991         patch -p1 < ../0002-rpmrc-Convert-uname.machine-riscv-to-riscv32-riscv64.patch && \
992         patch -p1 < ../0003-build-fgetc-returns-int-not-char.patch && \
993         patch -p1 < ../0004-HACKS-TO-GET-RPM-TO-CROSS-COMPILE.patch
994         cd rpm-$(RPM_SHORT_COMMIT) && autoreconf -i
995         cd rpm-$(RPM_SHORT_COMMIT) && \
996         PATH=$(ROOT)/fixed-gcc:$$PATH \
997         LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
998         ./configure \
999             --host=riscv64-unknown-linux-gnu \
1000             --prefix=/usr --libdir=/usr/lib64 \
1001             --disable-rpath \
1002             --with-vendor=redhat \
1003             --without-libarchive \
1004             --with-lua \
1005             --with-beecrypt \
1006             --without-archive \
1007             --without-external-db \
1008             --enable-ndb \
1009             --disable-plugins
1010         cd rpm-$(RPM_SHORT_COMMIT) && PATH=$(ROOT)/fixed-gcc:$$PATH make V=1
1011         cd rpm-$(RPM_SHORT_COMMIT) && PATH=$(ROOT)/fixed-gcc:$$PATH make install DESTDIR=$(ROOT)/stage3-chroot
1012         rm -f stage3-chroot/usr/lib64/*.la
1013
1014 rpm-$(RPM_SHORT_COMMIT).tar.gz:
1015         rm -f $@ $@-t
1016         wget -O $@-t 'http://rpm.org/gitweb?p=rpm.git;a=snapshot;h=$(RPM_COMMIT);sf=tgz'
1017         mv $@-t $@
1018
1019 db-$(BDB_VERSION).tar.gz:
1020         rm -f $@ $@-t
1021         wget -O $@-t http://download.oracle.com/berkeley-db/db-$(BDB_VERSION).tar.gz
1022         mv $@-t $@
1023
1024 # Create an /init script.
1025 stage3-chroot/init: init.sh
1026         install -m 0755 $^ $@
1027
1028 # Create the stage3 disk image.
1029 # Note `-s +...' adds spare space to the disk image.
1030 stage3-disk.img: stage3-chroot
1031         cd stage3-chroot && virt-make-fs . ../$@ -t ext2 -F raw -s +4G
1032
1033 # Upload the compressed disk image.
1034 upload-stage3: stage3-disk.img.xz
1035         scp $^ tick:public_html/riscv/
1036 stage3-disk.img.xz: stage3-disk.img
1037         rm -f $@
1038         xz --best $^
1039
1040 # Helper which boots stage3 disk image in spike.
1041 boot-stage3-in-spike: stage3-disk.img stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux
1042         spike +disk=stage3-disk.img \
1043             /usr/bin/bbl stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux
1044
1045 # Helper which boots stage3 disk image in qemu.
1046 boot-stage3-in-qemu: stage3-disk.img stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux
1047         qemu-system-riscv -kernel /usr/bin/bbl \
1048             -append ./stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux \
1049             -drive file=stage3-disk.img,format=raw -nographic
1050
1051 # Stage 4
1052
1053 stage4:
1054         echo "XXX TO DO"
1055         exit 1
1056
1057 .NOTPARALLEL: