From f8529d09bf1555c2dda61f5841b7ad4f42ce9715 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Thu, 17 Apr 2025 13:44:55 -0400 Subject: elf sym loading --- Makefile | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 58 insertions(+), 15 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 52135b9..bb4380c 100644 --- a/Makefile +++ b/Makefile @@ -3,45 +3,88 @@ .PHONY: build fmt clean qemu .SILENT: +AS ?= as +CC ?= cc +LD ?= ld +CPP ?= cpp + +CPPFLAGS += -Ikernel/include + +CFLAGS += -O0 +CFLAGS += -std=c11 +CFLAGS += -Wall -Wextra -pedantic +CFLAGS += -fno-pie -fno-stack-protector +CFLAGS += -fno-omit-frame-pointer -ffreestanding +CFLAGS += -fno-builtin +CFLAGS += -D DEBUG -g +CFLAGS += $(CPPFLAGS) + +LDFLAGS += -nmagic --no-warn-rwx-segments -nostdlib -E + +SRC=kernel +BIN=bin +KERNEL=kernel.bin +ISO=os.iso + +H_SRC = $(shell find $(SRC) -type f -name "*.h") +A_SRC = $(shell find $(SRC) -type f -name "*.S") +A_OBJ = $(patsubst %.S,$(BIN)/%.S.o,$(A_SRC)) +C_SRC = $(shell find $(SRC) -type f -name "*.c") +C_OBJ = $(patsubst %.c,$(BIN)/%.o,$(C_SRC)) + UNAME := $(shell uname) QEMU = qemu-system-x86_64 -QEMUOPTS = -cdrom bin/os.iso \ +QEMUOPTS = -cdrom $(BIN)/$(ISO) \ -no-reboot \ -serial mon:stdio \ -m 4G \ -name kern -qemu: bin/os.iso +qemu: $(BIN)/$(ISO) $(QEMU) $(QEMUOPTS) -qemu-kvm: bin/os.iso +qemu-kvm: $(BIN)/$(ISO) $(QEMU) -cpu host --enable-kvm $(QEMUOPTS) -qemu-nox: bin/os.iso +qemu-nox: $(BIN)/$(ISO) $(QEMU) $(QEMUOPTS) -nographic -qemu-gdb: bin/os.iso +qemu-gdb: $(BIN)/$(ISO) $(QEMU) $(QEMUOPTS) -S -gdb tcp::1337 -qemu-gdb-nox: bin/os.iso +qemu-gdb-nox: $(BIN)/$(ISO) $(QEMU) $(QEMUOPTS) -nographic -S -gdb tcp::1337 gdb: gdb -q -n -x config/gdbinit clean: - rm -fr .zig-cache - rm -fr bin + rm -fr $(BIN) + +build: $(BIN)/$(ISO) + +$(A_OBJ): $(BIN)/%.S.o : %.S + mkdir -p $(@D) + printf "\033[33m AS \033[0m%s\n" $< + $(CPP) $(CPPFLAGS) -o $@.cpp $< + $(AS) -o $@ $@.cpp + +$(C_OBJ): $(BIN)/%.o : %.c + mkdir -p $(@D) + printf "\033[34m CC \033[0m%s\n" $< + $(CC) -c $(CFLAGS) -o $@ $< -build: - zig build +$(BIN)/$(KERNEL): $(C_OBJ) $(A_OBJ) + mkdir -p $(@D) + printf "\033[32m LD \033[0m%s\n" $@ + $(LD) $(LDFLAGS) -T config/kernel.ld -o $(BIN)/$(KERNEL) $(A_OBJ) $(C_OBJ) -bin/os.iso: build - mkdir -p bin/iso/boot/grub - cp config/grub.cfg bin/iso/boot/grub - cp bin/kernel bin/iso/boot - grub-mkrescue -o bin/os.iso bin/iso 2>/dev/null +$(BIN)/$(ISO): $(BIN)/$(KERNEL) + mkdir -p $(BIN)/iso/boot/grub + cp config/grub.cfg $(BIN)/iso/boot/grub + cp $(BIN)/$(KERNEL) $(BIN)/iso/boot + grub-mkrescue -o $(BIN)/$(ISO) bin/iso 2>/dev/null fmt: clang-format -i $(shell find -type f -name "*.[ch]" -and -not -path "./kernel/old/*") -- cgit v1.2.3-freya