updated build scripts
This commit is contained in:
Executable
+109
@@ -0,0 +1,109 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Colors
|
||||
GREEN='\033[0;32m'
|
||||
BLUE='\033[0;34m'
|
||||
YELLOW='\033[0;33m'
|
||||
RED='\033[0;31m'
|
||||
BOLD='\033[1m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Error handling
|
||||
set -e
|
||||
trap 'echo -e "${RED}${BOLD}error${NC}: build failed" >&2' ERR
|
||||
|
||||
# Get absolute path to project root
|
||||
project_root=$(cd "$script_dir/.." &>/dev/null && pwd)
|
||||
build_dir="$project_root/build"
|
||||
iso_root="$build_dir/iso_root"
|
||||
|
||||
# Logging functions
|
||||
info() {
|
||||
echo -e "${BLUE}${BOLD}info${NC}: $1"
|
||||
}
|
||||
|
||||
compiling() {
|
||||
echo -e "${GREEN}${BOLD}Compiling${NC}: $1"
|
||||
}
|
||||
|
||||
warning() {
|
||||
echo -e "${YELLOW}${BOLD}warning${NC}: $1" >&2
|
||||
}
|
||||
|
||||
building() {
|
||||
echo -e "${GREEN}${BOLD}Building${NC}: $1"
|
||||
}
|
||||
|
||||
copying() {
|
||||
echo -e "${GREEN}${BOLD} Copying${NC}: $1 to $2"
|
||||
}
|
||||
|
||||
error() {
|
||||
echo -e "${RED}${BOLD}error${NC}: $1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
copy_file() {
|
||||
copying $1 $2
|
||||
cp "$1" "$2" || error $3
|
||||
}
|
||||
|
||||
# Check if we're running tests
|
||||
if [[ $1 == *"deps"* ]]; then
|
||||
kernel_path="$1"
|
||||
else
|
||||
# Build the kernel normally
|
||||
cd "$project_root"
|
||||
# cargo build
|
||||
kernel_path="$build_dir/target/x86_64-kernel/debug/kernel"
|
||||
fi
|
||||
|
||||
# Check for required tools
|
||||
check_tools() {
|
||||
local missing=0
|
||||
for tool in xorriso git qemu-system-x86_64; do
|
||||
if ! command -v $tool >/dev/null 2>&1; then
|
||||
error "required tool '$tool' is not installed"
|
||||
missing=1
|
||||
fi
|
||||
done
|
||||
if [ $missing -eq 1 ]; then
|
||||
error "missing required tools"
|
||||
fi
|
||||
}
|
||||
|
||||
# Create build directory structure
|
||||
info "Creating build directory structure"
|
||||
mkdir -p "$iso_root/boot/limine"
|
||||
mkdir -p "$iso_root/EFI/BOOT"
|
||||
|
||||
# Clone Limine if needed
|
||||
if [ ! -d "$build_dir/limine" ]; then
|
||||
compiling "limine bootloader"
|
||||
cd "$build_dir"
|
||||
git clone https://github.com/limine-bootloader/limine.git --branch=v9.x-binary --depth=1 "$build_dir/limine" || error "failed to clone limine"
|
||||
make -C "$build_dir/limine" || error "failed to build limine"
|
||||
cd "$project_root"
|
||||
fi
|
||||
|
||||
# Copy files
|
||||
info "Copying files to ISO root"
|
||||
copy_file "$kernel_path" "$iso_root/boot/kernel" "failed to copy kernel"
|
||||
copy_file "$project_root/config/limine.conf" "$iso_root/boot/limine/limine.conf" "failed to copy limine config"
|
||||
copy_file "$build_dir/limine/limine-bios-cd.bin" "$iso_root/boot/limine/" "failed to copy limine-bios-cd.bin"
|
||||
copy_file "$build_dir/limine/limine-uefi-cd.bin" "$iso_root/boot/limine/" "failed to copy limine-uefi-cd.bin"
|
||||
copy_file "$build_dir/limine/limine-bios.sys" "$iso_root/boot/limine/" "failed to copy limine-bios.sys"
|
||||
copy_file "$build_dir/limine/BOOTX64.EFI" "$iso_root/EFI/BOOT/" "failed to copy BOOTX64.EFI"
|
||||
copy_file "$build_dir/limine/BOOTIA32.EFI" "$iso_root/EFI/BOOT/" "failed to copy BOOTIA32.EFI"
|
||||
|
||||
# Create ISO
|
||||
building "bootable ISO image"
|
||||
xorriso -as mkisofs -R -r -J -b boot/limine/limine-bios-cd.bin \
|
||||
-no-emul-boot -boot-load-size 4 -boot-info-table -hfsplus \
|
||||
-apm-block-size 2048 --efi-boot boot/limine/limine-uefi-cd.bin \
|
||||
-efi-boot-part --efi-boot-image --protective-msdos-label \
|
||||
"$iso_root" -o "$build_dir/image.iso" || error "failed to create ISO"
|
||||
|
||||
# Install Limine
|
||||
info "Installing Limine bootloader"
|
||||
"$build_dir/limine/limine" bios-install "$build_dir/image.iso" || error "failed to install limine"
|
||||
Reference in New Issue
Block a user