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