#!/usr/bin/sh ASM_PATH="./" TARGET_PATH="target/" TMP_PATH="$TARGET_PATH/temp/" OBJ_PATH="$TMP_PATH" LINK_SCRIPT_PATH="./" remove_target() { rm -rf $TARGET_PATH &> /dev/null } create_target() { mkdir $TARGET_PATH &> /dev/null mkdir $TMP_PATH &> /dev/null } cleanup_temp() { rm -f $TMP_PATH/* &> /dev/null } # --------------------------------------------------- build_kernel_elf() { create_target nasm -felf64 $ASM_PATH/multiboot_header.asm -o $OBJ_PATH/multiboot_header.o nasm -felf64 $ASM_PATH/boot.asm -o $OBJ_PATH/boot.o ld -n -o $TARGET_PATH/kernel.bin -T $LINK_SCRIPT_PATH/linker.ld $OBJ_PATH/*.o cleanup_temp } build_kernel_iso_from_elf() { create_target echo NIY: build kernel from elf } build_kernel_iso() { build_kernel_elf build_kernel_iso_from_elf } build_init() { create_target } build_clean() { remove_target } build_all() { build_kernel } not_exec=true for arg in "$@"; do case "$arg" in "kernel-elf") build_kernel_elf;; "kernel-iso-from-elf") build_kernel_iso_from_elf;; "kernel-iso") build_kernel_iso;; "init") build_init;; "clean") build_clean;; "all") build_all;; *) echo "warn: ignoring unknown option '$arg'" continue;; esac not_exec=false break done print_help() { echo "usage: $0 option" echo "options: " echo " init initialise directory" echo " clean cleanup binaries" echo echo " kernel-elf build the kernel-elf" echo " kernel-iso-from-elf build the kernel-iso from an existing kernel-elf" echo " kernel-iso build the kernel-elf and the kernel-iso" echo " all build kernel" } if $not_exec; then echo "error: please specify an argument" echo print_help exit -1 fi