ARCHES = x86_64 i386 aarch64 ARCH ?= x86_64 CC = zig cc -target $(ARCH)-freestanding LD = ld -m elf_$(ARCH) LDSCRIPT = make/$(ARCH)/linker.ld -include make/$(ARCH)/make.config CFLAGS ?= -O2 CFLAGS := $(CFLAGS) $(ARCH_CFLAGS) \ -Wall -Wextra -pedantic -Wno-language-extension-token -std=gnu11 -I../ext/limine/stivale -fPIE LDFLAGS := $(LDFLAGS) -T $(LDSCRIPT) 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 dirs all: bin/$(TARGET)-$(ARCH) bin/$(TARGET)-$(ARCH): $(OBJ) mkdir -p bin $(LD) $(LDFLAGS) $(OBJ) -o $@ obj/$(ARCH)/%.o: src/%.c $(HFILES) @mkdir -p obj/$(ARCH)/arch/$(ARCH) $(CC) $(CFLAGS) -c $< -o $@ dirs: mkdir -p bin obj mkdir -p $(patsubst src/%,obj/%, $(shell find src -type d -print)) clean: rm -rf bin obj zig-cache