[chore] Use gnu-efi as a part of project

This commit is contained in:
2026-05-29 19:06:37 +08:00
Unverified
parent 990c2a6295
commit d31cd01771
94 changed files with 22988 additions and 33 deletions
+58 -15
View File
@@ -1,30 +1,74 @@
CFLAGS = -Iinclude -Ignu-efi/inc -ffreestanding -fno-stack-protector -fno-stack-check -fshort-wchar -mno-red-zone -std=c17 -Wwrite-strings
CXXFLAGS = -Iinclude -Ignu-efi/inc -ffreestanding -fno-stack-protector -fno-stack-check -fshort-wchar -mno-red-zone -maccumulate-outgoing-args -std=c++17 -Wwrite-strings
LDFLAGS = -shared -Bsymbolic -Lgnu-efi/x86_64/lib -Lgnu-efi/x86_64/gnuefi -Tgnu-efi/gnuefi/elf_x86_64_efi.lds
LDLIBS = -lgnuefi -lefi --no-undefined
CFLAGS = -Iinclude -Iefi/inc -ffreestanding -fno-stack-protector -fno-stack-check -fshort-wchar -mno-red-zone -std=c17 -Wwrite-strings
CXXFLAGS = -Iinclude -Iefi/inc -ffreestanding -fno-stack-protector -fno-stack-check -fshort-wchar -mno-red-zone -maccumulate-outgoing-args -std=c++17 -Wwrite-strings
LDFLAGS = -shared -Bsymbolic -Tefi/gnuefi/elf_x86_64_efi.lds
LDLIBS = --no-undefined
EFI_CFLAGS = -Iefi/inc -Iefi/inc/x86_64 -Iefi/inc/protocol \
-ffreestanding -fno-stack-protector -fno-stack-check \
-fshort-wchar -mno-red-zone -maccumulate-outgoing-args \
-fPIC -fno-strict-aliasing -Wall -Wextra -Wstrict-prototypes \
-DGNU_EFI_USE_MS_ABI -DCONFIG_x86_64 -std=c11 -O2 -g
SRC_C = $(wildcard *.c)
SRC_CPP = $(wildcard */*.cpp) $(wildcard */*/*.cpp)
OBJ = $(SRC_C:%.c=build/%.o) $(SRC_CPP:%.cpp=build/%.o)
_bd:
@mkdir -p build/graphics build/kernel build/fonts build/kernel/memory
EFI_TOP_C = $(wildcard efi/lib/*.c)
EFI_TOP_S = $(wildcard efi/lib/*.S)
EFI_X86_C = $(wildcard efi/lib/x86_64/*.c)
EFI_X86_S = $(wildcard efi/lib/x86_64/*.S)
EFI_RT_C = $(wildcard efi/lib/runtime/*.c)
gnu-efi/x86_64/gnuefi/crt0-efi-x86_64.o:
@echo "* Building gnu-efi..."
@$(MAKE) -C gnu-efi ARCH=x86_64
EFI_CRT0_OBJ = build/efi/gnuefi/crt0-efi-x86_64.o
EFI_RELOC_OBJ = build/efi/gnuefi/reloc_x86_64.o
EFI_TOP_OBJ = $(EFI_TOP_C:efi/lib/%.c=build/efi/lib/%.o) $(EFI_TOP_S:efi/lib/%.S=build/efi/lib/%.o)
EFI_X86_OBJ = $(EFI_X86_C:efi/lib/x86_64/%.c=build/efi/lib/x86_64/%.o) $(EFI_X86_S:efi/lib/x86_64/%.S=build/efi/lib/x86_64/%.o)
EFI_RT_OBJ = $(EFI_RT_C:efi/lib/runtime/%.c=build/efi/lib/runtime/%.o)
EFI_OBJ = $(EFI_CRT0_OBJ) $(EFI_RELOC_OBJ) $(EFI_TOP_OBJ) $(EFI_X86_OBJ) $(EFI_RT_OBJ)
all: _bd gnu-efi/x86_64/gnuefi/crt0-efi-x86_64.o $(OBJ)
all: _bd $(EFI_OBJ) $(OBJ)
@echo "* Linking EFI..."
@ld $(LDFLAGS) gnu-efi/x86_64/gnuefi/crt0-efi-x86_64.o $(OBJ) -o build/boot.so $(LDLIBS)
@ld $(LDFLAGS) $(EFI_OBJ) $(OBJ) -o build/boot.so $(LDLIBS)
@objcopy -j .text -j .sdata -j .data -j .rodata -j .dynamic -j .dynsym -j .rel -j .rela -j .rel.* -j .rela.* -j .reloc --output-target efi-app-x86_64 --subsystem=10 build/boot.so build/BOOTX64.EFI
_bd:
@mkdir -p build/graphics build/kernel build/fonts build/kernel/memory \
build/efi/lib build/efi/lib/x86_64 build/efi/lib/runtime build/efi/gnuefi
$(EFI_CRT0_OBJ): efi/gnuefi/crt0-efi-x86_64.S | _bd
@echo "Compile AS $<"
@gcc $(EFI_CFLAGS) -c $< -o $@
$(EFI_RELOC_OBJ): efi/gnuefi/reloc_x86_64.c | _bd
@echo "Compile C $<"
@gcc $(EFI_CFLAGS) -c $< -o $@
build/efi/lib/%.o: efi/lib/%.c | _bd
@echo "Compile C $<"
@gcc $(EFI_CFLAGS) -c $< -o $@
build/efi/lib/%.o: efi/lib/%.S | _bd
@echo "Compile AS $<"
@gcc $(EFI_CFLAGS) -c $< -o $@
build/efi/lib/x86_64/%.o: efi/lib/x86_64/%.c | _bd
@echo "Compile C $<"
@gcc $(EFI_CFLAGS) -c $< -o $@
build/efi/lib/x86_64/%.o: efi/lib/x86_64/%.S | _bd
@echo "Compile AS $<"
@gcc $(EFI_CFLAGS) -c $< -o $@
build/efi/lib/runtime/%.o: efi/lib/runtime/%.c | _bd
@echo "Compile C $<"
@gcc $(EFI_CFLAGS) -c $< -o $@
build/%.o: %.c
@echo "Compile C File $< to $@"
@echo "Compile C $<"
@gcc $(CFLAGS) -c $< -o $@
build/%.o: %.cpp
@echo "Compile CPP File $< to $@"
@echo "Compile CPP $<"
@g++ $(CXXFLAGS) -c $< -o $@
vdir: all
@@ -38,6 +82,5 @@ run: vdir
clean:
@echo "Cleaning old files"
@rm -rf build vdir
@$(MAKE) -C gnu-efi clean 2>/dev/null || true
.PHONY: all vdir run clean _bd
.PHONY: all vdir run clean _bd