diff options
Diffstat (limited to 'kernel/Makefile')
-rw-r--r-- | kernel/Makefile | 39 |
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) |