#!/usr/bin/bash # This file is part of noxos and licensed under the MIT open source license set -e workspace_setup() { echo " --> Setting up workspace" mkdir -pv build mkdir -pv build/cmake echo "" } check_toolchain() { echo " --> Checking Toolchain" hash gcc echo " |--> found gcc" hash ld echo " |--> found ld" hash nasm echo " |--> found nasm" hash cmake echo " |--> found cmake" hash xorriso echo " |--> found xorriso" hash qemu-system-x86_64 echo " |--> found qemu" [ ! -d "/usr/share/ovmf/x64/" ] && echo "OVMF binaries not found!" && exit 255 echo " |--> found ovmf" echo " --> All checks passed" } kernel_build() { echo " --> Building kernel" cd build/cmake cmake -S ../.. -B . make cd ../.. echo "" } libnx_build() { cd ../libraries/libnx bash build.sh cd ../../kernel } libnxdrv_build() { cd ../libraries/libnxdrv bash build.sh cd ../../kernel } shell_build() { echo " --> Building shell" # gcc shell.c -o ramdisk/shell.elf -nostdlib -nolibc -fno-stack-protector -I../libraries/libnx/inc/public ../libraries/libnx/build/cmake/libnx.so gcc test_driver.c -o ramdisk/test_driver.nxkm -nostdlib -nolibc -I../libraries/libnxdrv/inc -L../libraries/libnxdrv/build -lnxdrv } limine_install() { echo " --> Installing Limine" cd build rm -rfv limine echo " |--> Cloning repository" git clone https://github.com/limine-bootloader/limine.git --branch=v4.x-branch-binary --depth=1 echo " |--> Compiling Limine" make -C limine cd .. echo "" } generate_initial_ramdisk() { echo " --> Generating initrd" tar -C ramdisk -cvf build/initrd.tar . } generate_image() { echo " --> Generating Image" cd build rm -rfv iso mkdir -pv iso cp limine/limine-cd.bin iso/ cp limine/limine-cd-efi.bin iso/ cp limine/limine.sys iso/ cp ../limine.cfg iso/ cp initrd.tar iso/ cp cmake/kernel iso/kernel.elf xorriso -as mkisofs -b limine-cd.bin \ -no-emul-boot -boot-load-size 4 -boot-info-table \ --efi-boot limine-cd-efi.bin \ -efi-boot-part --efi-boot-image --protective-msdos-label \ iso -o noxos.iso ./limine/limine-deploy noxos.iso rm -rfv iso cd .. echo "" } echo "!=====[ NoxOS build script ]=====!" case $1 in "check") check_toolchain ;; *) workspace_setup kernel_build [ ! -d "build/limine" ] && limine_install libnx_build libnxdrv_build shell_build generate_initial_ramdisk generate_image ;; esac echo "!=====[ Finished ]=====!"