Files
banan-os/script/build.sh
Bananymous 581caff638 BuildSystem: Install base sysroot only once
Base sysroot is not only installed when creating the syroot directory
for the first time. To get it installed again, you have to either delete
the old sysroot diretory or run clean target

This makes it so its actually possible to edit files specified in the
base sysroot without random hacks.
2024-12-10 16:44:59 +02:00

136 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
set -e
export BANAN_SCRIPT_DIR=$(dirname $(realpath $0))
source $BANAN_SCRIPT_DIR/config.sh
FAKEROOT_FILE="$BANAN_BUILD_DIR/fakeroot-context"
run_fakeroot() {
if [ ! -f $FAKEROOT_FILE ]; then
touch $FAKEROOT_FILE
fi
fakeroot -i $FAKEROOT_FILE -s $FAKEROOT_FILE -- /bin/bash -c '$@' bash $@
}
make_build_dir () {
mkdir -p $BANAN_BUILD_DIR
cd $BANAN_BUILD_DIR
if ! [[ -f "build.ninja" ]]; then
$BANAN_CMAKE --toolchain=$BANAN_TOOLCHAIN_DIR/Toolchain.txt -G Ninja $BANAN_ROOT_DIR
fi
}
build_target () {
if ! [[ -f $BANAN_CMAKE ]]; then
echo "cmake not found, please re-run toolchain compilation script"
exit 1
fi
if ! type ninja &> /dev/null ; then
echo "ninja not found" >&2
exit 1
fi
make_build_dir
if [[ $# -eq 0 ]]; then
echo "No target provided"
exit 1
fi
cd $BANAN_BUILD_DIR
run_fakeroot ninja $1
}
build_toolchain () {
$BANAN_TOOLCHAIN_DIR/build.sh
}
create_image () {
build_target all
build_target install
pushd $BANAN_SYSROOT >/dev/null
run_fakeroot tar cf ${BANAN_SYSROOT_TAR} *
popd >/dev/null
$BANAN_SCRIPT_DIR/image.sh "$1"
}
run_qemu () {
create_image
$BANAN_SCRIPT_DIR/qemu.sh $@
}
run_bochs () {
create_image
$BANAN_SCRIPT_DIR/bochs.sh $@
}
if [ ! -d $BANAN_SYSROOT ]; then
mkdir -p $BANAN_SYSROOT
pushd $BANAN_SYSROOT
run_fakeroot tar xf ${BANAN_ROOT_DIR}/base-sysroot.tar.gz
popd
fi
if [ -v QEMU_ACCEL ]; then
:
elif type kvm-ok &> /dev/null; then
if kvm-ok &> /dev/null; then
QEMU_ACCEL="-accel kvm"
fi
elif [[ -c /dev/kvm ]]; then
if [[ -r /dev/kvm ]] && [[ -w /dev/kvm ]]; then
QEMU_ACCEL="-accel kvm"
else
echo "You don't have read/write permissions for /dev/kvm" >&2
fi
fi
if [[ $# -eq 0 ]]; then
echo "No argument given"
exit 1
fi
case $1 in
toolchain)
build_toolchain
;;
image)
create_image
;;
image-full)
create_image full
;;
qemu)
run_qemu -serial stdio $QEMU_ACCEL
;;
qemu-nographic)
run_qemu -nographic $QEMU_ACCEL
;;
qemu-debug)
run_qemu -serial stdio -d int -action reboot=shutdown,shutdown=pause
;;
bochs)
run_bochs
;;
check-fs)
$BANAN_SCRIPT_DIR/check-fs.sh
;;
clean)
build_target clean
rm -f $FAKEROOT_FILE
rm -rf $BANAN_SYSROOT
rm -f $BANAN_SYSROOT.tar
rm -f $BANAN_DISK_IMAGE_PATH
;;
distclean)
rm -rf $BANAN_BUILD_DIR
find $BANAN_ROOT_DIR/ports -name '.compile_hash' -exec rm {} +
;;
*)
build_target $1
;;
esac