Skip to content

Instantly share code, notes, and snippets.

@gyakovlev
Last active March 7, 2022 22:03
Show Gist options
  • Save gyakovlev/7e85542a850b560d8ecb7d6ee845071e to your computer and use it in GitHub Desktop.
Save gyakovlev/7e85542a850b560d8ecb7d6ee845071e to your computer and use it in GitHub Desktop.
porting-with-crossdev.md

** text licensed under CC-BY 4.0 https://creativecommons.org/licenses/by/4.0/legalcode

porting gentoo (ppc32 musl example)

  mkdir -p /var/db/repos/crossdev/{profiles,metadata}
  echo 'crossdev' > /var/db/repos/crossdev/profiles/repo_name
  echo 'masters = gentoo' > /var/db/repos/crossdev/metadata/layout.conf
  echo 'thin-manifests = true' >> /var/db/repos/crossdev/metadata/layout.conf
  chown -R portage:portage /var/db/repos/crossdev

/etc/portage/repos.conf/crossdev.conf:

  [crossdev]
  location = /var/db/repos/crossdev
  priority = 10
  masters = gentoo
  auto-sync = no
  • initialize target ( don't use unstable for musl )
crossdev --init-target --stable --target powerpc-gentoo-linux-musl
  • inspect /var/db/repos/crossdev/cross-powerpc-gentoo-linux-musl for musl we want some ebuilds come from musl repo, like
/var/db/repos/crossdev # ls -la cross-powerpc-gentoo-linux-musl/gcc
cross-powerpc-gentoo-linux-musl/gcc -> /var/db/repos/musl/sys-devel/gcc
  • build target toolchain
crossdev --stable --target powerpc-gentoo-linux-musl
  • update target profile in /usr/powerpc-gentoo-linux-musl/etc/portage:

don't use hardened this time due to https://bugs.gentoo.org/706210 and https://bugs.gentoo.org/747346

make.profile -> /var/db/repos/gentoo/profiles/default/linux/ppc/17.0/musl
  • update make.conf in /usr/powerpc-gentoo-linux-musl/etc/portage:
mkdir /var/tmp/portage/powerpc-gentoo-linux-musl
...
ACCEPT_KEYWORDS="${ARCH}"
# avoid some failing or optional deps for now
USE="${ARCH} -pam -acl -nls -caps -filecaps -ssp -rsync-verify"
PORTAGE_TMPDIR="/var/tmp/portage/${CHOST}"

and other options as required

  • add musl repo to cross portage config directory
mkdir /usr/powerpc-gentoo-linux-musl/etc/portage/repos.conf
cp /etc/portage/repos.conf/musl.conf /usr/powerpc-gentoo-linux-musl/etc/portage/repos.conf/
  • reinstall libc inside, this will replace files of powerpc-gentoo-linux-musl/musl package:
powerpc-gentoo-linux-musl-emerge musl -v1 # ( you may need 1.2.2-r4 to fix symlink issue)
  • repeat for: binutils gcc linux-headers

now emerge @system, there will be failures, continue restarting the merge until most of the failures resolve:

powerpc-gentoo-linux-musl-emerge @system -v1 --keep-going
  • After most of the @system is built you will need to cleanup /usr/powerpc-gentoo-linux-musl/etc/portage from crossdev hacks/configs.

tar /usr/powerpc-gentoo-linux-musl, it's your seed stage3.

  • Feed this stage3 to catalyst to build fresh stage1->stage2(optional)->stage3

  • Rebuild stage3 again, with previous catalyst stage3 doing full chain again: stage3 -> stage1 -> stage3

Congratulations, you've created gentoo stage3 file.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment