Files
ViperOS/boot/Makefile
2026-07-19 12:38:20 +08:00

61 lines
2.3 KiB
Makefile

# Bootloader Makefile - Using WSL to Compile
BUILD_DIR = ../build/boot
DISK_DIR = ../disk/EFI/BOOT
SOURCE = ./boot.c
EFI_TARGET = $(BUILD_DIR)/bootx64.efi
BOOT_OBJ = $(BUILD_DIR)/boot.o
BOOT_SO = $(BUILD_DIR)/boot.so
DISK_TARGET = $(DISK_DIR)/bootx64.efi
all: $(EFI_TARGET)
build: $(EFI_TARGET)
$(BUILD_DIR):
@mkdir -p $(BUILD_DIR)
$(DISK_DIR):
@mkdir -p $(DISK_DIR)
$(BOOT_OBJ): $(SOURCE) | $(BUILD_DIR)
@echo "=== Compiling Bootloader ==="
wsl -d Ubuntu -- bash -c "gcc -DCONFIG_x86_64 -Wno-error=pragmas -std=c11 -DGNU_EFI_USE_MS_ABI -maccumulate-outgoing-args -mno-red-zone -mno-avx -fshort-wchar -fPIC -g -O2 -Wall -Wextra -Wstrict-prototypes -Werror -fno-strict-aliasing -ffreestanding -fno-stack-protector -fno-merge-all-constants -I. -I../_UNCADK/tools/gnu-efi/inc -I../_UNCADK/tools/gnu-efi/inc/x86_64 -I../_UNCADK/tools/gnu-efi/inc/protocol -c boot.c -o ../build/boot/boot.o"
$(BOOT_SO): $(BOOT_OBJ)
@echo "=== Linking Bootloader ==="
wsl -d Ubuntu -- bash -c "ld -nostdlib --warn-common --no-undefined --fatal-warnings --build-id=sha1 -z norelro -z nocombreloc --no-dynamic-linker -T ../_UNCADK/tools/gnu-efi/gnuefi/elf_x86_64_efi.lds -pie -Bsymbolic -L../_UNCADK/tools/gnu-efi/x86_64/lib -L../_UNCADK/tools/gnu-efi/x86_64/gnuefi ../_UNCADK/tools/gnu-efi/x86_64/gnuefi/crt0-efi-x86_64.o ../build/boot/boot.o -lefi -lgnuefi -o ../build/boot/boot.so"
$(EFI_TARGET): $(BOOT_SO)
@echo "=== Creating EFI Application ==="
wsl -d Ubuntu -- bash -c "objcopy -j .text -j .sdata -j .data -j .dynamic -j .rodata -j .rel -j .rela -j .reloc --target=efi-app-x86_64 ../build/boot/boot.so ../disk/EFI/BOOT/bootx64.efi"
@echo "Bootloader built: $(EFI_TARGET)"
$(DISK_TARGET): $(EFI_TARGET) | $(DISK_DIR)
@echo "Installing bootloader to disk..."
cp $(EFI_TARGET) $(DISK_TARGET)
install: $(DISK_TARGET)
quick-build: $(EFI_TARGET)
clean:
@echo "Cleaning bootloader build..."
rm -rf $(BUILD_DIR)
rm -f $(DISK_TARGET)
@echo "Bootloader build cleaned"
clean-build: clean
clean-all: clean
info:
@echo "=== Bootloader Build Information ==="
@echo "Source: $(SOURCE)"
@echo "Build directory: $(BUILD_DIR)"
@echo "Target: $(EFI_TARGET)"
@echo "Disk target: $(DISK_TARGET)"
@echo "===================================="
.PHONY: all build install clean clean-build clean-all quick-build info