#!/usr/bin/bash # Copyright 2023 Antifallobst # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the “Software”), to deal in # the Software without restriction, including without limitation the rights to use, # copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the # Software, and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. 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 "" } 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/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 generate_initial_ramdisk generate_image ;; esac echo "!=====[ Finished ]=====!"