summaryrefslogtreecommitdiff
path: root/kernel/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/Makefile')
-rw-r--r--kernel/Makefile39
1 files changed, 39 insertions, 0 deletions
diff --git a/kernel/Makefile b/kernel/Makefile
new file mode 100644
index 0000000..19051b9
--- /dev/null
+++ b/kernel/Makefile
@@ -0,0 +1,39 @@
+### Copyright (c) 2025 Freya Murphy <freya@freyacat.org>
+
+include ../config.mk
+
+.PHONY: build fmt clean qemu
+.SILENT:
+
+SRC=*
+BIN=bin
+KERNEL=kernel
+LINKER=../config/kernel.ld
+CONFIG=../config.mk
+
+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))
+
+build: $(BIN)/$(KERNEL)
+
+clean:
+ rm -fr $(BIN)
+
+$(A_OBJ): $(BIN)/%.S.o : %.S $(H_SRC) $(CONFIG)
+ mkdir -p $(@D)
+ printf "\033[33m AS \033[0m%s\n" $<
+ $(CPP) $(CPPFLAGS) -o $@.cpp $<
+ $(AS) -o $@ $@.cpp
+
+$(C_OBJ): $(BIN)/%.o : %.c $(H_SRC) $(CONFIG)
+ mkdir -p $(@D)
+ printf "\033[34m CC \033[0m%s\n" $<
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+$(BIN)/$(KERNEL): $(A_OBJ) $(C_OBJ) $(LINKER)
+ mkdir -p $(@D)
+ printf "\033[32m LD \033[0m%s\n" $@
+ $(LD) $(LDFLAGS) -T $(LINKER) -o $(BIN)/$(KERNEL) $(A_OBJ) $(C_OBJ)