Cross-compile vim into stage3 chroot because I'm sick of nano :-)
[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 mpc-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/rpm \
318         stage3-chroot/usr/bin/xz \
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         PATH=$(ROOT)/fixed-gcc:$$PATH \
533         ../configure \
534             --host=riscv64-unknown-linux-gnu \
535             --prefix=/usr --libdir=/usr/lib64 \
536             --enable-shared \
537             --enable-tls \
538             --enable-languages=c,c++ \
539             --disable-libmudflap \
540             --disable-libssp \
541             --disable-libquadmath \
542             --disable-nls \
543             --disable-multilib
544         cd riscv-gcc-riscv-gcc-$(GCC_X_VERSION)/build && PATH=$(ROOT)/fixed-gcc:$$PATH make
545         cd riscv-gcc-riscv-gcc-$(GCC_X_VERSION)/build && make install DESTDIR=$(ROOT)/stage3-chroot
546         rm -f stage3-chroot/usr/lib64/*.la
547
548 gcc-$(GCC_X_VERSION).tar.gz:
549         rm -f $@ $@-t
550         wget -O $@-t https://github.com/riscv/riscv-gcc/archive/riscv-gcc-$(GCC_X_VERSION).tar.gz
551         mv $@-t $@
552
553 # Cross-compile util-linux.
554 stage3-chroot/usr/bin/mount: util-linux-$(UTIL_LINUX_VERSION).tar.xz
555         rm -rf util-linux-$(UTIL_LINUX_VERSION)
556         tar -Jxf $^
557         cd util-linux-$(UTIL_LINUX_VERSION) && \
558         PATH=$(ROOT)/fixed-gcc:$$PATH \
559         LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
560         ./configure \
561             --host=riscv64-unknown-linux-gnu \
562             --prefix=/usr --libdir=/usr/lib64 \
563             --without-python \
564             --without-systemd \
565             --disable-makeinstall-chown \
566             --enable-static-programs=mount
567         cd util-linux-$(UTIL_LINUX_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
568         cd util-linux-$(UTIL_LINUX_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make install DESTDIR=$(ROOT)/stage3-chroot
569         rm -f stage3-chroot/usr/lib64/*.la
570
571 util-linux-$(UTIL_LINUX_VERSION).tar.xz:
572         rm -f $@ $@-t
573         wget -O $@-t ftp://ftp.kernel.org/pub/linux/utils/util-linux/v$(UTIL_LINUX_VERSION)/util-linux-$(UTIL_LINUX_VERSION).tar.xz
574         mv $@-t $@
575
576 # Cross-compile GNU tar.
577 stage3-chroot/usr/bin/tar: tar-$(TAR_VERSION).tar.xz
578         rm -rf tar-$(TAR_VERSION)
579         tar -Jxf $^
580         cd tar-$(TAR_VERSION) && \
581         PATH=$(ROOT)/fixed-gcc:$$PATH \
582         ./configure \
583             --host=riscv64-unknown-linux-gnu \
584             --prefix=/usr --libdir=/usr/lib64
585         cd tar-$(TAR_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
586         cd tar-$(TAR_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
587
588 tar-$(TAR_VERSION).tar.xz:
589         rm -f $@ $@-t
590         wget -O $@-t https://ftp.gnu.org/gnu/tar/tar-$(TAR_VERSION).tar.xz
591         mv $@-t $@
592
593 # Cross-compile GNU gzip.
594 stage3-chroot/usr/bin/gzip: gzip-$(GZIP_VERSION).tar.gz
595         rm -rf gzip-$(GZIP_VERSION)
596         tar -zxf $^
597         cd gzip-$(GZIP_VERSION) && \
598         PATH=$(ROOT)/fixed-gcc:$$PATH \
599         ./configure \
600             --host=riscv64-unknown-linux-gnu \
601             --prefix=/usr --libdir=/usr/lib64
602         cd gzip-$(GZIP_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
603         cd gzip-$(GZIP_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
604
605 gzip-$(GZIP_VERSION).tar.gz:
606         rm -f $@ $@-t
607         wget -O $@-t https://ftp.gnu.org/gnu/gzip/gzip-$(GZIP_VERSION).tar.gz
608         mv $@-t $@
609
610 # Cross-compile zlib.
611 stage3-chroot/usr/lib64/libz.so: zlib-$(ZLIB_VERSION).tar.gz
612         rm -rf zlib-$(ZLIB_VERSION)
613         tar -zxf $^
614         cd zlib-$(ZLIB_VERSION) && \
615         PATH=$(ROOT)/fixed-gcc:$$PATH \
616         CC=riscv64-unknown-linux-gnu-gcc \
617         CFLAGS="-I$(ROOT)/stage3-chroot/usr/include -L$(ROOT)/stage3-chroot/usr/lib" \
618         ./configure \
619             --prefix=/usr --libdir=/usr/lib64
620         cd zlib-$(ZLIB_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make shared
621         cd zlib-$(ZLIB_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
622
623 zlib-$(ZLIB_VERSION).tar.gz:
624         rm -f $@ $@-t
625         wget -O $@-t http://zlib.net/zlib-$(ZLIB_VERSION).tar.gz
626         mv $@-t $@
627
628 # Cross-compile file/libmagic.
629 stage3-chroot/usr/bin/file: file-$(FILE_VERSION).tar.gz
630         rm -rf file-$(FILE_VERSION)
631         tar -zxf $^
632         cd file-$(FILE_VERSION) && \
633         PATH=$(ROOT)/fixed-gcc:$$PATH \
634         LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
635         ./configure \
636             --host=riscv64-unknown-linux-gnu \
637             --prefix=/usr --libdir=/usr/lib64 \
638             --disable-static --enable-shared
639         cd file-$(FILE_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make V=1
640         cd file-$(FILE_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
641         rm -f stage3-chroot/usr/lib64/*.la
642
643 file-$(FILE_VERSION).tar.gz:
644         rm -f $@ $@-t
645         wget -O $@-t ftp://ftp.astron.com/pub/file/file-$(FILE_VERSION).tar.gz
646         mv $@-t $@
647
648 # Cross-compile popt.
649 stage3-chroot/usr/lib64/libpopt.so: popt-$(POPT_VERSION).tar.gz
650         rm -rf popt-$(POPT_VERSION)
651         tar -zxf $^
652         cd popt-$(POPT_VERSION) && \
653         PATH=$(ROOT)/fixed-gcc:$$PATH \
654         LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
655         ./configure \
656             --host=riscv64-unknown-linux-gnu \
657             --prefix=/usr --libdir=/usr/lib64 \
658             --disable-static --enable-shared
659         cd popt-$(POPT_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make V=1
660         cd popt-$(POPT_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
661         rm -f stage3-chroot/usr/lib64/*.la
662
663 popt-$(POPT_VERSION).tar.gz:
664         rm -f $@ $@-t
665         wget -O $@-t http://rpm5.org/files/popt/popt-$(POPT_VERSION).tar.gz
666         mv $@-t $@
667
668 # Cross-compile beecrypt.
669 stage3-chroot/usr/lib64/libbeecrypt.so: beecrypt-$(BEECRYPT_VERSION).tar.gz
670         rm -rf beecrypt-$(BEECRYPT_VERSION)
671         tar -zxf $^
672         cd beecrypt-$(BEECRYPT_VERSION) && patch -p0 < ../beecrypt-disable-cplusplus.patch
673         cd beecrypt-$(BEECRYPT_VERSION) && autoreconf -i
674         cd beecrypt-$(BEECRYPT_VERSION) && \
675         PATH=$(ROOT)/fixed-gcc:$$PATH \
676         LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
677         ./configure \
678             --host=riscv64-unknown-linux-gnu \
679             --prefix=/usr --libdir=/usr/lib64 \
680             --without-cplusplus \
681             --without-java \
682             --disable-openmp \
683             --disable-static \
684             --enable-shared
685         cd beecrypt-$(BEECRYPT_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make V=1
686         cd beecrypt-$(BEECRYPT_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make install DESTDIR=$(ROOT)/stage3-chroot V=1
687         chrpath -d stage3-chroot/usr/lib64/libbeecrypt.so.*
688         rm -f stage3-chroot/usr/lib64/*.la
689
690 beecrypt-$(BEECRYPT_VERSION).tar.gz:
691         rm -f $@ $@-t
692         wget -O $@-t http://downloads.sourceforge.net/sourceforge/beecrypt/beecrypt-$(BEECRYPT_VERSION).tar.gz
693         mv $@-t $@
694
695 # Cross-compile GNU nano (editor).
696 stage3-chroot/usr/bin/nano: nano-$(NANO_VERSION).tar.gz
697         rm -rf nano-$(NANO_VERSION)
698         tar -zxf $^
699         cd nano-$(NANO_VERSION) && \
700         PATH=$(ROOT)/fixed-gcc:$$PATH \
701         LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
702         ./configure \
703             --host=riscv64-unknown-linux-gnu \
704             --prefix=/usr --libdir=/usr/lib64
705         cd nano-$(NANO_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
706         cd nano-$(NANO_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
707
708 nano-$(NANO_VERSION).tar.gz:
709         rm -f $@ $@-t
710         wget -O $@-t https://www.nano-editor.org/dist/v2.6/nano-$(NANO_VERSION).tar.gz
711         mv $@-t $@
712
713 # Cross-compile GNU grep.
714 stage3-chroot/usr/bin/grep: grep-$(GREP_VERSION).tar.xz
715         rm -rf grep-$(GREP_VERSION)
716         tar -Jxf $^
717         cd grep-$(GREP_VERSION) && \
718         PATH=$(ROOT)/fixed-gcc:$$PATH \
719         ./configure \
720             --host=riscv64-unknown-linux-gnu \
721             --prefix=/usr --libdir=/usr/lib64
722         cd grep-$(GREP_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
723         cd grep-$(GREP_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
724
725 grep-$(GREP_VERSION).tar.xz:
726         rm -f $@ $@-t
727         wget -O $@-t https://ftp.gnu.org/gnu/grep/grep-$(GREP_VERSION).tar.xz
728         mv $@-t $@
729
730 # Cross-compile less.
731 stage3-chroot/usr/bin/less: less-$(LESS_VERSION).tar.gz
732         rm -rf less-$(LESS_VERSION)
733         tar -zxf $^
734         cd less-$(LESS_VERSION) && \
735         PATH=$(ROOT)/fixed-gcc:$$PATH \
736         LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
737         ./configure \
738             --host=riscv64-unknown-linux-gnu \
739             --prefix=/usr --libdir=/usr/lib64
740         cd less-$(LESS_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
741         cd less-$(LESS_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
742
743 less-$(LESS_VERSION).tar.gz:
744         rm -f $@ $@-t
745         wget -O $@-t http://www.greenwoodsoftware.com/less/less-$(LESS_VERSION).tar.gz
746         mv $@-t $@
747
748 # Cross-compile strace.
749 # XXX This does not work.
750 stage3-chroot/usr/bin/strace: strace-$(STRACE_SHORT_COMMIT).tar.gz
751         rm -rf strace-$(STRACE_SHORT_COMMIT)
752         tar -zxf $^
753         cd riscv-strace-$(STRACE_COMMIT) && patch -p1 < ../0001-Update-riscv_regs-for-ptrace.h-from-Linux-4.1.x.patch
754         cd riscv-strace-$(STRACE_COMMIT) && \
755         PATH=$(ROOT)/fixed-gcc:$$PATH \
756         LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
757         ./configure \
758             --host=riscv64-unknown-linux-gnu \
759             --prefix=/usr --libdir=/usr/lib64
760         cd riscv-strace-$(STRACE_COMMIT) && PATH=$(ROOT)/fixed-gcc:$$PATH make
761         cd riscv-strace-$(STRACE_COMMIT) && make install DESTDIR=$(ROOT)/stage3-chroot
762
763 strace-$(STRACE_SHORT_COMMIT).tar.gz:
764         rm -f $@ $@-t
765         wget -O $@-t 'https://github.com/riscv/riscv-strace/archive/$(STRACE_COMMIT)/riscv-strace-$(STRACE_SHORTCOMMIT).tar.gz'
766         mv $@-t $@
767
768 # Cross-compile bzip2.
769 stage3-chroot/usr/bin/bzip2: bzip2-$(BZIP2_VERSION).tar.gz
770         rm -rf bzip2-$(BZIP2_VERSION)
771         tar -zxf $^
772         cd bzip2-$(BZIP2_VERSION) && \
773         PATH=$(ROOT)/fixed-gcc:$$PATH \
774         make libbz2.a bzip2 bzip2recover \
775         PREFIX=/usr \
776         CC=riscv64-unknown-linux-gnu-gcc \
777         AR=riscv64-unknown-linux-gnu-ar \
778         RANLIB=riscv64-unknown-linux-gnu-ranlib \
779         CFLAGS="-Wall -Winline -O2 -g -D_FILE_OFFSET_BITS=64 -fPIC"
780         cd bzip2-$(BZIP2_VERSION) && \
781         make install PREFIX=$(ROOT)/stage3-chroot/usr
782
783 bzip2-$(BZIP2_VERSION).tar.gz:
784         rm -f $@ $@-t
785         wget -O $@-t http://www.bzip.org/1.0.6/bzip2-$(BZIP2_VERSION).tar.gz
786         mv $@-t $@
787
788 # Cross-compile GNU make.
789 stage3-chroot/usr/bin/make: make-$(MAKE_VERSION).tar.gz
790         rm -rf make-$(MAKE_VERSION)
791         tar -zxf $^
792         cd make-$(MAKE_VERSION) && \
793         PATH=$(ROOT)/fixed-gcc:$$PATH \
794         ./configure \
795             --host=riscv64-unknown-linux-gnu \
796             --prefix=/usr --libdir=/usr/lib64
797         cd make-$(MAKE_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
798         cd make-$(MAKE_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
799
800 make-$(MAKE_VERSION).tar.gz:
801         rm -f $@ $@-t
802         wget -O $@-t https://ftp.gnu.org/gnu/make/make-$(MAKE_VERSION).tar.gz
803         mv $@-t $@
804
805 # Cross-compile GNU diffutils.
806 stage3-chroot/usr/bin/diff: diffutils-$(DIFFUTILS_VERSION).tar.xz
807         rm -rf diffutils-$(DIFFUTILS_VERSION)
808         tar -Jxf $^
809         cd diffutils-$(DIFFUTILS_VERSION) && \
810         PATH=$(ROOT)/fixed-gcc:$$PATH \
811         ./configure \
812             --host=riscv64-unknown-linux-gnu \
813             --prefix=/usr --libdir=/usr/lib64
814         cd diffutils-$(DIFFUTILS_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
815         cd diffutils-$(DIFFUTILS_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
816
817 diffutils-$(DIFFUTILS_VERSION).tar.xz:
818         rm -f $@ $@-t
819         wget -O $@-t https://ftp.gnu.org/gnu/diffutils/diffutils-$(DIFFUTILS_VERSION).tar.xz
820         mv $@-t $@
821
822 # Cross-compile GNU findutils.
823 stage3-chroot/usr/bin/find: findutils-$(FINDUTILS_VERSION).tar.gz
824         rm -rf findutils-$(FINDUTILS_VERSION)
825         tar -zxf $^
826         cd findutils-$(FINDUTILS_VERSION) && \
827         PATH=$(ROOT)/fixed-gcc:$$PATH \
828         ./configure \
829             --host=riscv64-unknown-linux-gnu \
830             --prefix=/usr --libdir=/usr/lib64
831         cd findutils-$(FINDUTILS_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
832         cd findutils-$(FINDUTILS_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
833
834 findutils-$(FINDUTILS_VERSION).tar.gz:
835         rm -f $@ $@-t
836         wget -O $@-t https://ftp.gnu.org/gnu/findutils/findutils-$(FINDUTILS_VERSION).tar.gz
837         mv $@-t $@
838
839 # Cross-compile GNU sed.
840 stage3-chroot/usr/bin/sed: sed-$(SED_VERSION).tar.gz
841         rm -rf sed-$(SED_VERSION)
842         tar -zxf $^
843         cd sed-$(SED_VERSION) && \
844         PATH=$(ROOT)/fixed-gcc:$$PATH \
845         ./configure \
846             --host=riscv64-unknown-linux-gnu \
847             --prefix=/usr --libdir=/usr/lib64
848         cd sed-$(SED_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
849         cd sed-$(SED_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
850
851 sed-$(SED_VERSION).tar.gz:
852         rm -f $@ $@-t
853         wget -O $@-t https://ftp.gnu.org/gnu/sed/sed-$(SED_VERSION).tar.gz
854         mv $@-t $@
855
856 # Cross-compile patch.
857 stage3-chroot/usr/bin/patch: patch-$(PATCH_VERSION).tar.gz
858         rm -rf patch-$(PATCH_VERSION)
859         tar -zxf $^
860         cd patch-$(PATCH_VERSION) && \
861         PATH=$(ROOT)/fixed-gcc:$$PATH \
862         ./configure \
863             --host=riscv64-unknown-linux-gnu \
864             --prefix=/usr --libdir=/usr/lib64
865         cd patch-$(PATCH_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
866         cd patch-$(PATCH_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
867
868 patch-$(PATCH_VERSION).tar.gz:
869         rm -f $@ $@-t
870         wget -O $@-t https://ftp.gnu.org/gnu/patch/patch-$(PATCH_VERSION).tar.gz
871         mv $@-t $@
872
873 # Cross-compile hostname.
874 stage3-chroot/usr/bin/hostname: hostname-$(HOSTNAME_VERSION).tar.gz
875         rm -rf hostname-$(HOSTNAME_VERSION)
876         tar -zxf $^
877         cd hostname && patch -p1 < ../hostname-rh.patch
878         cd hostname && \
879         PATH=$(ROOT)/fixed-gcc:$$PATH \
880         make \
881         CC=riscv64-unknown-linux-gnu-gcc \
882         CFLAGS="-O2 -g"
883         cd hostname && make install BASEDIR=$(ROOT)/stage3-chroot
884
885 hostname-$(HOSTNAME_VERSION).tar.gz:
886         rm -f $@ $@-t
887         wget -O $@-t http://ftp.de.debian.org/debian/pool/main/h/hostname/hostname_$(HOSTNAME_VERSION).tar.gz
888         mv $@-t $@
889
890 # Cross-compile GNU gettext.
891 stage3-chroot/usr/bin/gettext: gettext-$(GETTEXT_VERSION).tar.gz
892         rm -rf gettext-$(GETTEXT_VERSION)
893         tar -zxf $^
894         cd gettext-$(GETTEXT_VERSION) && \
895         PATH=$(ROOT)/fixed-gcc:$$PATH \
896         ./configure \
897             --host=riscv64-unknown-linux-gnu \
898             --prefix=/usr --libdir=/usr/lib64
899         cd gettext-$(GETTEXT_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
900         cd gettext-$(GETTEXT_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make install DESTDIR=$(ROOT)/stage3-chroot
901         rm -f stage3-chroot/usr/lib64/*.la
902
903 gettext-$(GETTEXT_VERSION).tar.gz:
904         rm -f $@ $@-t
905         wget -O $@-t https://ftp.gnu.org/gnu/gettext/gettext-$(GETTEXT_VERSION).tar.gz
906         mv $@-t $@
907
908 # Cross-compile lua.
909 stage3-chroot/usr/bin/lua: lua-$(LUA_VERSION).tar.gz
910         rm -rf lua-$(LUA_VERSION)
911         tar -zxf $^
912         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"
913         cd lua-$(LUA_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make install INSTALL_TOP=$(ROOT)/stage3-chroot/usr INSTALL_LIB=$(ROOT)/stage3-chroot/usr/lib64
914
915 lua-$(LUA_VERSION).tar.gz:
916         rm -f $@ $@-t
917         wget -O $@-t https://www.lua.org/ftp/lua-$(LUA_VERSION).tar.gz
918         mv $@-t $@
919
920 # Cross-compile xz.
921 stage3-chroot/usr/bin/xz: xz-$(XZ_VERSION).tar.gz
922         rm -rf xz-$(XZ_VERSION)
923         tar -zxf $^
924         cd xz-$(XZ_VERSION) && \
925         PATH=$(ROOT)/fixed-gcc:$$PATH \
926         ./configure \
927             --host=riscv64-unknown-linux-gnu \
928             --prefix=/usr --libdir=/usr/lib64
929         cd xz-$(XZ_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
930         cd xz-$(XZ_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make install DESTDIR=$(ROOT)/stage3-chroot
931         rm -f stage3-chroot/usr/lib64/*.la
932
933 xz-$(XZ_VERSION).tar.gz:
934         rm -f $@ $@-t
935         wget -O $@-t http://tukaani.org/xz/xz-$(XZ_VERSION).tar.gz
936         mv $@-t $@
937
938 # Cross-compile GNU awk.
939 stage3-chroot/usr/bin/gawk: gawk-$(GAWK_VERSION).tar.gz
940         rm -rf gawk-$(GAWK_VERSION)
941         tar -zxf $^
942         cd gawk-$(GAWK_VERSION) && \
943         PATH=$(ROOT)/fixed-gcc:$$PATH \
944         ./configure \
945             --host=riscv64-unknown-linux-gnu \
946             --prefix=/usr --libdir=/usr/lib64
947         cd gawk-$(GAWK_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
948         cd gawk-$(GAWK_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
949
950 gawk-$(GAWK_VERSION).tar.gz:
951         rm -f $@ $@-t
952         wget -O $@-t https://ftp.gnu.org/gnu/gawk/gawk-$(GAWK_VERSION).tar.gz
953         mv $@-t $@
954
955 # Cross-compile vim.
956 stage3-chroot/usr/bin/vim: vim-$(VIM_VERSION).tar.gz
957         rm -rf vim-$(VIM_VERSION)
958         bzcat $^ | tar xf -
959         cd vim74/src && \
960         PATH=$(ROOT)/fixed-gcc:$$PATH \
961         vim_cv_memmove_handles_overlap=yes \
962         vim_cv_stat_ignores_slash=no \
963         vim_cv_getcwd_broken=no \
964         vim_cv_tty_group=world \
965         vim_cv_terminfo=yes \
966         vim_cv_toupper_broken=no \
967         LDFLAGS=-L/home/rjones/d/fedora-riscv/stage3-chroot/usr/lib64 \
968         ./configure \
969             --host=riscv64-unknown-linux-gnu \
970             --prefix=/usr --libdir=/usr/lib64 \
971             --with-tlib=tinfo
972         cd vim74/src && PATH=$(ROOT)/fixed-gcc:$$PATH make
973         cd vim74/src && make install DESTDIR=$(ROOT)/stage3-chroot STRIP=riscv64-unknown-linux-gnu-strip
974
975 vim-$(VIM_VERSION).tar.gz:
976         rm -f $@ $@-t
977         wget -O $@-t ftp://ftp.vim.org/pub/vim/unix/vim-$(VIM_VERSION).tar.bz2
978         mv $@-t $@
979
980 # Cross-compile RPM / rpmbuild.
981 # We build this from a git commit, with a few hacks to the configure
982 # script.
983 stage3-chroot/usr/bin/rpm: rpm-$(RPM_SHORT_COMMIT).tar.gz db-$(BDB_VERSION).tar.gz
984         rm -rf rpm-$(RPM_SHORT_COMMIT)
985         tar -zxf rpm-$(RPM_SHORT_COMMIT).tar.gz
986         tar -zxf db-$(BDB_VERSION).tar.gz -C rpm-$(RPM_SHORT_COMMIT)
987         cd rpm-$(RPM_SHORT_COMMIT) && ln -s db-$(BDB_VERSION) db
988         cd rpm-$(RPM_SHORT_COMMIT) && \
989         patch -p1 < ../0001-RISCV-64-bit-riscv64-support.patch && \
990         patch -p1 < ../0002-rpmrc-Convert-uname.machine-riscv-to-riscv32-riscv64.patch && \
991         patch -p1 < ../0003-build-fgetc-returns-int-not-char.patch && \
992         patch -p1 < ../0004-HACKS-TO-GET-RPM-TO-CROSS-COMPILE.patch
993         cd rpm-$(RPM_SHORT_COMMIT) && autoreconf -i
994         cd rpm-$(RPM_SHORT_COMMIT) && \
995         PATH=$(ROOT)/fixed-gcc:$$PATH \
996         LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
997         ./configure \
998             --host=riscv64-unknown-linux-gnu \
999             --prefix=/usr --libdir=/usr/lib64 \
1000             --disable-rpath \
1001             --with-vendor=redhat \
1002             --without-libarchive \
1003             --with-lua \
1004             --with-beecrypt \
1005             --without-archive \
1006             --without-external-db \
1007             --enable-ndb \
1008             --disable-plugins
1009         cd rpm-$(RPM_SHORT_COMMIT) && PATH=$(ROOT)/fixed-gcc:$$PATH make V=1
1010         cd rpm-$(RPM_SHORT_COMMIT) && PATH=$(ROOT)/fixed-gcc:$$PATH make install DESTDIR=$(ROOT)/stage3-chroot
1011         rm -f stage3-chroot/usr/lib64/*.la
1012
1013 rpm-$(RPM_SHORT_COMMIT).tar.gz:
1014         rm -f $@ $@-t
1015         wget -O $@-t 'http://rpm.org/gitweb?p=rpm.git;a=snapshot;h=$(RPM_COMMIT);sf=tgz'
1016         mv $@-t $@
1017
1018 db-$(BDB_VERSION).tar.gz:
1019         rm -f $@ $@-t
1020         wget -O $@-t http://download.oracle.com/berkeley-db/db-$(BDB_VERSION).tar.gz
1021         mv $@-t $@
1022
1023 # Create an /init script.
1024 stage3-chroot/init: init.sh
1025         install -m 0755 $^ $@
1026
1027 # Create the stage3 disk image.
1028 # Note `-s +...' adds spare space to the disk image.
1029 stage3-disk.img: stage3-chroot
1030         cd stage3-chroot && virt-make-fs . ../$@ -t ext2 -F raw -s +4G
1031
1032 # Upload the compressed disk image.
1033 upload-stage3: stage3-disk.img.xz
1034         scp $^ tick:public_html/riscv/
1035 stage3-disk.img.xz: stage3-disk.img
1036         rm -f $@
1037         xz --best $^
1038
1039 # Helper which boots stage3 disk image in spike.
1040 boot-stage3-in-spike: stage3-disk.img stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux
1041         spike +disk=stage3-disk.img \
1042             /usr/bin/bbl stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux
1043
1044 # Helper which boots stage3 disk image in qemu.
1045 boot-stage3-in-qemu: stage3-disk.img stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux
1046         qemu-system-riscv -kernel /usr/bin/bbl \
1047             -append ./stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux \
1048             -drive file=stage3-disk.img,format=raw -nographic
1049
1050 # Stage 4
1051
1052 stage4:
1053         echo "XXX TO DO"
1054         exit 1
1055
1056 .NOTPARALLEL: