ARCHES = x86_64 i386 aarch64 ARCH ?= x86_64 CC = zig cc -target $(ARCH)-freestanding LD = ld -m elf_$(ARCH) -include make.$(ARCH).config CFLAGS ?= -O2 CFLAGS := $(CFLAGS) $(ARCH_CFLAGS) \ -Wall -Wextra -pedantic -Wno-language-extension-token -std=gnu11 -I../ext/limine/stivale -fPIE LDFLAGS := $(LDFLAGS) -T linker.ld.$(ARCH) TARGET := kernel CFILES := $(shell find src -path src/arch -prune -o -type f -name '*.c' -print) ARCHFILES := $(shell find src/arch/$(ARCH) -type f -name '*.c' -print) HFILES := $(shell find src -type f -name '*.h') OBJ := $(patsubst src/%.c,obj/$(ARCH)/%.o,$(CFILES) $(ARCHFILES)) .PHONY: all clean obj all: $(TARGET) $(TARGET)-$(ARCH): $(OBJ) $(LD) $(LDFLAGS) $(OBJ) -o $@ obj/$(ARCH)/%.o: src/%.c $(HFILES) @mkdir -p obj/$(ARCH)/arch/$(ARCH) $(CC) $(CFLAGS) -c $< -o $@ clean: rm -rf $(TARGET)* obj zig-cache