Nanite/src/kernel/Makefile
2026-04-28 23:28:37 -04:00

59 lines
1.6 KiB
Makefile

TARGET_DEFINE = __I686
TARGET_ASMFLAGS += -f elf
TARGET_CFLAGS += -ffreestanding -nostdlib -I. -D$(TARGET_DEFINE)
TARGET_LIBS += -lgcc
TARGET_LINKFLAGS += -T linker.ld -nostdlib
HEADERS_C = $(wildcard *.h) \
$(wildcard */*.h) \
$(wildcard */*/*.h) \
$(wildcard */*/*/*.h) \
$(wildcard ../libs/*.h) \
$(wildcard ../libs/*/*.h)
SOURCES_C = $(wildcard *.c) \
$(wildcard */*.c) \
$(wildcard */*/*.c) \
$(wildcard */*/*/*.c) \
arch/i686/gen_isr.c
OBJECTS_C = $(patsubst %.c, $(BUILD_DIR)/kernel/c/%.obj, $(SOURCES_C))
HEADERS_ASM_i686-elf = $(wildcard arch/i686/*.inc)
SOURCES_ASM_i686-elf = $(wildcard arch/i686/*.asm)
HEADERS_ASM_xtensa-esp32-elf = $(wildcard arch/xtensa/*.inc)
SOURCES_ASM_xtensa-esp32-elf = $(wildcard arch/xtensa/*.asm)
# TWO ARCHITECTURES! HAHAHAHAH
OBJECTS_ASM = $(patsubst %.asm, $(BUILD_DIR)/kernel/asm/%.obj, $(SOURCES_ASM_$(TARGET)))
# i love rejanking this cuz yes (its 4am fuck off)
.PHONY: all kernel clean always
all: kernel
kernel: $(BUILD_DIR)/nanite.bin
$(BUILD_DIR)/nanite.bin: $(OBJECTS_ASM) $(OBJECTS_C)
@$(TARGET_LD) $(TARGET_LINKFLAGS) -Wl,-Map=$(BUILD_DIR)/kernel.map -o $@ $^ $(TARGET_LIBS)
@echo "--> Created: nanite.bin"
$(BUILD_DIR)/kernel/c/%.obj: %.c $(HEADERS_C)
@mkdir -p $(@D)
@$(TARGET_CC) $(TARGET_CFLAGS) -c -o $@ $<
@echo "--> Compiled: " $<
$(BUILD_DIR)/kernel/asm/%.obj: %.asm $(HEADERS_ASM_$(TARGET))
@mkdir -p $(@D)
@$(TARGET_ASM) $(TARGET_ASMFLAGS) -o $@ $<
@echo "--> Compiled: " $<
arch/i686/gen_isr.c arch/i686/gen_isr.inc:
@$(SOURCE_DIR)/build_scripts/genISR.sh $@
@echo "--> Compiled: ISR Gen Files"
clean:
rm -f $(BUILD_DIR)/nanite.bin