#!/bin/bash set -e export BANAN_SCRIPT_DIR=$(dirname $(realpath $0)) source $BANAN_SCRIPT_DIR/config.sh FAKEROOT_FILE="$BANAN_BUILD_DIR/fakeroot-context" if [[ -z $CMAKE_COMMAND ]]; then echo "No usable cmake binary found" >&2 exit 1 fi run_fakeroot() { 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 $CMAKE_COMMAND --toolchain=$BANAN_TOOLCHAIN_DIR/Toolchain.txt -G Ninja $BANAN_ROOT_DIR fi } build_target () { make_build_dir if [[ $# -eq 0 ]]; then echo "No target provided" exit 1 fi cd $BANAN_BUILD_DIR run_fakeroot ninja $1 } build_toolchain () { if [[ -f $BANAN_TOOLCHAIN_PREFIX/bin/$BANAN_TOOLCHAIN_TRIPLE_PREFIX-gcc ]]; then echo "You already seem to have a toolchain." read -e -p "Do you want to rebuild it [y/N]? " choice if ! [[ "$choice" == [Yy]* ]]; then echo "Aborting toolchain rebuild" exit 0 fi fi $BANAN_TOOLCHAIN_DIR/build.sh } create_image () { build_target bootloader build_target install-sysroot $BANAN_ROOT_DIR/ports/build.sh build_target package-sysroot $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 [[ -c /dev/kvm ]]; then QEMU_ACCEL="-accel kvm" 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 -no-reboot ;; 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_DISK_IMAGE_PATH ;; *) build_target $1 ;; esac