61 lines
2.3 KiB
Makefile
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
|