From ea68d596f750c72f6a7b87c68cb1201dc75166df Mon Sep 17 00:00:00 2001 From: mintsuki Date: Tue, 26 Sep 2023 19:40:23 -0500 Subject: [PATCH] Move to src/obj directory structure --- kernel/.gitignore | 4 ++-- kernel/GNUmakefile | 27 +++++++++++++++------------ kernel/{kernel.c => src/main.c} | 0 3 files changed, 17 insertions(+), 14 deletions(-) rename kernel/{kernel.c => src/main.c} (100%) diff --git a/kernel/.gitignore b/kernel/.gitignore index 69552a9..5eedd3a 100644 --- a/kernel/.gitignore +++ b/kernel/.gitignore @@ -1,4 +1,4 @@ -/limine.h +/src/limine.h +/obj *.elf *.o -*.d diff --git a/kernel/GNUmakefile b/kernel/GNUmakefile index 1c66252..a3c5b0b 100644 --- a/kernel/GNUmakefile +++ b/kernel/GNUmakefile @@ -61,7 +61,7 @@ override CFLAGS += \ # Internal C preprocessor flags that should not be changed by the user. override CPPFLAGS := \ - -I. \ + -I src \ $(CPPFLAGS) \ -MMD \ -MP @@ -84,17 +84,17 @@ override NASMFLAGS += \ # Use "find" to glob all *.c, *.S, and *.asm files in the tree and obtain the # object and header dependency file names. -override CFILES := $(shell find -L . -type f -name '*.c') -override ASFILES := $(shell find -L . -type f -name '*.S') -override NASMFILES := $(shell find -L . -type f -name '*.asm') -override OBJ := $(CFILES:.c=.c.o) $(ASFILES:.S=.S.o) $(NASMFILES:.asm=.asm.o) -override HEADER_DEPS := $(CFILES:.c=.c.d) $(ASFILES:.S=.S.d) +override CFILES := $(shell cd src && find -L . -type f -name '*.c') +override ASFILES := $(shell cd src && find -L . -type f -name '*.S') +override NASMFILES := $(shell cd src && find -L . -type f -name '*.asm') +override OBJ := $(addprefix obj/,$(CFILES:.c=.c.o) $(ASFILES:.S=.S.o) $(NASMFILES:.asm=.asm.o)) +override HEADER_DEPS := $(addprefix obj/,$(CFILES:.c=.c.d) $(ASFILES:.S=.S.d)) # Default target. .PHONY: all all: $(KERNEL) -limine.h: +src/limine.h: curl -Lo $@ https://github.com/limine-bootloader/limine/raw/trunk/limine.h # Link rules for the final kernel executable. @@ -105,22 +105,25 @@ $(KERNEL): GNUmakefile linker.ld $(OBJ) -include $(HEADER_DEPS) # Compilation rules for *.c files. -%.c.o: %.c GNUmakefile limine.h +obj/%.c.o: src/%.c GNUmakefile src/limine.h + mkdir -p obj $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ # Compilation rules for *.S files. -%.S.o: %.S GNUmakefile limine.h +obj/%.S.o: src/%.S GNUmakefile src/limine.h + mkdir -p obj $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ # Compilation rules for *.asm (nasm) files. -%.asm.o: %.asm GNUmakefile +obj/%.asm.o: src/%.asm GNUmakefile + mkdir -p obj nasm $(NASMFLAGS) $< -o $@ # Remove object files and the final executable. .PHONY: clean clean: - rm -rf $(KERNEL) $(OBJ) $(HEADER_DEPS) + rm -rf $(KERNEL) obj .PHONY: distclean distclean: clean - rm -f limine.h + rm -f src/limine.h diff --git a/kernel/kernel.c b/kernel/src/main.c similarity index 100% rename from kernel/kernel.c rename to kernel/src/main.c