These instructions cover:
- building a cross toolchain
- populating the new ROOT
- making it
chroot
able using qemu-user to easily run "native" builds or tests (this is like a stage3 at the end)
You do not need to follow through to the end if you don't need a stage3-like root.
$ crossdev riscv64-unknown-linux-gnu
Emerge sys-libs/glibc
(no, @system
/ @world
won't make it realise it can/should do this, don't ask why, I don't know):
$ riscv64-unknown-linux-gnu-emerge -v1 sys-libs/glibc
$ riscv64-unknown-linux-gnu-emerge -v1 @system
There's now already a bunch of things in /usr/riscv64-unknown-linux-gnu
but we want to make it useful to chroot into and do things.
Run: PORTAGE_CONFIGROOT=/usr/riscv64-unknown-linux-gnu eselect profile list
Pick a nice looking one, like default/linux/riscv/20.0/rv64gc/lp64
.
$ PORTAGE_CONFIGROOT=/usr/riscv64-unknown-linux-gnu eselect profile set default/linux/riscv/20.0/rv64gc/lp64
$ USE="-filecaps" riscv64-unknown-linux-gnu-emerge -v1 @system
In /etc/portage/package.use/qemu
, put:
app-emulation/qemu static-user # optional but makes life easier
*/* QEMU_USER_TARGETS: riscv32 riscv64
Then emerge -v app-emulation/qemu
See https://wiki.gentoo.org/wiki/Embedded_Handbook/General/Compiling_with_qemu_user_chroot.
- Set up binfmt appropriately for
riscv64
(TODO: explain how, but wiki link above covers it pretty much) cp /usr/bin/qemu-riscv64 /usr/riscv64-unknown-linux-gnu/usr/bin/
- chroot in to
/usr/riscv64-unknown-linux-gnu
using your preferred method - update
/etc/portage/make.conf
to drop ROOT, PORTAGE_TMPDIR, PKG_CONFIG_DIR emerge -a -uvDU @world
(may need to do@system
first)