44 lines
1.0 KiB
Makefile
44 lines
1.0 KiB
Makefile
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 ?= -O2
|
|
CFLAGS := $(CFLAGS) $(ARCH_CFLAGS) \
|
|
-Wall -Wextra -pedantic -Wno-language-extension-token -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)
|
|
@echo Linking $@
|
|
$(LD) $(LDFLAGS) $(OBJ) -o $@
|
|
|
|
obj/$(ARCH)/%.c.o: src/%.c $(HFILES)
|
|
@mkdir -p $(@D)
|
|
@echo $(CC) $<
|
|
@$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
clean:
|
|
rm -rf bin obj zig-cache
|