# 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