1#!/usr/bin/env bash 2 3set -ex 4 5ARCH=$1 6 7TOP=$(pwd) 8 9BUILDTOOLS=$TOP/buildtools 10HAIKU=$TOP/haiku 11OUTPUT=/tools 12SYSROOT=$OUTPUT/cross-tools-$ARCH/sysroot 13PACKAGE_ROOT=/system 14 15hide_output() { 16 set +x 17 on_err=" 18echo ERROR: An error was encountered with the build. 19cat /tmp/build.log 20exit 1 21" 22 trap "$on_err" ERR 23 bash -c "while true; do sleep 30; echo \$(date) - building ...; done" & 24 PING_LOOP_PID=$! 25 "$@" &> /tmp/build.log 26 trap - ERR 27 kill $PING_LOOP_PID 28 set -x 29} 30 31# First up, build a cross-compiler 32git clone --depth=1 https://git.haiku-os.org/haiku 33git clone --depth=1 https://git.haiku-os.org/buildtools 34cd $BUILDTOOLS/jam 35hide_output make 36hide_output ./jam0 install 37mkdir -p $OUTPUT 38cd $OUTPUT 39hide_output $HAIKU/configure --build-cross-tools $ARCH $TOP/buildtools 40 41# Set up sysroot to redirect to /system 42mkdir -p $SYSROOT/boot 43mkdir -p $PACKAGE_ROOT 44ln -s $PACKAGE_ROOT $SYSROOT/boot/system 45 46# Build needed packages and tools for the cross-compiler 47hide_output jam -q haiku.hpkg haiku_devel.hpkg '<build>package' 48 49# Set up our sysroot 50cp $OUTPUT/objects/linux/lib/*.so /lib/x86_64-linux-gnu 51cp $OUTPUT/objects/linux/x86_64/release/tools/package/package /bin/ 52find $SYSROOT/../bin/ -type f -exec ln -s {} /bin/ \; 53 54# Extract packages 55package extract -C $PACKAGE_ROOT $OUTPUT/objects/haiku/$ARCH/packaging/packages/haiku.hpkg 56package extract -C $PACKAGE_ROOT $OUTPUT/objects/haiku/$ARCH/packaging/packages/haiku_devel.hpkg 57find $OUTPUT/download/ -name '*.hpkg' -exec package extract -C $PACKAGE_ROOT {} \; 58 59# Fix libgcc_s so we can link to it 60cd $PACKAGE_ROOT/develop/lib 61ln -s ../../lib/libgcc_s.so libgcc_s.so 62 63# Clean up 64rm -rf $BUILDTOOLS $HAIKU $OUTPUT/Jamfile $OUTPUT/attributes $OUTPUT/build \ 65 $OUTPUT/build_packages $OUTPUT/download $OUTPUT/objects 66