mid-kid
2 years ago
commit
d5e9991a06
10 changed files with 315 additions and 0 deletions
@ -0,0 +1,6 @@ |
|||||
|
/binpkgs/ |
||||
|
/gentoo/ |
||||
|
/portlog/ |
||||
|
/sysroot/ |
||||
|
/sysroot.tar |
||||
|
/sysroot.tar.xz |
@ -0,0 +1,9 @@ |
|||||
|
When cross-compiling: |
||||
|
- Various shebangs don't point to the proper EPREFIX |
||||
|
|
||||
|
On termux itself: |
||||
|
- dev-libs/libxml2 cannot be built (hardlinks in source tarball) |
||||
|
- sys-devel/libtool cannot be built (no error given...?) |
||||
|
- portage errors spectaularly if sys-apps/portage is anywhere in the dependency tree |
||||
|
- bash keeps spamming error messages: "shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied" |
||||
|
- after merging dev-lang/perl, no executable permission on /usr/bin/perl |
@ -0,0 +1,150 @@ |
|||||
|
#!/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 |
@ -0,0 +1,66 @@ |
|||||
|
diff --git a/app-admin/eselect/eselect-1.4.20.ebuild b/app-admin/eselect/eselect-1.4.20.ebuild
|
||||
|
index 338c3aba0..63490c9b4 100644
|
||||
|
--- a/app-admin/eselect/eselect-1.4.20.ebuild
|
||||
|
+++ b/app-admin/eselect/eselect-1.4.20.ebuild
|
||||
|
@@ -26,6 +26,13 @@ BDEPEND="doc? ( dev-python/docutils )"
|
||||
|
PDEPEND="emacs? ( app-emacs/eselect-mode ) |
||||
|
vim-syntax? ( app-vim/eselect-syntax )" |
||||
|
|
||||
|
+# https://bugs.gentoo.org/905934
|
||||
|
+src_configure() {
|
||||
|
+ econf \
|
||||
|
+ ac_cv_path_BASH="${EPREFIX}/bin/bash" \
|
||||
|
+ ac_cv_path_ENV_UPDATE="${EPREFIX}/usr/sbin/env-update"
|
||||
|
+}
|
||||
|
+
|
||||
|
src_compile() { |
||||
|
emake |
||||
|
use doc && emake html |
||||
|
diff --git a/dev-libs/gmp/gmp-6.2.1-r5.ebuild b/dev-libs/gmp/gmp-6.2.1-r5.ebuild
|
||||
|
index 585425499..a32e1c107 100644
|
||||
|
--- a/dev-libs/gmp/gmp-6.2.1-r5.ebuild
|
||||
|
+++ b/dev-libs/gmp/gmp-6.2.1-r5.ebuild
|
||||
|
@@ -35,7 +35,10 @@ RESTRICT="!cpudetection? ( bindist )"
|
||||
|
BDEPEND=" |
||||
|
app-arch/xz-utils |
||||
|
sys-devel/m4 |
||||
|
+ sys-devel/flex
|
||||
|
+ sys-devel/bison
|
||||
|
" |
||||
|
+# https://bugs.gentoo.org/905905
|
||||
|
|
||||
|
DOCS=( AUTHORS ChangeLog NEWS README doc/configuration doc/isa_abi_headache ) |
||||
|
HTML_DOCS=( doc ) |
||||
|
diff --git a/sys-apps/portage/portage-3.0.44-r1.ebuild b/sys-apps/portage/portage-3.0.44-r1.ebuild
|
||||
|
index f6c5de541..e2df2848c 100644
|
||||
|
--- a/sys-apps/portage/portage-3.0.44-r1.ebuild
|
||||
|
+++ b/sys-apps/portage/portage-3.0.44-r1.ebuild
|
||||
|
@@ -177,6 +177,11 @@ python_prepare_all() {
|
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
+python_compile() {
|
||||
|
+ distutils-r1_python_compile \
|
||||
|
+ --executable="${EPREFIX}/usr/bin/${EPYTHON}"
|
||||
|
+}
|
||||
|
+
|
||||
|
python_compile_all() { |
||||
|
local targets=() |
||||
|
use doc && targets+=( docbook ) |
||||
|
@@ -195,6 +200,7 @@ python_install() {
|
||||
|
# Install sbin scripts to bindir for python-exec linking |
||||
|
# they will be relocated in pkg_preinst() |
||||
|
distutils-r1_python_install \ |
||||
|
+ --prefix="${EPREFIX}/usr" \
|
||||
|
--system-prefix="${EPREFIX}/usr" \ |
||||
|
--bindir="$(python_get_scriptdir)" \ |
||||
|
--docdir="${EPREFIX}/usr/share/doc/${PF}" \ |
||||
|
@@ -237,7 +243,7 @@ python_install_all() {
|
||||
|
} |
||||
|
|
||||
|
pkg_preinst() { |
||||
|
- if ! use build; then
|
||||
|
+ if [[ -z ${ROOT} ]] && ! use build; then
|
||||
|
python_setup |
||||
|
local sitedir=$(python_get_sitedir) |
||||
|
[[ -d ${D}${sitedir} ]] || die "${D}${sitedir}: No such directory" |
@ -0,0 +1,48 @@ |
|||||
|
Termux: Don't create hardlinks |
||||
|
|
||||
|
The termux environment doesn't support hardlinking (permission denied), so we |
||||
|
need to replace/stub out anything that relies on them, to at least get most of |
||||
|
the functionality of the package manager to work. |
||||
|
|
||||
|
--- portage-3.0.44.orig/bin/estrip
|
||||
|
+++ portage-3.0.44/bin/estrip
|
||||
|
@@ -281,7 +281,7 @@
|
||||
|
dst=${dst_dirname}/${dst_basename} |
||||
|
if [[ ! -e ${dst} ]]; then |
||||
|
debug-print "creating hard link: target: '${inode_debug}' name: '${dst}'" |
||||
|
- ln -L "${inode_debug}" "${dst}" || die "failed to create hard link '${dst}'"
|
||||
|
+ cp -aLT "${inode_debug}" "${dst}" || die "failed to create hard link '${dst}'"
|
||||
|
fi |
||||
|
else |
||||
|
dst_basename=${src_basename}.debug |
||||
|
@@ -340,7 +340,7 @@
|
||||
|
# So, use a lockfile to prevent interference (easily observed with |
||||
|
# dev-vcs/git which creates ~111 hardlinks to one file in |
||||
|
# /usr/libexec/git-core). |
||||
|
- while ! ln "${inode_link}" "${lockfile}" 2>/dev/null; do
|
||||
|
+ while ! ln -s "${inode_link}" "${lockfile}" 2>/dev/null; do
|
||||
|
(( --locktries > 0 )) || die "failed to acquire lock '${lockfile}'" |
||||
|
sleep 1 |
||||
|
done |
||||
|
@@ -374,9 +374,9 @@
|
||||
|
|
||||
|
if ${already_stripped} ; then |
||||
|
rm -f "${x}" || die "rm failed unexpectedly" |
||||
|
- ln "${inode_link}_stripped" "${x}" || die "ln failed unexpectedly"
|
||||
|
+ cp -aT "${inode_link}_stripped" "${x}" || die "ln failed unexpectedly"
|
||||
|
else |
||||
|
- ln "${x}" "${inode_link}_stripped" || die "ln failed unexpectedly"
|
||||
|
+ cp -aT "${x}" "${inode_link}_stripped" || die "ln failed unexpectedly"
|
||||
|
if [[ ${xt_data} ]] ; then |
||||
|
restore_xattrs <<< "${xt_data}" |
||||
|
fi |
||||
|
--- portage-3.0.44.orig/lib/portage/locks.py
|
||||
|
+++ portage-3.0.44/lib/portage/locks.py
|
||||
|
@@ -423,6 +423,7 @@
|
||||
|
if e.errno not in (errno.ENOENT, errno.ESTALE): |
||||
|
_raise_exc(e) |
||||
|
return (True, None) |
||||
|
+ return (False, fstat_st)
|
||||
|
|
||||
|
# Since stat is not reliable for removed files on NFS with the default |
||||
|
# file attribute cache behavior ('ac' mount option), create a temporary |
@ -0,0 +1 @@ |
|||||
|
portage-3.0.44-termux-disable-hardlinking.patch |
@ -0,0 +1,24 @@ |
|||||
|
Termux: Stub out some syscalls |
||||
|
|
||||
|
These syscalls are either blacklisted in Android's seccomp policy, or simply |
||||
|
not implemented by the running kernel (android kernels lag behind quite a bit!). |
||||
|
|
||||
|
Whichever of the two it is, calling any of these results in the process being |
||||
|
killed with SIGSYS, usually killing the entire process. To prevent this, we |
||||
|
stub them with an ENOSYS result, pretending they aren't implemented. |
||||
|
|
||||
|
--- glibc-2.36.orig/sysdeps/unix/sysv/linux/aarch64/sysdep.h
|
||||
|
+++ glibc-2.36/sysdeps/unix/sysv/linux/aarch64/sysdep.h
|
||||
|
@@ -167,7 +167,11 @@
|
||||
|
# undef INTERNAL_SYSCALL_RAW |
||||
|
# define INTERNAL_SYSCALL_RAW(name, nr, args...) \ |
||||
|
({ long _sys_result; \ |
||||
|
- { \
|
||||
|
+ switch (name) { \
|
||||
|
+ case SYS_ify(set_robust_list): \
|
||||
|
+ case SYS_ify(rseq): \
|
||||
|
+ case SYS_ify(faccessat2): \
|
||||
|
+ _sys_result = -ENOSYS; break; default: \
|
||||
|
LOAD_ARGS_##nr (args) \ |
||||
|
register long _x8 asm ("x8") = (name); \ |
||||
|
asm volatile ("svc 0 // syscall " # name \ |
@ -0,0 +1 @@ |
|||||
|
glibc-2.36-termux-stub-syscalls.patch |
@ -0,0 +1,5 @@ |
|||||
|
# The ebuild uses the perl-cross build system when it detects a cross build |
||||
|
# The regular perl build system sucks in general but breaks spectacularly in a |
||||
|
# setup like this, so it's best to avoid |
||||
|
|
||||
|
tc-is-cross-compiler() { true; } |
@ -0,0 +1,5 @@ |
|||||
|
dev-vcs/git -curl -gpg -perl -webdav -nls |
||||
|
app-editors/vim -crypt -nls |
||||
|
app-portage/portage-utils -qmanifest |
||||
|
sys-devel/m4 -nls |
||||
|
sys-apps/help2man -nls |
Loading…
Reference in new issue