Silly test trying to cross-compile a working gentoo prefix install for Termux on Android (aarch64)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

150 lines
4.9 KiB

#!/bin/sh
set -e
# Main settings
PROFILE=default/linux/arm64/17.0/prefix/kernel-3.2+
ldso=/lib/ld-linux-aarch64.so.1
virtual_os_headers=sys-kernel/linux-headers
virtual_libc=sys-libs/glibc
# Output paths
export PORTDIR="$PWD/gentoo"
export ROOT="$PWD/sysroot"
export EPREFIX=/data/data/com.termux/files/gentoo
PKGDIR="$PWD/binpkgs"
PORTAGE_LOGDIR="$PWD/portlog"
# Cleanup (optional)
#rm -rf "$ROOT"
# Configure portage profile and gather variables
EROOT="$ROOT$EPREFIX"
export SYSROOT="$ROOT"
export PORTAGE_CONFIGROOT="$EROOT"
rm -rf "$PORTAGE_CONFIGROOT/etc/portage"
mkdir -p "$PORTAGE_CONFIGROOT/etc/portage"
ln -srfT "$PORTDIR/profiles/$PROFILE" "$PORTAGE_CONFIGROOT/etc/portage/make.profile"
BROOT="$(portageq envvar BROOT)"
CHOST="$(portageq envvar CHOST)"
ARCH="$(portageq envvar ARCH)"
LIBDIR="$(portageq envvar LIBDIR_$ARCH)"
# Portage settings
export EMERGE_LOG_DIR="${EMERGE_LOG_DIR:-$EROOT/var/log}"
export PORTAGE_LOGDIR="${PORTAGE_LOGDIR:-$EROOT/var/log/portage}"
export PORTAGE_TMPDIR="${PORTAGE_TMPDIR:-$EROOT/var/tmp}"
export PKGDIR="${PKGDIR:-$EROOT/var/cache/distfiles}"
export PORTAGE_REPO_DUPLICATE_WARN=0
cat > "$PORTAGE_CONFIGROOT/etc/portage/make.conf" << EOF
ACCEPT_KEYWORDS="\$ARCH -~\$ARCH"
EOF
# Install patches
cp -a "$PWD/patches" "$PORTAGE_CONFIGROOT/etc/portage/patches"
# Configure the toolchain
rm -rf "$ROOT/tmp-bin"
mkdir -p "$ROOT/tmp-bin"
cat > "$ROOT/tmp-bin/$CHOST-gcc" << EOF
#!/bin/sh
exec '$(command -v $CHOST-gcc)' --sysroot='$EROOT' -specs='$ROOT/tmp-bin/$CHOST.specs' "\$@"
EOF
cat > "$ROOT/tmp-bin/$CHOST-g++" << EOF
#!/bin/sh
exec '$(command -v $CHOST-g++)' --sysroot='$EROOT' -specs='$ROOT/tmp-bin/$CHOST.specs' "\$@"
EOF
cat > "$ROOT/tmp-bin/$CHOST.specs" << EOF
%rename link old_link
*link:
%(old_link) %{!static:%{!static-pie:%{!shared:--dynamic-linker=$EPREFIX$ldso}}}
EOF
chmod +x "$ROOT/tmp-bin/$CHOST-gcc" "$ROOT/tmp-bin/$CHOST-g++"
#export PREROOTPATH="$ROOT/tmp-bin" # doesn't work anymore
cat > "$BROOT/etc/env.d/000tmp" << EOF
PATH='$ROOT/tmp-bin'
EOF
( unset EPREFIX ROOT SYSROOT; env-update )
export PKG_CONFIG_PATH="$EROOT/usr/$LIBDIR/pkgconfig"
# Sanity check
gcc_host="$(portageq best_visible "$EROOT" sys-devel/gcc | cut -d/ -f2)"
gcc_build="$(unset EPREFIX ROOT SYSROOT; portageq best_version "$BROOT" "cross-$CHOST/gcc" | cut -d/ -f2)"
if [ "$gcc_host" != "$gcc_build" ]; then
echo "Host and build gcc mismatch!"
echo "Please update your build's gcc to match"
echo "host: sys-devel/$gcc_host"
echo "build: cross-$CHOST/$gcc_build"
exit 1
fi
# Autoconf defines...
export ac_cv_func_malloc_0_nonnull=yes # required by sys-process/procps (old autoconf)
export ac_cv_func_realloc_0_nonnull=yes # required by sys-process/procps (old autoconf)
export ac_cv_file__dev_ptmx=yes # required by dev-lang/python
export ac_cv_file__dev_ptc=no # required by dev-lang/python
export CHOST # required by cross-emerge
if [ -n "$*" ]; then
cross-emerge -vnbk -1 "$@"
else
cross-emerge -vnbk -O1 sys-apps/baselayout
cross-emerge -vnbk -o --onlydeps-with-rdeps=n $virtual_os_headers
cross-emerge -vnbk -O1 $virtual_os_headers virtual/os-headers
cross-emerge -vnbk -o --onlydeps-with-rdeps=n $virtual_libc
cross-emerge -vnbk -O1 $virtual_libc virtual/libc
cross-emerge -vnbk -DN @system
cross-emerge -c --with-bdeps=n
fi
# NOTE: Modified portage/package/ebuild/doebuild.py to hardcode eprefix and get
# ccache to work...
#unset CCACHE_DISABLE
#export CCACHE_DIR="$PWD/ccache"
#export FEATURES="ccache"
#cross-emerge -vnbk -O $virtual_os_headers
#FEATURES="ccache nostrip" CFLAGS="-O2 -ggdb" cross-emerge -v -O $virtual_libc
# Cleanup
rm -rf "$EROOT/var/log" "$EROOT/var/tmp" "$EROOT/var/cache"
rm -rf "$ROOT/tmp-bin"
rm -f "$BROOT/etc/env.d/000tmp"
( unset EPREFIX ROOT SYSROOT; env-update )
# Finalize the portage config
ln -sfT "../../var/db/repos/gentoo/profiles/$PROFILE" "$PORTAGE_CONFIGROOT/etc/portage/make.profile"
# Install additional files
mkdir -p "$EROOT/etc"
cat > "$EROOT/etc/resolv.conf" << EOF
# Termux defaults ¯\\_(ツ)_/¯
nameserver 8.8.8.8
nameserver 8.8.4.4
EOF
# Package up
rm -f sysroot.tar sysroot.tar sysroot.tar.xz
tar cf sysroot.tar -C "$ROOT" --hard-dereference .
xz -9v sysroot.tar
# Termux setup:
# - pkg up / termux-change-repo
# - pkg in openssh
# - passwd
# - sshd
# - ifconfig
# Copying the files:
# - scp -P 8022 sysroot.tar.xz <ip>:~
# - ssh -p 8022 <ip>
# - cd /; tar xf ~/sysroot.tar.xz
# Running the environment:
# - LD_PRELOAD= /data/data/com.termux/files/gentoo/bin/bash -l
# First-time initialization:
# - /data/data/com.termux/files/gentoo/sbin/ldconfig
# - /data/data/com.termux/files/gentoo/usr/sbin/env-update
# - echo "termux:x:$(id -u):$(id -g):termux:/data/data/com.termux/files/home:/data/data/com.termux/gentoo/bin/bash" >> /data/data/com.termux/files/gentoo/etc/passwd
# - echo "termux::$(id -g):" >> /data/data/com.termux/files/gentoo/etc/group
# - exec /data/data/com.termux/files/gentoo/bin/bash -l
# - emerge-webrsync