ARCHES = x86_64 i386 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 ?= -Og -g CFLAGS := $(CFLAGS) $(ARCH_CFLAGS) \ -Wall -Wextra -pedantic -std=gnu11 -I../ext -Isrc -fPIE LDFLAGS := $(LDFLAGS) -T $(LDSCRIPT) TARGET := kernel CFILES := $(shell find src -path src/arch -prune -o -type f -name '*.c' -print) ARCHFILES := $(ARCHFILES) $(shell find src/arch/$(ARCH) -type f -name '*.c' -print) HFILES := $(shell find src -type f -name '*.h') OBJ := $(patsubst src/%,obj/$(ARCH)/%.o,$(CFILES) $(ARCHFILES)) .PHONY: all clean obj $(ARCHES) default: bin/$(TARGET)-$(ARCH) all: $(ARCHES) $(ARCHES): @$(MAKE) ARCH=$@ bin/$(TARGET)-$(ARCH): $(OBJ) @mkdir -p $(@D) $(LD) $(LDFLAGS) $(OBJ) -o $@ obj/$(ARCH)/%.c.o: src/%.c $(HFILES) $(ARCHHEADERS) @mkdir -p $(@D) $(CC) $(CFLAGS) -c $< -o $@ clean: rm -rf bin obj zig-cache