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
38 # cross-compile into the stage 3 chroot.
39 STAGE3_PACKAGES = gcc rpm-build
41 # Versions of cross-compiled packages.
42 NCURSES_VERSION = 6.0-20160730
44 COREUTILS_VERSION = 8.25
49 UTIL_LINUX_VERSION = 2.28
51 all: stage1 stage2 stage3 stage4
55 stage1: stage1-riscv-qemu/riscv-qemu-$(RISCV_QEMU_SHORTCOMMIT).tar.gz \
56 stage1-riscv-qemu/riscv-qemu.spec \
57 stamp-riscv-qemu-installed \
58 stage1-riscv-fesvr/riscv-fesvr-$(RISCV_FESVR_SHORTCOMMIT).tar.gz \
59 stage1-riscv-fesvr/riscv-fesvr.spec \
60 stamp-riscv-fesvr-installed \
61 stage1-riscv-isa-sim/riscv-isa-sim-$(RISCV_ISA_SIM_SHORTCOMMIT).tar.gz \
62 stage1-riscv-isa-sim/riscv-isa-sim.spec \
63 stamp-riscv-isa-sim-installed
65 stage1-riscv-qemu/riscv-qemu-$(RISCV_QEMU_SHORTCOMMIT).tar.gz:
67 wget -O $@-t 'https://github.com/riscv/riscv-qemu/archive/$(RISCV_QEMU_COMMIT)/riscv-qemu-$(RISCV_QEMU_SHORTCOMMIT).tar.gz'
70 stage1-riscv-qemu/riscv-qemu.spec: stage1-riscv-qemu/riscv-qemu.spec.in
71 sed -e 's/@COMMIT@/$(RISCV_QEMU_COMMIT)/g' \
72 -e 's/@SHORTCOMMIT@/$(RISCV_QEMU_SHORTCOMMIT)/g' \
76 stamp-riscv-qemu-installed:
78 @rpm -q riscv-qemu >/dev/null || { \
79 echo "ERROR: You must install riscv-qemu:"; \
81 echo " dnf copr enable rjones/riscv"; \
82 echo " dnf install riscv-qemu"; \
84 echo "OR: you can build it yourself from the stage1-riscv-qemu directory."; \
88 @qemu-system-riscv --version || { \
89 echo "ERROR: qemu-system-riscv is not working."; \
90 echo "Make sure you installed the riscv-qemu package."; \
95 stage1-riscv-fesvr/riscv-fesvr-$(RISCV_FESVR_SHORTCOMMIT).tar.gz:
97 wget -O $@-t 'https://github.com/riscv/riscv-fesvr/archive/$(RISCV_FESVR_COMMIT)/riscv-fesvr-$(RISCV_FESVR_SHORTCOMMIT).tar.gz'
100 stage1-riscv-fesvr/riscv-fesvr.spec: stage1-riscv-fesvr/riscv-fesvr.spec.in
101 sed -e 's/@COMMIT@/$(RISCV_FESVR_COMMIT)/g' \
102 -e 's/@SHORTCOMMIT@/$(RISCV_FESVR_SHORTCOMMIT)/g' \
106 stamp-riscv-fesvr-installed:
108 @rpm -q riscv-fesvr >/dev/null || { \
109 echo "ERROR: You must install riscv-fesvr:"; \
111 echo " dnf copr enable rjones/riscv"; \
112 echo " dnf install riscv-fesvr"; \
114 echo "OR: you can build it yourself from the stage1-riscv-fesvr directory."; \
120 stage1-riscv-isa-sim/riscv-isa-sim-$(RISCV_ISA_SIM_SHORTCOMMIT).tar.gz:
122 wget -O $@-t 'https://github.com/riscv/riscv-isa-sim/archive/$(RISCV_ISA_SIM_COMMIT)/riscv-isa-sim-$(RISCV_ISA_SIM_SHORTCOMMIT).tar.gz'
125 stage1-riscv-isa-sim/riscv-isa-sim.spec: stage1-riscv-isa-sim/riscv-isa-sim.spec.in
126 sed -e 's/@COMMIT@/$(RISCV_ISA_SIM_COMMIT)/g' \
127 -e 's/@SHORTCOMMIT@/$(RISCV_ISA_SIM_SHORTCOMMIT)/g' \
131 stamp-riscv-isa-sim-installed:
133 @rpm -q riscv-isa-sim >/dev/null || { \
134 echo "ERROR: You must install riscv-isa-sim:"; \
136 echo " dnf copr enable rjones/riscv"; \
137 echo " dnf install riscv-isa-sim"; \
139 echo "OR: you can build it yourself from the stage1-riscv-isa-sim directory."; \
147 stage2: stage2-riscv-gnu-toolchain/riscv-gnu-toolchain-$(RISCV_GNU_TOOLCHAIN_SHORTCOMMIT).tar.gz \
148 stage2-riscv-gnu-toolchain/binutils-$(BINUTILS_VERSION).tar.gz \
149 stage2-riscv-gnu-toolchain/gcc-$(GCC_VERSION).tar.gz \
150 stage2-riscv-gnu-toolchain/glibc-$(GLIBC_VERSION).tar.gz \
151 stage2-riscv-gnu-toolchain/newlib-$(NEWLIB_VERSION).tar.gz \
152 stage2-riscv-gnu-toolchain/riscv-gnu-toolchain.spec \
153 stamp-riscv-gnu-toolchain-installed \
154 stage2-riscv-pk/riscv-pk-$(RISCV_PK_SHORTCOMMIT).tar.gz \
155 stage2-riscv-pk/riscv-pk.spec \
156 stamp-riscv-pk-installed
158 stage2-riscv-gnu-toolchain/riscv-gnu-toolchain-$(RISCV_GNU_TOOLCHAIN_SHORTCOMMIT).tar.gz:
160 wget -O $@-t https://github.com/lowRISC/riscv-gnu-toolchain/archive/$(RISCV_GNU_TOOLCHAIN_COMMIT)/riscv-gnu-toolchain-$(RISCV_GNU_TOOLCHAIN_SHORTCOMMIT).tar.gz
163 stage2-riscv-gnu-toolchain/binutils-$(BINUTILS_VERSION).tar.gz:
165 wget -O $@-t http://mirrors.kernel.org/gnu/binutils/binutils-$(BINUTILS_VERSION).tar.gz
168 # GCC 5 no longer compiles with GCC 6 unless we patch it.
169 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69959
170 stage2-riscv-gnu-toolchain/gcc-$(GCC_VERSION).tar.gz:
172 wget -O $@-t http://mirrors.kernel.org/gnu/gcc/gcc-$(GCC_VERSION)/gcc-$(GCC_VERSION).tar.gz
174 cd gcc-$(GCC_VERSION) && patch -p0 < ../stage2-riscv-gnu-toolchain/gcc-5-fix-compilation-with-gcc-6.patch
175 tar zcf $@-t gcc-$(GCC_VERSION)
176 rm -r gcc-$(GCC_VERSION)
179 stage2-riscv-gnu-toolchain/glibc-$(GLIBC_VERSION).tar.gz:
181 wget -O $@-t http://mirrors.kernel.org/gnu/glibc/glibc-$(GLIBC_VERSION).tar.gz
184 stage2-riscv-gnu-toolchain/newlib-$(NEWLIB_VERSION).tar.gz:
186 wget -O $@-t ftp://sourceware.org/pub/newlib/newlib-$(NEWLIB_VERSION).tar.gz
189 stage2-riscv-gnu-toolchain/riscv-gnu-toolchain.spec: stage2-riscv-gnu-toolchain/riscv-gnu-toolchain.spec.in
190 sed -e 's/@COMMIT@/$(RISCV_GNU_TOOLCHAIN_COMMIT)/g' \
191 -e 's/@SHORTCOMMIT@/$(RISCV_GNU_TOOLCHAIN_SHORTCOMMIT)/g' \
192 -e 's/@BINUTILS_VERSION@/$(BINUTILS_VERSION)/g' \
193 -e 's/@GCC_VERSION@/$(GCC_VERSION)/g' \
194 -e 's/@GLIBC_VERSION@/$(GLIBC_VERSION)/g' \
195 -e 's/@NEWLIB_VERSION@/$(NEWLIB_VERSION)/g' \
199 stamp-riscv-gnu-toolchain-installed:
201 @rpm -q riscv-gnu-toolchain >/dev/null || { \
202 echo "ERROR: You must install riscv-gnu-toolchain:"; \
204 echo " dnf copr enable rjones/riscv"; \
205 echo " dnf install riscv-gnu-toolchain"; \
207 echo "OR: you can build it yourself from the stage2-riscv-gnu-toolchain directory."; \
211 @riscv64-unknown-elf-gcc --version || { \
212 echo "ERROR: riscv64-unknown-elf-gcc (cross compiler) is not working."; \
213 echo "Make sure you installed the riscv-gnu-toolchain package."; \
218 stage2-riscv-pk/riscv-pk-$(RISCV_PK_SHORTCOMMIT).tar.gz:
220 wget -O $@-t https://github.com/lowRISC/riscv-pk/archive/$(RISCV_PK_COMMIT)/riscv-pk-$(RISCV_PK_SHORTCOMMIT).tar.gz
223 stage2-riscv-pk/riscv-pk.spec: stage2-riscv-pk/riscv-pk.spec.in
224 sed -e 's/@COMMIT@/$(RISCV_PK_COMMIT)/g' \
225 -e 's/@SHORTCOMMIT@/$(RISCV_PK_SHORTCOMMIT)/g' \
229 stamp-riscv-pk-installed:
231 @rpm -q riscv-pk >/dev/null || { \
232 echo "ERROR: You must install riscv-pk:"; \
234 echo " dnf copr enable rjones/riscv"; \
235 echo " dnf install riscv-pk"; \
237 echo "OR: you can build it yourself from the stage2-riscv-pk directory."; \
245 stage3: stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux \
246 stage3-chroot-original/etc/fedora-release \
247 stage3-chroot/etc/fedora-release \
248 stage3-chroot/lib64/libc.so.6 \
249 stage3-chroot/usr/bin/tic \
250 stage3-chroot/bin/bash \
251 stage3-chroot/bin/ls \
252 stage3-chroot/usr/lib64/libgmp.so.10 \
253 stage3-chroot/usr/lib64/libmpfr.so.4 \
254 stage3-chroot/usr/lib64/libmpc.so.3 \
255 stage3-chroot/usr/bin/gcc \
256 stage3-chroot/usr/bin/mount \
260 stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux:
261 rm -rf stage3-kernel/linux-$(KERNEL_VERSION)
262 cp -a $(LOCAL_LINUX_GIT_COPY) stage3-kernel/linux-$(KERNEL_VERSION) || { \
263 mkdir stage3-kernel/linux-$(KERNEL_VERSION) && \
264 cd stage3-kernel/linux-$(KERNEL_VERSION) && \
267 cd stage3-kernel/linux-$(KERNEL_VERSION) && \
268 git remote add riscv https://github.com/riscv/riscv-linux && \
270 git checkout -f linux-4.1.y-riscv && \
272 make ARCH=riscv defconfig
273 echo CONFIG_CMDLINE=\"root=/dev/htifblk0 init=/init\" >> stage3-kernel/linux-$(KERNEL_VERSION)/.config
274 echo CONFIG_CROSS_COMPILE=riscv64-unknown-elf- >> stage3-kernel/linux-$(KERNEL_VERSION)/.config
275 cd stage3-kernel/linux-$(KERNEL_VERSION) && \
276 make ARCH=riscv olddefconfig
277 cd stage3-kernel/linux-$(KERNEL_VERSION) && \
278 make ARCH=riscv vmlinux
281 # Build an original (x86-64) chroot using supermin. We then aim to
282 # rebuild (using cross-compiled versions) every ELF binary in this
284 stage3-chroot-original/etc/fedora-release:
285 rm -rf stage3-chroot-original tmp-supermin.d
286 supermin --prepare $(STAGE3_PACKAGES) -o tmp-supermin.d
287 supermin --build -f chroot tmp-supermin.d -o stage3-chroot-original
289 @echo -n "Total files in chroot: "
290 @find stage3-chroot-original -type f | wc -l
291 @echo -n "ELF files to be rebuilt: "
292 @find stage3-chroot-original -type f | xargs file -N | grep -E '\bELF.*LSB\b' | wc -l
294 # Copy the original chroot to the final chroot, remove all the ELF
296 stage3-chroot/etc/fedora-release: stage3-chroot-original/etc/fedora-release
298 cp -a stage3-chroot-original stage3-chroot
299 find stage3-chroot -type d | xargs chmod u+w
300 find stage3-chroot -type f | xargs chmod u+w
301 find stage3-chroot -type f | xargs file -N | grep -E '\bELF.*LSB\b' | awk -F: '{print $$1}' | xargs rm -f
302 rm -f stage3-chroot/lib64/libc.so.6
304 # Copy in compiled glibc from the riscv-gnu-toolchain sysroot. Only
305 # copy files and symlinks, leave the target directory structure
307 stage3-chroot/lib64/libc.so.6:
308 mkdir -p stage3-chroot/usr/lib/audit
309 mkdir -p stage3-chroot/usr/lib/gconv
310 for f in `cd /usr/sysroot && find -type f -o -type l`; do \
311 cp -d /usr/sysroot/$$f stage3-chroot/$$f; \
313 cd stage3-chroot/lib64 && for f in ../lib/*; do ln -sf $$f; done
315 # Cross-compile ncurses.
316 stage3-chroot/usr/bin/tic: ncurses-$(NCURSES_VERSION).tgz
318 cd ncurses-$(NCURSES_VERSION) && \
319 PATH=$(ROOT)/fixed-gcc:$$PATH \
320 ./configure --host=riscv64-unknown-linux-gnu \
321 --prefix=/usr --libdir=/usr/lib64 \
323 cd ncurses-$(NCURSES_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
324 cd ncurses-$(NCURSES_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make install DESTDIR=$(ROOT)/stage3-chroot
325 cd $(ROOT)/stage3-chroot/usr/lib64 && ln -sf libtinfo.so.6 libtinfo.so
327 ncurses-$(NCURSES_VERSION).tgz:
329 wget -O $@-t ftp://invisible-island.net/ncurses/current/ncurses-$(NCURSES_VERSION).tgz
332 # Cross-compile bash.
333 stage3-chroot/bin/bash: bash-$(BASH_VERSION).tar.gz
335 cd bash-$(BASH_VERSION) && \
336 PATH=$(ROOT)/fixed-gcc:$$PATH \
337 ./configure --host=riscv64-unknown-linux-gnu \
338 --prefix=/usr --libdir=/usr/lib64
339 cd bash-$(BASH_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
340 cd bash-$(BASH_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
342 bash-$(BASH_VERSION).tar.gz:
344 wget -O $@-t ftp://ftp.gnu.org/gnu/bash/bash-$(BASH_VERSION).tar.gz
347 # Cross-compile coreutils. Bleah, coreutils cross-compilation is
348 # known-broken and upstream don't care, hence the 'touch' command.
350 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
352 stage3-chroot/bin/ls: coreutils-$(COREUTILS_VERSION).tar.xz
353 rm -rf coreutils-$(COREUTILS_VERSION)
355 cd coreutils-$(COREUTILS_VERSION) && \
356 PATH=$(ROOT)/fixed-gcc:$$PATH \
357 ./configure --host=riscv64-unknown-linux-gnu \
358 --prefix=/usr --libdir=/usr/lib64
359 -cd coreutils-$(COREUTILS_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
360 cd coreutils-$(COREUTILS_VERSION)/man && \
361 for f in $(COREUTILS_PROGRAMS); do touch $$f.1; done
362 cd coreutils-$(COREUTILS_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
363 cd coreutils-$(COREUTILS_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
365 coreutils-$(COREUTILS_VERSION).tar.xz:
367 wget -O $@-t ftp://ftp.gnu.org/gnu/coreutils/coreutils-$(COREUTILS_VERSION).tar.xz
370 # Cross-compile GMP, MPFR and MPC (deps of GCC).
371 stage3-chroot/usr/lib64/libgmp.so.10: gmp-$(GMP_VERSION).tar.lz
372 rm -rf gmp-$(GMP_VERSION)
373 tar --lzip -xf gmp-$(GMP_VERSION).tar.lz
374 cd gmp-$(GMP_VERSION) && \
375 PATH=$(ROOT)/fixed-gcc:$$PATH \
376 ./configure --host=riscv64-unknown-linux-gnu \
377 --prefix=/usr --libdir=/usr/lib64
378 cd gmp-$(GMP_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
379 cd gmp-$(GMP_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
380 cd stage3-chroot/usr/lib && ln -s ../lib64/libgmp.so
382 gmp-$(GMP_VERSION).tar.lz:
384 wget -O $@-t https://gmplib.org/download/gmp/gmp-$(GMP_VERSION).tar.lz
387 stage3-chroot/usr/lib64/libmpfr.so.4: mpfr-$(MPFR_VERSION).tar.gz
388 rm -rf mpfr-$(MPFR_VERSION)
389 tar -zxf mpfr-$(MPFR_VERSION).tar.gz
390 cd mpfr-$(MPFR_VERSION) && \
391 PATH=$(ROOT)/fixed-gcc:$$PATH \
392 ./configure --host=riscv64-unknown-linux-gnu \
393 --prefix=/usr --libdir=/usr/lib64 \
394 --with-gmp=$(ROOT)/stage3-chroot/usr
395 cd mpfr-$(MPFR_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
396 cd mpfr-$(MPFR_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
397 cd stage3-chroot/usr/lib && ln -s ../lib64/libmpfr.so
399 mpfr-$(MPFR_VERSION).tar.gz:
401 wget -O $@-t http://www.mpfr.org/mpfr-current/mpfr-$(MPFR_VERSION).tar.gz
404 stage3-chroot/usr/lib64/libmpc.so.3: mpc-$(MPC_VERSION).tar.gz
405 rm -rf mpc-$(MPC_VERSION)
406 tar -zxf mpc-$(MPC_VERSION).tar.gz
407 cd mpc-$(MPC_VERSION) && \
408 PATH=$(ROOT)/fixed-gcc:$$PATH \
409 ./configure --host=riscv64-unknown-linux-gnu \
410 --prefix=/usr --libdir=/usr/lib64 \
411 --with-gmp=$(ROOT)/stage3-chroot/usr \
412 --with-mpfr=$(ROOT)/stage3-chroot/usr
413 cd mpc-$(MPC_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
414 cd mpc-$(MPC_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot
415 cd stage3-chroot/usr/lib && ln -s ../lib64/libmpc.so
417 mpc-$(MPC_VERSION).tar.gz:
419 wget -O $@-t ftp://ftp.gnu.org/gnu/mpc/mpc-$(MPC_VERSION).tar.gz
423 stage3-chroot/usr/bin/gcc: gcc-$(GCC_X_VERSION).tar.gz
424 rm -rf riscv-gcc-riscv-gcc-$(GCC_X_VERSION)
426 mkdir riscv-gcc-riscv-gcc-$(GCC_X_VERSION)/build
427 cd riscv-gcc-riscv-gcc-$(GCC_X_VERSION)/build && \
428 PATH=$(ROOT)/fixed-gcc:$$PATH \
430 --host=riscv64-unknown-linux-gnu \
431 --prefix=/usr --libdir=/usr/lib64 \
434 --enable-languages=c,c++ \
435 --disable-libmudflap \
437 --disable-libquadmath \
440 cd riscv-gcc-riscv-gcc-$(GCC_X_VERSION)/build && PATH=$(ROOT)/fixed-gcc:$$PATH make all-gcc
441 cd riscv-gcc-riscv-gcc-$(GCC_X_VERSION)/build && make install-gcc DESTDIR=$(ROOT)/stage3-chroot
443 gcc-$(GCC_X_VERSION).tar.gz:
445 wget -O $@-t https://github.com/riscv/riscv-gcc/archive/riscv-gcc-$(GCC_X_VERSION).tar.gz
448 # Cross-compile util-linux.
449 # XXX Be nice to fix ncurses/tinfo support which in theory should work.
450 stage3-chroot/usr/bin/mount: util-linux-$(UTIL_LINUX_VERSION).tar.xz
451 rm -rf util-linux-$(UTIL_LINUX_VERSION)
453 cd util-linux-$(UTIL_LINUX_VERSION) && \
454 PATH=$(ROOT)/fixed-gcc:$$PATH \
456 --host=riscv64-unknown-linux-gnu \
457 --prefix=/usr --libdir=/usr/lib64 \
462 --disable-makeinstall-chown
463 cd util-linux-$(UTIL_LINUX_VERSION) && PATH=$(ROOT)/fixed-gcc:$$PATH make
464 # libtool fucks something up here, ignore the failure and continue.
465 -cd util-linux-$(UTIL_LINUX_VERSION) && make install DESTDIR=$(ROOT)/stage3-chroot -j1 -k V=1
467 util-linux-$(UTIL_LINUX_VERSION).tar.xz:
469 wget -O $@-t ftp://ftp.kernel.org/pub/linux/utils/util-linux/v$(UTIL_LINUX_VERSION)/util-linux-$(UTIL_LINUX_VERSION).tar.xz
472 # Create an /init script.
473 stage3-chroot/init: init.sh
474 install -m 0755 $^ $@
476 # Create the stage3 disk image.
477 # Note `-s +...' adds spare space to the disk image.
478 stage3-disk.img: stage3-chroot
479 cd stage3-chroot && virt-make-fs . ../$@ -t ext2 -F raw -s +4G
481 # Upload the compressed disk image.
482 upload-stage3: stage3-disk.img.xz
483 scp $^ tick:public_html/riscv/
484 stage3-disk.img.xz: stage3-disk.img
488 # Helper which boots stage3 disk image in spike.
489 boot-stage3-in-spike: stage3-disk.img stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux
490 spike +disk=stage3-disk.img \
491 /usr/bin/bbl stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux
493 # Helper which boots stage3 disk image in qemu.
494 boot-stage3-in-qemu: stage3-disk.img stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux
495 qemu-system-riscv -kernel /usr/bin/bbl \
496 -append ./stage3-kernel/linux-$(KERNEL_VERSION)/vmlinux \
497 -drive file=stage3-disk.img,format=raw -nographic