1 # Refer to the README file to understand how Fedora on RISC-V is
4 # Absolute path to the current directory.
7 # Note these are chosen very specifically to ensure the different
8 # versions work together. Don't blindly update to the latest
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
22 # For the correct versions, see
23 # riscv-gnu-toolchain/Makefile.in *_version variables
24 BINUTILS_VERSION = 2.25.1
27 NEWLIB_VERSION = 2.2.0
29 # See linux-4.1.y-riscv branch of
30 # https://github.com/riscv/riscv-linux
31 KERNEL_VERSION = 4.1.26
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
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
48 # Versions of cross-compiled packages.
49 NCURSES_VERSION = 6.0-20160730
50 READLINE_VERSION = 6.3
52 COREUTILS_VERSION = 8.25
56 BINUTILS_X_VERSION = 2.26
58 UTIL_LINUX_VERSION = 2.28
62 # Needs to match the version of 'file' installed (on host), otherwise:
63 # "Cannot use the installed version of file (xx) to cross-compile file yy"
64 # Also note that 5.25 is definitely broken (segfaults in libmagic:magic_close).
67 BEECRYPT_VERSION = 4.2.1
68 RPM_COMMIT = 95712183458748ea6cafebac1bdd5daa097d9bee
69 RPM_SHORT_COMMIT = 9571218
74 STRACE_COMMIT = f320e1897832fd07a62e18ed288e75d8e79f4c5b
75 STRACE_SHORT_COMMIT = f320e189
78 DIFFUTILS_VERSION = 3.4
79 FINDUTILS_VERSION = 4.6.0
82 HOSTNAME_VERSION = 3.15
83 GETTEXT_VERSION = 0.19
88 all: stage1 stage2 stage3 stage4
92 stage1: stage1-riscv-qemu/riscv-qemu-$(RISCV_QEMU_SHORTCOMMIT).tar.gz \
93 stage1-riscv-qemu/riscv-qemu.spec \
94 stamp-riscv-qemu-installed \
95 stage1-riscv-fesvr/riscv-fesvr-$(RISCV_FESVR_SHORTCOMMIT).tar.gz \
96 stage1-riscv-fesvr/riscv-fesvr.spec \
97 stamp-riscv-fesvr-installed \
98 stage1-riscv-isa-sim/riscv-isa-sim-$(RISCV_ISA_SIM_SHORTCOMMIT).tar.gz \
99 stage1-riscv-isa-sim/riscv-isa-sim.spec \
100 stamp-riscv-isa-sim-installed
102 stage1-riscv-qemu/riscv-qemu-$(RISCV_QEMU_SHORTCOMMIT).tar.gz:
104 wget -O $@-t 'https://github.com/riscv/riscv-qemu/archive/$(RISCV_QEMU_COMMIT)/riscv-qemu-$(RISCV_QEMU_SHORTCOMMIT).tar.gz'
107 stage1-riscv-qemu/riscv-qemu.spec: stage1-riscv-qemu/riscv-qemu.spec.in
108 sed -e 's/@COMMIT@/$(RISCV_QEMU_COMMIT)/g' \
109 -e 's/@SHORTCOMMIT@/$(RISCV_QEMU_SHORTCOMMIT)/g' \
113 stamp-riscv-qemu-installed:
115 @rpm -q riscv-qemu >/dev/null || { \
116 echo "ERROR: You must install riscv-qemu:"; \
118 echo " dnf copr enable rjones/riscv"; \
119 echo " dnf install riscv-qemu"; \
121 echo "OR: you can build it yourself from the stage1-riscv-qemu directory."; \
125 @qemu-system-riscv --version || { \
126 echo "ERROR: qemu-system-riscv is not working."; \
127 echo "Make sure you installed the riscv-qemu package."; \
132 stage1-riscv-fesvr/riscv-fesvr-$(RISCV_FESVR_SHORTCOMMIT).tar.gz:
134 wget -O $@-t 'https://github.com/riscv/riscv-fesvr/archive/$(RISCV_FESVR_COMMIT)/riscv-fesvr-$(RISCV_FESVR_SHORTCOMMIT).tar.gz'
137 stage1-riscv-fesvr/riscv-fesvr.spec: stage1-riscv-fesvr/riscv-fesvr.spec.in
138 sed -e 's/@COMMIT@/$(RISCV_FESVR_COMMIT)/g' \
139 -e 's/@SHORTCOMMIT@/$(RISCV_FESVR_SHORTCOMMIT)/g' \
143 stamp-riscv-fesvr-installed:
145 @rpm -q riscv-fesvr >/dev/null || { \
146 echo "ERROR: You must install riscv-fesvr:"; \
148 echo " dnf copr enable rjones/riscv"; \
149 echo " dnf install riscv-fesvr"; \
151 echo "OR: you can build it yourself from the stage1-riscv-fesvr directory."; \
157 stage1-riscv-isa-sim/riscv-isa-sim-$(RISCV_ISA_SIM_SHORTCOMMIT).tar.gz:
159 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 stage1-riscv-isa-sim/riscv-isa-sim.spec: stage1-riscv-isa-sim/riscv-isa-sim.spec.in
163 sed -e 's/@COMMIT@/$(RISCV_ISA_SIM_COMMIT)/g' \
164 -e 's/@SHORTCOMMIT@/$(RISCV_ISA_SIM_SHORTCOMMIT)/g' \
168 stamp-riscv-isa-sim-installed:
170 @rpm -q riscv-isa-sim >/dev/null || { \
171 echo "ERROR: You must install riscv-isa-sim:"; \
173 echo " dnf copr enable rjones/riscv"; \
174 echo " dnf install riscv-isa-sim"; \
176 echo "OR: you can build it yourself from the stage1-riscv-isa-sim directory."; \
184 stage2: stage2-riscv-gnu-toolchain/riscv-gnu-toolchain-$(RISCV_GNU_TOOLCHAIN_SHORTCOMMIT).tar.gz \
185 stage2-riscv-gnu-toolchain/binutils-$(BINUTILS_VERSION).tar.gz \
186 stage2-riscv-gnu-toolchain/gcc-$(GCC_VERSION).tar.gz \
187 stage2-riscv-gnu-toolchain/glibc-$(GLIBC_VERSION).tar.gz \
188 stage2-riscv-gnu-toolchain/newlib-$(NEWLIB_VERSION).tar.gz \
189 stage2-riscv-gnu-toolchain/riscv-gnu-toolchain.spec \
190 stamp-riscv-gnu-toolchain-installed \
191 stage2-riscv-pk/riscv-pk-$(RISCV_PK_SHORTCOMMIT).tar.gz \
192 stage2-riscv-pk/riscv-pk.spec \
193 stamp-riscv-pk-installed
195 stage2-riscv-gnu-toolchain/riscv-gnu-toolchain-$(RISCV_GNU_TOOLCHAIN_SHORTCOMMIT).tar.gz:
197 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 stage2-riscv-gnu-toolchain/binutils-$(BINUTILS_VERSION).tar.gz:
202 wget -O $@-t http://mirrors.kernel.org/gnu/binutils/binutils-$(BINUTILS_VERSION).tar.gz
205 # GCC 5 no longer compiles with GCC 6 unless we patch it.
206 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69959
207 stage2-riscv-gnu-toolchain/gcc-$(GCC_VERSION).tar.gz:
209 wget -O $@-t http://mirrors.kernel.org/gnu/gcc/gcc-$(GCC_VERSION)/gcc-$(GCC_VERSION).tar.gz
211 cd gcc-$(GCC_VERSION) && patch -p0 < ../stage2-riscv-gnu-toolchain/gcc-5-fix-compilation-with-gcc-6.patch
212 tar zcf $@-t gcc-$(GCC_VERSION)
213 rm -r gcc-$(GCC_VERSION)
216 stage2-riscv-gnu-toolchain/glibc-$(GLIBC_VERSION).tar.gz:
218 wget -O $@-t http://mirrors.kernel.org/gnu/glibc/glibc-$(GLIBC_VERSION).tar.gz
221 stage2-riscv-gnu-toolchain/newlib-$(NEWLIB_VERSION).tar.gz:
223 wget -O $@-t ftp://sourceware.org/pub/newlib/newlib-$(NEWLIB_VERSION).tar.gz
226 stage2-riscv-gnu-toolchain/riscv-gnu-toolchain.spec: stage2-riscv-gnu-toolchain/riscv-gnu-toolchain.spec.in
227 sed -e 's/@COMMIT@/$(RISCV_GNU_TOOLCHAIN_COMMIT)/g' \
228 -e 's/@SHORTCOMMIT@/$(RISCV_GNU_TOOLCHAIN_SHORTCOMMIT)/g' \
229 -e 's/@BINUTILS_VERSION@/$(BINUTILS_VERSION)/g' \
230 -e 's/@GCC_VERSION@/$(GCC_VERSION)/g' \
231 -e 's/@GLIBC_VERSION@/$(GLIBC_VERSION)/g' \
232 -e 's/@NEWLIB_VERSION@/$(NEWLIB_VERSION)/g' \
236 stamp-riscv-gnu-toolchain-installed:
238 @rpm -q riscv-gnu-toolchain >/dev/null || { \
239 echo "ERROR: You must install riscv-gnu-toolchain:"; \
241 echo " dnf copr enable rjones/riscv"; \
242 echo " dnf install riscv-gnu-toolchain"; \
244 echo "OR: you can build it yourself from the stage2-riscv-gnu-toolchain directory."; \
248 @riscv64-unknown-elf-gcc --version || { \
249 echo "ERROR: riscv64-unknown-elf-gcc (cross compiler) is not working."; \
250 echo "Make sure you installed the riscv-gnu-toolchain package."; \
255 stage2-riscv-pk/riscv-pk-$(RISCV_PK_SHORTCOMMIT).tar.gz:
257 wget -O $@-t https://github.com/lowRISC/riscv-pk/archive/$(RISCV_PK_COMMIT)/riscv-pk-$(RISCV_PK_SHORTCOMMIT).tar.gz
260 stage2-riscv-pk/riscv-pk.spec: stage2-riscv-pk/riscv-pk.spec.in
261 sed -e 's/@COMMIT@/$(RISCV_PK_COMMIT)/g' \
262 -e 's/@SHORTCOMMIT@/$(RISCV_PK_SHORTCOMMIT)/g' \
266 stamp-riscv-pk-installed:
268 @rpm -q riscv-pk >/dev/null || { \
269 echo "ERROR: You must install riscv-pk:"; \
271 echo " dnf copr enable rjones/riscv"; \
272 echo " dnf install riscv-pk"; \
274 echo "OR: you can build it yourself from the stage2-riscv-pk directory."; \
282 stage3: stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux \
283 stage3-chroot-original/etc/fedora-release \
284 stage3-chroot/etc/fedora-release \
285 stage3-chroot/lib64/libc.so.6 \
286 stage3-chroot/usr/bin/tic \
287 stage3-chroot/usr/lib64/libhistory.so.6 \
288 stage3-chroot/bin/bash \
289 stage3-chroot/bin/ls \
290 stage3-chroot/usr/lib64/libgmp.so.10 \
291 stage3-chroot/usr/lib64/libmpfr.so.4 \
292 stage3-chroot/usr/lib64/libmpc.so.3 \
293 stage3-chroot/usr/bin/as \
294 stage3-chroot/usr/bin/gcc \
295 stage3-chroot/usr/bin/mount \
296 stage3-chroot/usr/bin/tar \
297 stage3-chroot/usr/bin/gzip \
298 stage3-chroot/usr/lib64/libz.so \
299 stage3-chroot/usr/bin/file \
300 stage3-chroot/usr/lib64/libpopt.so \
301 stage3-chroot/usr/lib64/libbeecrypt.so \
302 stage3-chroot/usr/bin/nano \
303 stage3-chroot/usr/bin/grep \
304 stage3-chroot/usr/bin/less \
305 stage3-chroot/usr/bin/strace \
306 stage3-chroot/usr/bin/bzip2 \
307 stage3-chroot/usr/bin/make \
308 stage3-chroot/usr/bin/diff \
309 stage3-chroot/usr/bin/find \
310 stage3-chroot/usr/bin/sed \
311 stage3-chroot/usr/bin/patch \
312 stage3-chroot/usr/bin/hostname \
313 stage3-chroot/usr/bin/gettext \
314 stage3-chroot/usr/bin/lua \
315 stage3-chroot/usr/bin/rpm \
316 stage3-chroot/usr/bin/xz \
317 stage3-chroot/usr/bin/gawk \
321 stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux:
322 rm -rf stage3-kernel/linux-$(KERNEL_VERSION)
323 cp -a $(LOCAL_LINUX_GIT_COPY) stage3-kernel/linux-$(KERNEL_VERSION) || { \
324 mkdir stage3-kernel/linux-$(KERNEL_VERSION) && \
325 cd stage3-kernel/linux-$(KERNEL_VERSION) && \
328 cd stage3-kernel/linux-$(KERNEL_VERSION) && \
329 git remote add riscv https://github.com/riscv/riscv-linux && \
331 git checkout -f linux-4.1.y-riscv && \
333 make ARCH=riscv defconfig
334 echo CONFIG_CMDLINE=\"root=/dev/htifblk0 init=/init\" >> stage3-kernel/linux-$(KERNEL_VERSION)/.config
335 echo CONFIG_CROSS_COMPILE=riscv64-unknown-elf- >> stage3-kernel/linux-$(KERNEL_VERSION)/.config
336 cd stage3-kernel/linux-$(KERNEL_VERSION) && \
337 make ARCH=riscv olddefconfig
338 cd stage3-kernel/linux-$(KERNEL_VERSION) && \
339 make ARCH=riscv vmlinux
342 # Build an original (x86-64) chroot using supermin. We then aim to
343 # rebuild (using cross-compiled versions) every ELF binary in this
345 stage3-chroot-original/etc/fedora-release:
346 rm -rf stage3-chroot-original tmp-supermin.d
347 supermin --prepare $(STAGE3_PACKAGES) -o tmp-supermin.d
348 supermin --build -f chroot tmp-supermin.d -o stage3-chroot-original
350 @echo -n "Total files in chroot: "
351 @find stage3-chroot-original -type f | wc -l
352 @echo -n "ELF files to be rebuilt: "
353 @find stage3-chroot-original -type f | xargs file -N | grep -E '\bELF.*LSB\b' | wc -l
355 # Copy the original chroot to the final chroot, remove all the ELF
357 stage3-chroot/etc/fedora-release: stage3-chroot-original/etc/fedora-release
359 cp -a stage3-chroot-original stage3-chroot
360 find stage3-chroot -type d -print0 | xargs -0 chmod u+w
361 find stage3-chroot -type f -print0 | xargs -0 chmod u+w
362 find stage3-chroot -type f -print0 | xargs -0 file -N | grep -E '\bELF.*LSB\b' | awk -F: '{print $$1}' | xargs rm -f
363 rm -f stage3-chroot/lib64/libc.so.6
365 # Copy in compiled glibc from the riscv-gnu-toolchain sysroot. Only
366 # copy files and symlinks, leave the target directory structure
368 stage3-chroot/lib64/libc.so.6:
369 mkdir -p stage3-chroot/usr/lib/audit
370 mkdir -p stage3-chroot/usr/lib/gconv
371 for f in `cd /usr/sysroot && find -type f -o -type l`; do \
372 cp -d /usr/sysroot/$$f stage3-chroot/$$f; \
374 cd stage3-chroot/lib64 && for f in ../lib/*; do ln -sf $$f; done
376 # Cross-compile ncurses.
377 stage3-chroot/usr/bin/tic: ncurses-$(NCURSES_VERSION).tgz
379 cd ncurses-$(NCURSES_VERSION) && \
380 PATH=$(ROOT)/fixed-gcc:$$PATH \
381 ./configure --host=riscv64-unknown-linux-gnu \
382 --prefix=/usr --libdir=/usr/lib64 \
384 --with-termlib=tinfo \
386 cd ncurses-$(NCURSES_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
387 cd ncurses-$(NCURSES_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make install DESTDIR=$(ROOT)/stage3-chroot
389 ncurses-$(NCURSES_VERSION).tgz:
391 wget -O $@-t ftp://invisible-island.net/ncurses/current/ncurses-$(NCURSES_VERSION).tgz
394 # Cross-compile readline.
395 stage3-chroot/usr/lib64/libhistory.so.6: readline-$(READLINE_VERSION).tar.gz
397 cd readline-$(READLINE_VERSION) && \
398 PATH=$(ROOT)/fixed-gcc:$$PATH \
399 bash_cv_wcwidth_broken=no \
400 ./configure --host=riscv64-unknown-linux-gnu \
401 --prefix=/usr --libdir=/usr/lib64
402 cd readline-$(READLINE_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
403 cd readline-$(READLINE_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
404 rm -f stage3-chroot/usr/lib64/*.la
406 readline-$(READLINE_VERSION).tar.gz:
408 wget -O $@-t ftp://ftp.gnu.org/gnu/readline/readline-$(READLINE_VERSION).tar.gz
411 # Cross-compile bash.
412 stage3-chroot/bin/bash: bash-$(BASH_VERSION).tar.gz
414 cd bash-$(BASH_VERSION) && \
415 PATH=$(ROOT)/fixed-gcc:$$PATH \
416 ./configure --host=riscv64-unknown-linux-gnu \
417 --prefix=/usr --libdir=/usr/lib64
418 cd bash-$(BASH_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
419 cd bash-$(BASH_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
421 bash-$(BASH_VERSION).tar.gz:
423 wget -O $@-t ftp://ftp.gnu.org/gnu/bash/bash-$(BASH_VERSION).tar.gz
426 # Cross-compile coreutils. Bleah, coreutils cross-compilation is
427 # known-broken and upstream don't care, hence the 'touch' command.
429 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
431 stage3-chroot/bin/ls: coreutils-$(COREUTILS_VERSION).tar.xz
432 rm -rf coreutils-$(COREUTILS_VERSION)
434 cd coreutils-$(COREUTILS_VERSION) && \
435 PATH=$(ROOT)/fixed-gcc:$$PATH \
436 ./configure --host=riscv64-unknown-linux-gnu \
437 --prefix=/usr --libdir=/usr/lib64
438 -cd coreutils-$(COREUTILS_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
439 cd coreutils-$(COREUTILS_VERSION)/man && \
440 for f in $(COREUTILS_PROGRAMS); do touch $$f.1; done
441 cd coreutils-$(COREUTILS_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
442 cd coreutils-$(COREUTILS_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
444 coreutils-$(COREUTILS_VERSION).tar.xz:
446 wget -O $@-t ftp://ftp.gnu.org/gnu/coreutils/coreutils-$(COREUTILS_VERSION).tar.xz
449 # Cross-compile binutils.
450 stage3-chroot/usr/bin/as: binutils-$(BINUTILS_X_VERSION).tar.gz
451 rm -rf riscv-binutils-gdb-riscv-binutils-$(BINUTILS_X_VERSION)
453 mkdir riscv-binutils-gdb-riscv-binutils-$(BINUTILS_X_VERSION)/build
454 cd riscv-binutils-gdb-riscv-binutils-$(BINUTILS_X_VERSION)/build && \
455 PATH=$(ROOT)/fixed-gcc:$$PATH \
457 --host=riscv64-unknown-linux-gnu \
458 --prefix=/usr --libdir=/usr/lib64
459 cd riscv-binutils-gdb-riscv-binutils-$(BINUTILS_X_VERSION)/build && PATH=$(ROOT)/fixed-gcc:$$PATH make
460 cd riscv-binutils-gdb-riscv-binutils-$(BINUTILS_X_VERSION)/build && make DESTDIR=$(ROOT)/stage3-chroot install
462 binutils-$(BINUTILS_X_VERSION).tar.gz:
464 wget -O $@-t https://github.com/riscv/riscv-binutils-gdb/archive/riscv-binutils-$(BINUTILS_X_VERSION).tar.gz
467 # Cross-compile GMP, MPFR and MPC (deps of GCC).
468 stage3-chroot/usr/lib64/libgmp.so.10: gmp-$(GMP_VERSION).tar.lz
469 rm -rf gmp-$(GMP_VERSION)
470 tar --lzip -xf gmp-$(GMP_VERSION).tar.lz
471 cd gmp-$(GMP_VERSION) && \
472 PATH=$(ROOT)/fixed-gcc:$$PATH \
473 ./configure --host=riscv64-unknown-linux-gnu \
474 --prefix=/usr --libdir=/usr/lib64
475 cd gmp-$(GMP_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
476 cd gmp-$(GMP_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
477 cd stage3-chroot/usr/lib && ln -s ../lib64/libgmp.so
479 gmp-$(GMP_VERSION).tar.lz:
481 wget -O $@-t https://gmplib.org/download/gmp/gmp-$(GMP_VERSION).tar.lz
484 stage3-chroot/usr/lib64/libmpfr.so.4: mpfr-$(MPFR_VERSION).tar.gz
485 rm -rf mpfr-$(MPFR_VERSION)
486 tar -zxf mpfr-$(MPFR_VERSION).tar.gz
487 cd mpfr-$(MPFR_VERSION) && \
488 PATH=$(ROOT)/fixed-gcc:$$PATH \
489 ./configure --host=riscv64-unknown-linux-gnu \
490 --prefix=/usr --libdir=/usr/lib64 \
491 --with-gmp=$(ROOT)/stage3-chroot/usr
492 cd mpfr-$(MPFR_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
493 cd mpfr-$(MPFR_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
494 cd stage3-chroot/usr/lib && ln -s ../lib64/libmpfr.so
495 rm -f stage3-chroot/usr/lib64/*.la
497 mpfr-$(MPFR_VERSION).tar.gz:
499 wget -O $@-t http://www.mpfr.org/mpfr-current/mpfr-$(MPFR_VERSION).tar.gz
502 stage3-chroot/usr/lib64/libmpc.so.3: mpc-$(MPC_VERSION).tar.gz
503 rm -rf mpc-$(MPC_VERSION)
504 tar -zxf mpc-$(MPC_VERSION).tar.gz
505 cd mpc-$(MPC_VERSION) && \
506 PATH=$(ROOT)/fixed-gcc:$$PATH \
507 ./configure --host=riscv64-unknown-linux-gnu \
508 --prefix=/usr --libdir=/usr/lib64 \
509 --with-gmp=$(ROOT)/stage3-chroot/usr \
510 --with-mpfr=$(ROOT)/stage3-chroot/usr
511 cd mpc-$(MPC_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
512 cd mpc-$(MPC_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
513 cd stage3-chroot/usr/lib && ln -s ../lib64/libmpc.so
514 rm -f stage3-chroot/usr/lib64/*.la
516 mpc-$(MPC_VERSION).tar.gz:
518 wget -O $@-t ftp://ftp.gnu.org/gnu/mpc/mpc-$(MPC_VERSION).tar.gz
522 stage3-chroot/usr/bin/gcc: gcc-$(GCC_X_VERSION).tar.gz
523 rm -rf riscv-gcc-riscv-gcc-$(GCC_X_VERSION)
525 cd riscv-gcc-riscv-gcc-$(GCC_X_VERSION) && \
526 patch -p1 < ../0001-HACKS-TO-GET-GCC-TO-COMPILE.patch
527 mkdir riscv-gcc-riscv-gcc-$(GCC_X_VERSION)/build
528 cd riscv-gcc-riscv-gcc-$(GCC_X_VERSION)/build && \
529 PATH=$(ROOT)/fixed-gcc:$$PATH \
531 --host=riscv64-unknown-linux-gnu \
532 --prefix=/usr --libdir=/usr/lib64 \
535 --enable-languages=c,c++ \
536 --disable-libmudflap \
538 --disable-libquadmath \
541 cd riscv-gcc-riscv-gcc-$(GCC_X_VERSION)/build && PATH=$(ROOT)/fixed-gcc:$$PATH make
542 cd riscv-gcc-riscv-gcc-$(GCC_X_VERSION)/build && make install DESTDIR=$(ROOT)/stage3-chroot
543 rm -f stage3-chroot/usr/lib64/*.la
545 gcc-$(GCC_X_VERSION).tar.gz:
547 wget -O $@-t https://github.com/riscv/riscv-gcc/archive/riscv-gcc-$(GCC_X_VERSION).tar.gz
550 # Cross-compile util-linux.
551 stage3-chroot/usr/bin/mount: util-linux-$(UTIL_LINUX_VERSION).tar.xz
552 rm -rf util-linux-$(UTIL_LINUX_VERSION)
554 cd util-linux-$(UTIL_LINUX_VERSION) && \
555 PATH=$(ROOT)/fixed-gcc:$$PATH \
556 LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
558 --host=riscv64-unknown-linux-gnu \
559 --prefix=/usr --libdir=/usr/lib64 \
562 --disable-makeinstall-chown \
563 --enable-static-programs=mount
564 cd util-linux-$(UTIL_LINUX_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
565 cd util-linux-$(UTIL_LINUX_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make install DESTDIR=$(ROOT)/stage3-chroot
566 rm -f stage3-chroot/usr/lib64/*.la
568 util-linux-$(UTIL_LINUX_VERSION).tar.xz:
570 wget -O $@-t ftp://ftp.kernel.org/pub/linux/utils/util-linux/v$(UTIL_LINUX_VERSION)/util-linux-$(UTIL_LINUX_VERSION).tar.xz
573 # Cross-compile GNU tar.
574 stage3-chroot/usr/bin/tar: tar-$(TAR_VERSION).tar.xz
575 rm -rf tar-$(TAR_VERSION)
577 cd tar-$(TAR_VERSION) && \
578 PATH=$(ROOT)/fixed-gcc:$$PATH \
580 --host=riscv64-unknown-linux-gnu \
581 --prefix=/usr --libdir=/usr/lib64
582 cd tar-$(TAR_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
583 cd tar-$(TAR_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
585 tar-$(TAR_VERSION).tar.xz:
587 wget -O $@-t https://ftp.gnu.org/gnu/tar/tar-$(TAR_VERSION).tar.xz
590 # Cross-compile GNU gzip.
591 stage3-chroot/usr/bin/gzip: gzip-$(GZIP_VERSION).tar.gz
592 rm -rf gzip-$(GZIP_VERSION)
594 cd gzip-$(GZIP_VERSION) && \
595 PATH=$(ROOT)/fixed-gcc:$$PATH \
597 --host=riscv64-unknown-linux-gnu \
598 --prefix=/usr --libdir=/usr/lib64
599 cd gzip-$(GZIP_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
600 cd gzip-$(GZIP_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
602 gzip-$(GZIP_VERSION).tar.gz:
604 wget -O $@-t https://ftp.gnu.org/gnu/gzip/gzip-$(GZIP_VERSION).tar.gz
607 # Cross-compile zlib.
608 stage3-chroot/usr/lib64/libz.so: zlib-$(ZLIB_VERSION).tar.gz
609 rm -rf zlib-$(ZLIB_VERSION)
611 cd zlib-$(ZLIB_VERSION) && \
612 PATH=$(ROOT)/fixed-gcc:$$PATH \
613 CC=riscv64-unknown-linux-gnu-gcc \
614 CFLAGS="-I$(ROOT)/stage3-chroot/usr/include -L$(ROOT)/stage3-chroot/usr/lib" \
616 --prefix=/usr --libdir=/usr/lib64
617 cd zlib-$(ZLIB_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make shared
618 cd zlib-$(ZLIB_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
620 zlib-$(ZLIB_VERSION).tar.gz:
622 wget -O $@-t http://zlib.net/zlib-$(ZLIB_VERSION).tar.gz
625 # Cross-compile file/libmagic.
626 stage3-chroot/usr/bin/file: file-$(FILE_VERSION).tar.gz
627 rm -rf file-$(FILE_VERSION)
629 cd file-$(FILE_VERSION) && \
630 PATH=$(ROOT)/fixed-gcc:$$PATH \
631 LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
633 --host=riscv64-unknown-linux-gnu \
634 --prefix=/usr --libdir=/usr/lib64 \
635 --disable-static --enable-shared
636 cd file-$(FILE_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make V=1
637 cd file-$(FILE_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
638 rm -f stage3-chroot/usr/lib64/*.la
640 file-$(FILE_VERSION).tar.gz:
642 wget -O $@-t ftp://ftp.astron.com/pub/file/file-$(FILE_VERSION).tar.gz
645 # Cross-compile popt.
646 stage3-chroot/usr/lib64/libpopt.so: popt-$(POPT_VERSION).tar.gz
647 rm -rf popt-$(POPT_VERSION)
649 cd popt-$(POPT_VERSION) && \
650 PATH=$(ROOT)/fixed-gcc:$$PATH \
651 LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
653 --host=riscv64-unknown-linux-gnu \
654 --prefix=/usr --libdir=/usr/lib64 \
655 --disable-static --enable-shared
656 cd popt-$(POPT_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make V=1
657 cd popt-$(POPT_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
658 rm -f stage3-chroot/usr/lib64/*.la
660 popt-$(POPT_VERSION).tar.gz:
662 wget -O $@-t http://rpm5.org/files/popt/popt-$(POPT_VERSION).tar.gz
665 # Cross-compile beecrypt.
666 stage3-chroot/usr/lib64/libbeecrypt.so: beecrypt-$(BEECRYPT_VERSION).tar.gz
667 rm -rf beecrypt-$(BEECRYPT_VERSION)
669 cd beecrypt-$(BEECRYPT_VERSION) && patch -p0 < ../beecrypt-disable-cplusplus.patch
670 cd beecrypt-$(BEECRYPT_VERSION) && autoreconf -i
671 cd beecrypt-$(BEECRYPT_VERSION) && \
672 PATH=$(ROOT)/fixed-gcc:$$PATH \
673 LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
675 --host=riscv64-unknown-linux-gnu \
676 --prefix=/usr --libdir=/usr/lib64 \
677 --without-cplusplus \
682 cd beecrypt-$(BEECRYPT_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make V=1
683 cd beecrypt-$(BEECRYPT_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make install DESTDIR=$(ROOT)/stage3-chroot V=1
684 chrpath -d stage3-chroot/usr/lib64/libbeecrypt.so.*
685 rm -f stage3-chroot/usr/lib64/*.la
687 beecrypt-$(BEECRYPT_VERSION).tar.gz:
689 wget -O $@-t http://downloads.sourceforge.net/sourceforge/beecrypt/beecrypt-$(BEECRYPT_VERSION).tar.gz
692 # Cross-compile GNU nano (editor).
693 stage3-chroot/usr/bin/nano: nano-$(NANO_VERSION).tar.gz
694 rm -rf nano-$(NANO_VERSION)
696 cd nano-$(NANO_VERSION) && \
697 PATH=$(ROOT)/fixed-gcc:$$PATH \
698 LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
700 --host=riscv64-unknown-linux-gnu \
701 --prefix=/usr --libdir=/usr/lib64
702 cd nano-$(NANO_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
703 cd nano-$(NANO_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
705 nano-$(NANO_VERSION).tar.gz:
707 wget -O $@-t https://www.nano-editor.org/dist/v2.6/nano-$(NANO_VERSION).tar.gz
710 # Cross-compile GNU grep.
711 stage3-chroot/usr/bin/grep: grep-$(GREP_VERSION).tar.xz
712 rm -rf grep-$(GREP_VERSION)
714 cd grep-$(GREP_VERSION) && \
715 PATH=$(ROOT)/fixed-gcc:$$PATH \
717 --host=riscv64-unknown-linux-gnu \
718 --prefix=/usr --libdir=/usr/lib64
719 cd grep-$(GREP_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
720 cd grep-$(GREP_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
722 grep-$(GREP_VERSION).tar.xz:
724 wget -O $@-t https://ftp.gnu.org/gnu/grep/grep-$(GREP_VERSION).tar.xz
727 # Cross-compile less.
728 stage3-chroot/usr/bin/less: less-$(LESS_VERSION).tar.gz
729 rm -rf less-$(LESS_VERSION)
731 cd less-$(LESS_VERSION) && \
732 PATH=$(ROOT)/fixed-gcc:$$PATH \
733 LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
735 --host=riscv64-unknown-linux-gnu \
736 --prefix=/usr --libdir=/usr/lib64
737 cd less-$(LESS_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
738 cd less-$(LESS_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
740 less-$(LESS_VERSION).tar.gz:
742 wget -O $@-t http://www.greenwoodsoftware.com/less/less-$(LESS_VERSION).tar.gz
745 # Cross-compile strace.
746 # XXX This does not work.
747 stage3-chroot/usr/bin/strace: strace-$(STRACE_SHORT_COMMIT).tar.gz
748 rm -rf strace-$(STRACE_SHORT_COMMIT)
750 cd riscv-strace-$(STRACE_COMMIT) && patch -p1 < ../0001-Update-riscv_regs-for-ptrace.h-from-Linux-4.1.x.patch
751 cd riscv-strace-$(STRACE_COMMIT) && \
752 PATH=$(ROOT)/fixed-gcc:$$PATH \
753 LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
755 --host=riscv64-unknown-linux-gnu \
756 --prefix=/usr --libdir=/usr/lib64
757 cd riscv-strace-$(STRACE_COMMIT) && PATH=$(ROOT)/fixed-gcc:$$PATH make
758 cd riscv-strace-$(STRACE_COMMIT) && make install DESTDIR=$(ROOT)/stage3-chroot
760 strace-$(STRACE_SHORT_COMMIT).tar.gz:
762 wget -O $@-t 'https://github.com/riscv/riscv-strace/archive/$(STRACE_COMMIT)/riscv-strace-$(STRACE_SHORTCOMMIT).tar.gz'
765 # Cross-compile bzip2.
766 stage3-chroot/usr/bin/bzip2: bzip2-$(BZIP2_VERSION).tar.gz
767 rm -rf bzip2-$(BZIP2_VERSION)
769 cd bzip2-$(BZIP2_VERSION) && \
770 PATH=$(ROOT)/fixed-gcc:$$PATH \
771 make libbz2.a bzip2 bzip2recover \
773 CC=riscv64-unknown-linux-gnu-gcc \
774 AR=riscv64-unknown-linux-gnu-ar \
775 RANLIB=riscv64-unknown-linux-gnu-ranlib \
776 CFLAGS="-Wall -Winline -O2 -g -D_FILE_OFFSET_BITS=64 -fPIC"
777 cd bzip2-$(BZIP2_VERSION) && \
778 make install PREFIX=$(ROOT)/stage3-chroot/usr
780 bzip2-$(BZIP2_VERSION).tar.gz:
782 wget -O $@-t http://www.bzip.org/1.0.6/bzip2-$(BZIP2_VERSION).tar.gz
785 # Cross-compile GNU make.
786 stage3-chroot/usr/bin/make: make-$(MAKE_VERSION).tar.gz
787 rm -rf make-$(MAKE_VERSION)
789 cd make-$(MAKE_VERSION) && \
790 PATH=$(ROOT)/fixed-gcc:$$PATH \
792 --host=riscv64-unknown-linux-gnu \
793 --prefix=/usr --libdir=/usr/lib64
794 cd make-$(MAKE_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
795 cd make-$(MAKE_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
797 make-$(MAKE_VERSION).tar.gz:
799 wget -O $@-t https://ftp.gnu.org/gnu/make/make-$(MAKE_VERSION).tar.gz
802 # Cross-compile GNU diffutils.
803 stage3-chroot/usr/bin/diff: diffutils-$(DIFFUTILS_VERSION).tar.xz
804 rm -rf diffutils-$(DIFFUTILS_VERSION)
806 cd diffutils-$(DIFFUTILS_VERSION) && \
807 PATH=$(ROOT)/fixed-gcc:$$PATH \
809 --host=riscv64-unknown-linux-gnu \
810 --prefix=/usr --libdir=/usr/lib64
811 cd diffutils-$(DIFFUTILS_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
812 cd diffutils-$(DIFFUTILS_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
814 diffutils-$(DIFFUTILS_VERSION).tar.xz:
816 wget -O $@-t https://ftp.gnu.org/gnu/diffutils/diffutils-$(DIFFUTILS_VERSION).tar.xz
819 # Cross-compile GNU findutils.
820 stage3-chroot/usr/bin/find: findutils-$(FINDUTILS_VERSION).tar.gz
821 rm -rf findutils-$(FINDUTILS_VERSION)
823 cd findutils-$(FINDUTILS_VERSION) && \
824 PATH=$(ROOT)/fixed-gcc:$$PATH \
826 --host=riscv64-unknown-linux-gnu \
827 --prefix=/usr --libdir=/usr/lib64
828 cd findutils-$(FINDUTILS_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
829 cd findutils-$(FINDUTILS_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
831 findutils-$(FINDUTILS_VERSION).tar.gz:
833 wget -O $@-t https://ftp.gnu.org/gnu/findutils/findutils-$(FINDUTILS_VERSION).tar.gz
836 # Cross-compile GNU sed.
837 stage3-chroot/usr/bin/sed: sed-$(SED_VERSION).tar.gz
838 rm -rf sed-$(SED_VERSION)
840 cd sed-$(SED_VERSION) && \
841 PATH=$(ROOT)/fixed-gcc:$$PATH \
843 --host=riscv64-unknown-linux-gnu \
844 --prefix=/usr --libdir=/usr/lib64
845 cd sed-$(SED_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
846 cd sed-$(SED_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
848 sed-$(SED_VERSION).tar.gz:
850 wget -O $@-t https://ftp.gnu.org/gnu/sed/sed-$(SED_VERSION).tar.gz
853 # Cross-compile patch.
854 stage3-chroot/usr/bin/patch: patch-$(PATCH_VERSION).tar.gz
855 rm -rf patch-$(PATCH_VERSION)
857 cd patch-$(PATCH_VERSION) && \
858 PATH=$(ROOT)/fixed-gcc:$$PATH \
860 --host=riscv64-unknown-linux-gnu \
861 --prefix=/usr --libdir=/usr/lib64
862 cd patch-$(PATCH_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
863 cd patch-$(PATCH_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
865 patch-$(PATCH_VERSION).tar.gz:
867 wget -O $@-t https://ftp.gnu.org/gnu/patch/patch-$(PATCH_VERSION).tar.gz
870 # Cross-compile hostname.
871 stage3-chroot/usr/bin/hostname: hostname-$(HOSTNAME_VERSION).tar.gz
872 rm -rf hostname-$(HOSTNAME_VERSION)
874 cd hostname && patch -p1 < ../hostname-rh.patch
876 PATH=$(ROOT)/fixed-gcc:$$PATH \
878 CC=riscv64-unknown-linux-gnu-gcc \
880 cd hostname && make install BASEDIR=$(ROOT)/stage3-chroot
882 hostname-$(HOSTNAME_VERSION).tar.gz:
884 wget -O $@-t http://ftp.de.debian.org/debian/pool/main/h/hostname/hostname_$(HOSTNAME_VERSION).tar.gz
887 # Cross-compile GNU gettext.
888 stage3-chroot/usr/bin/gettext: gettext-$(GETTEXT_VERSION).tar.gz
889 rm -rf gettext-$(GETTEXT_VERSION)
891 cd gettext-$(GETTEXT_VERSION) && \
892 PATH=$(ROOT)/fixed-gcc:$$PATH \
894 --host=riscv64-unknown-linux-gnu \
895 --prefix=/usr --libdir=/usr/lib64
896 cd gettext-$(GETTEXT_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
897 cd gettext-$(GETTEXT_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make install DESTDIR=$(ROOT)/stage3-chroot
898 rm -f stage3-chroot/usr/lib64/*.la
900 gettext-$(GETTEXT_VERSION).tar.gz:
902 wget -O $@-t https://ftp.gnu.org/gnu/gettext/gettext-$(GETTEXT_VERSION).tar.gz
906 stage3-chroot/usr/bin/lua: lua-$(LUA_VERSION).tar.gz
907 rm -rf lua-$(LUA_VERSION)
909 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"
910 cd lua-$(LUA_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make install INSTALL_TOP=$(ROOT)/stage3-chroot/usr INSTALL_LIB=$(ROOT)/stage3-chroot/usr/lib64
912 lua-$(LUA_VERSION).tar.gz:
914 wget -O $@-t https://www.lua.org/ftp/lua-$(LUA_VERSION).tar.gz
918 stage3-chroot/usr/bin/xz: xz-$(XZ_VERSION).tar.gz
919 rm -rf xz-$(XZ_VERSION)
921 cd xz-$(XZ_VERSION) && \
922 PATH=$(ROOT)/fixed-gcc:$$PATH \
924 --host=riscv64-unknown-linux-gnu \
925 --prefix=/usr --libdir=/usr/lib64
926 cd xz-$(XZ_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
927 cd xz-$(XZ_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make install DESTDIR=$(ROOT)/stage3-chroot
928 rm -f stage3-chroot/usr/lib64/*.la
930 xz-$(XZ_VERSION).tar.gz:
932 wget -O $@-t http://tukaani.org/xz/xz-$(XZ_VERSION).tar.gz
935 # Cross-compile GNU awk.
936 stage3-chroot/usr/bin/gawk: gawk-$(GAWK_VERSION).tar.gz
937 rm -rf gawk-$(GAWK_VERSION)
939 cd gawk-$(GAWK_VERSION) && \
940 PATH=$(ROOT)/fixed-gcc:$$PATH \
942 --host=riscv64-unknown-linux-gnu \
943 --prefix=/usr --libdir=/usr/lib64
944 cd gawk-$(GAWK_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
945 cd gawk-$(GAWK_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
947 gawk-$(GAWK_VERSION).tar.gz:
949 wget -O $@-t https://ftp.gnu.org/gnu/gawk/gawk-$(GAWK_VERSION).tar.gz
952 # Cross-compile RPM / rpmbuild.
953 # We build this from a git commit, with a few hacks to the configure
955 stage3-chroot/usr/bin/rpm: rpm-$(RPM_SHORT_COMMIT).tar.gz db-$(BDB_VERSION).tar.gz
956 rm -rf rpm-$(RPM_SHORT_COMMIT)
957 tar -zxf rpm-$(RPM_SHORT_COMMIT).tar.gz
958 tar -zxf db-$(BDB_VERSION).tar.gz -C rpm-$(RPM_SHORT_COMMIT)
959 cd rpm-$(RPM_SHORT_COMMIT) && ln -s db-$(BDB_VERSION) db
960 cd rpm-$(RPM_SHORT_COMMIT) && \
961 patch -p1 < ../0001-RISCV-64-bit-riscv64-support.patch && \
962 patch -p1 < ../0002-rpmrc-Convert-uname.machine-riscv-to-riscv32-riscv64.patch && \
963 patch -p1 < ../0003-build-fgetc-returns-int-not-char.patch && \
964 patch -p1 < ../0004-HACKS-TO-GET-RPM-TO-CROSS-COMPILE.patch
965 cd rpm-$(RPM_SHORT_COMMIT) && autoreconf -i
966 cd rpm-$(RPM_SHORT_COMMIT) && \
967 PATH=$(ROOT)/fixed-gcc:$$PATH \
968 LDFLAGS=-L$(ROOT)/stage3-chroot/usr/lib64 \
970 --host=riscv64-unknown-linux-gnu \
971 --prefix=/usr --libdir=/usr/lib64 \
973 --with-vendor=redhat \
974 --without-libarchive \
978 --without-external-db \
981 cd rpm-$(RPM_SHORT_COMMIT) && PATH=$(ROOT)/fixed-gcc:$$PATH make V=1
982 cd rpm-$(RPM_SHORT_COMMIT) && PATH=$(ROOT)/fixed-gcc:$$PATH make install DESTDIR=$(ROOT)/stage3-chroot
983 rm -f stage3-chroot/usr/lib64/*.la
985 rpm-$(RPM_SHORT_COMMIT).tar.gz:
987 wget -O $@-t 'http://rpm.org/gitweb?p=rpm.git;a=snapshot;h=$(RPM_COMMIT);sf=tgz'
990 db-$(BDB_VERSION).tar.gz:
992 wget -O $@-t http://download.oracle.com/berkeley-db/db-$(BDB_VERSION).tar.gz
995 # Create an /init script.
996 stage3-chroot/init: init.sh
997 install -m 0755 $^ $@
999 # Create the stage3 disk image.
1000 # Note `-s +...' adds spare space to the disk image.
1001 stage3-disk.img: stage3-chroot
1002 cd stage3-chroot && virt-make-fs . ../$@ -t ext2 -F raw -s +4G
1004 # Upload the compressed disk image.
1005 upload-stage3: stage3-disk.img.xz
1006 scp $^ tick:public_html/riscv/
1007 stage3-disk.img.xz: stage3-disk.img
1011 # Helper which boots stage3 disk image in spike.
1012 boot-stage3-in-spike: stage3-disk.img stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux
1013 spike +disk=stage3-disk.img \
1014 /usr/bin/bbl stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux
1016 # Helper which boots stage3 disk image in qemu.
1017 boot-stage3-in-qemu: stage3-disk.img stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux
1018 qemu-system-riscv -kernel /usr/bin/bbl \
1019 -append ./stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux \
1020 -drive file=stage3-disk.img,format=raw -nographic