From bc6d3db757b108cb76a8fdad9cfeddbbe19f4c82 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Mon, 2 May 2022 19:15:03 -0500 Subject: [PATCH] Add mkroot dynamic linking support, ala "scripts/mkroot.sh dynamic". --- scripts/mkroot.sh | 14 ++++++++------ scripts/root/dynamic | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 6 deletions(-) create mode 100755 scripts/root/dynamic diff --git a/scripts/mkroot.sh b/scripts/mkroot.sh index 4d3a2af5..3774cb09 100755 --- a/scripts/mkroot.sh +++ b/scripts/mkroot.sh @@ -143,18 +143,20 @@ nobody:x:65534:65534:nobody:/proc/self:/dev/null EOF echo -e 'root:x:0:\nguest:x:500:\nnobody:x:65534:' > "$ROOT"/etc/group || exit 1 +# Build any packages listed on command line +for i in ${PKG:+plumbing $PKG}; do + announce "$i"; PATH="$PKGDIR:$PATH" source $i || die $i +done + # Build static toybox with existing .config if there is one, else defconfig+sh announce toybox [ ! -z "$PENDING" ] && rm -f .config [ -e .config ] && CONF=silentoldconfig || unset CONF for i in $PENDING sh route; do XX="$XX"$'\n'CONFIG_${i^^?}=y; done -LDFLAGS=--static PREFIX="$ROOT" make clean \ +[ -e "$ROOT"/lib/libc.so ] || export LDFLAGS=--static +PREFIX="$ROOT" make clean \ ${CONF:-defconfig KCONFIG_ALLCONFIG=<(echo "$XX")} toybox install || exit 1 - -# Build any packages listed on command line -for i in ${PKG:+plumbing $PKG}; do - announce "$i"; PATH="$PKGDIR:$PATH" source $i || die $i -done +unset LDFLAGS # ------------------ Part 3: Build + package bootable system ------------------ diff --git a/scripts/root/dynamic b/scripts/root/dynamic new file mode 100755 index 00000000..c82b1ddb --- /dev/null +++ b/scripts/root/dynamic @@ -0,0 +1,15 @@ +#!/bin/echo Try "scripts/mkroot.sh dynamic" + +# Copy dynamic libraries from cross compiler + +"${CROSS_COMPILE}cc" -xc - <<< 'void main(void) {;}' || + die "${CROSS_COMPILE}cc can't create dynamic binaries" +LDSO="$("${CROSS_COMPILE}readelf" -a a.out | sed -n 's/.*interpreter: \([^]]*\)[]]$/\1/p')" +mkdir -p "$ROOT"/"$(dirname "$LDSO")" && + cp "$LDSO" "$ROOT"/"$LDSO" || die "Couldn't copy ldso" +unset LDSO + +"${CROSS_COMPILE}cc" -print-search-dirs | sed -n 's/libraries: =//p' | \ + tr : '\n' | while read i; do + [ -e "$i" ] && find "$i" -maxdepth 1 -name '*.so' -o -name '*.so*[0-9]' + done | while read i; do cp -a "$i" "$ROOT"/lib/; done -- 2.39.2