banan-os/script/build.sh

129 lines
2.1 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
$BANAN_ROOT_DIR/ports/build.sh
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 [ -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 -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_SYSROOT.tar
rm -f $BANAN_DISK_IMAGE_PATH
;;
distclean)
rm -rf $BANAN_BUILD_DIR
;;
*)
build_target $1
;;
esac