В данном руководстве мы будем собирать пакеты с хостовой системой x86_64 под гостевую систему на базе arm64.
Для сборки пакетов не родных архитектур используется набор утилит crossdev, её-то мы и будем устанавливать
# emerge -v crossdev
Так же перед началом работы с кросскомпиляцией настоятельно рекомендуется создать отдельную директорию для дерева портов будущей системы
[crossdev] location = /usr/local/portage-crossdev priority = 10 masters = gentoo auto-sync = no
# mkdir -p /usr/local/portage-crossdev/metadata # mkdir -p /usr/local/portage-crossdev/layout
masters = gentoo thin-manifests = true
# echo 'crossdev' > /usr/local/portage-crossdev/profiles/repo_name
# emerge --sync
После чего соберём тулчейн для работы с требуемой архитектурой
# crossdev --stable -t aarch64-unknown-linux-gnu
Disclaimor Есть корочи один очень важный момент - скорее всего просто так кроссдев вывалится без ошибок, а в логах будет написано, что не нашлись кандидаты для установки. Я точно не нашл способа заставить это работать существующими командами, поэтому надо провалиться в директорию с портами и сделать
# ebuild <ebuild> digest
на нужные ебилды. Как минимум binutils и gcc.
После того, как у нас собрались все пакеты для целевой архитектуры, но до того, как мы начнём собирать новые, треуется произвести ещё пару-тройку изменений.
Начинаем с гостевого make.conf
ARCH="arm64" # Мы ведь собираем по 64 арм FEATURES=buildpkg # Поскольку собираем не для себя, будем складывать в ${ROOT}/packages USE="${ARCH} -pam -acl" MAKEOPTS="-j5" CFLAGS="" # Или какие-нибудь свои флаги, если найдёте
И настраиваем профиль
# cd /usr/aarch64-unknown-linux-gnu/etc/portage # rm make.profile # ln -s /usr/portage/profiles/default/linux/arm64/17.0/desktop/ make.profile
Для ускорения сборки я лично использую RAM, но это на любителя
# mount -o size=4G -t tmpfs tmpfs /usr/aarch64-unknown-linux-gnu/tmp/portage
После чего собираем basesystem (первая итерация, которая не соберёт часть пакетов, но об этом дальше)
# emerge-aarch64-unknown-linux-gnu -vu --keep-going @system