kornos/kernel/Makefile

39 lines
1.0 KiB
Makefile

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 -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/%.c,obj/$(ARCH)/%.o,$(CFILES) $(ARCHFILES))
.PHONY: all clean obj dirs
all: bin/$(TARGET)-$(ARCH)
bin/$(TARGET)-$(ARCH): $(OBJ) dirs
$(LD) $(LDFLAGS) $(OBJ) -o $@
obj/$(ARCH)/%.o: src/%.c $(HFILES) dirs
$(CC) $(CFLAGS) -c $< -o $@
dirs:
mkdir -p bin $(patsubst src/%,obj/$(ARCH)/%, $(shell find src/* -type d -print))
clean:
rm -rf bin obj zig-cache