From 6c3188cf0e551cd07e28398262cffb8b5b82a114 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Sun, 2 Oct 2016 22:41:55 -0500 Subject: Add install_airlock target for hermetic build environment setup, and rebuild headers during install to make other install targets robust against single command builds between "make" and "make install" of multiplexer version. --- scripts/install.sh | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) (limited to 'scripts') diff --git a/scripts/install.sh b/scripts/install.sh index 961341e6..7f344986 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -23,11 +23,15 @@ do # Use {,usr}/{bin,sbin} paths instead of all files in one directory? [ "$1" == "--long" ] && LONG_PATH="bin/" + # Symlink host toolchain binaries to destination to create cross compile $PATH + [ "$1" == "--airlock" ] && AIRLOCK=1 + shift done echo "Compile instlist..." +NOBUILD=1 scripts/make.sh $DEBUG $HOSTCC -I . scripts/install.c -o generated/instlist || exit 1 COMMANDS="$(generated/instlist $LONG_PATH)" @@ -88,4 +92,61 @@ do fi done +[ -z "$AIRLOCK" ] && exit 0 + +# --airlock creates a single directory you can point the $PATH to for cross +# compiling, which contains just toybox and symlinks to toolchain binaries. + +# This not only means you're building with a known set of tools (insulated from +# variations in the host distro), but that everything else is NOT in your PATH +# and thus various configure stages won't find things on thie host that won't +# be there on the target (such as the distcc build noticing the host has +# python and deciding to #include Python.h). + +# The following are commands toybox should provide, but doesn't yet. +# For now symlink the host version. This list must go away by 1.0. + +PENDING="bunzip2 bzcat dd diff expr ftpd ftpget ftpput gunzip less ping route tar test tr vi wget zcat awk bzip2 fdisk gzip sh sha512sum unxz xzcat" + +# "gcc" should go away for llvm, but some things still hardwire it +TOOLCHAIN="ar as nm cc make ld gcc objdump" + +if [ ! -z "$AIRLOCK" ] +then + + # Tools needed to build packages + for i in ar as nm cc make ld gcc objdump $PENDING $HOST_EXTRA + do + if [ ! -f "$i" ] + then + # Loop through each instance, populating fallback directories (used by + # things like distcc, which require multiple instances of the same binary + # in a known order in the $PATH). + + X=0 + FALLBACK="$PREFIX" + which -a "$i" | while read j + do + if [ ! -e "$FALLBACK/$i" ] + then + mkdir -p "$FALLBACK" && + ln -sf "$j" "$FALLBACK/$i" || exit 1 + fi + + X=$[$X+1] + FALLBACK="$PREFIX/fallback-$X" + done + + if [ ! -f "$PREFIX/$i" ] + then + echo "Toolchain component missing: $i" >&2 + EXIT=1 + fi + fi +done + + + +fi + exit $EXIT -- cgit v1.2.3