# 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
