asagiri/yukari/Makefile

41 lines
1.1 KiB
Makefile

include ../toolchain.mk
override CFLAGS += \
-Isrc/include \
-I../arch/aarch64 \
-I../libc/src/include
override LDFLAGS += \
-T ../arch/aarch64/linker.ld
override CFILES := $(shell cd src && find * -type f -name '*.c')
override ASFILES := $(shell cd src && find * -type f -name '*.S')
override OBJ := $(addprefix obj/,$(CFILES:.c=.c.o) $(ASFILES:.S=.S.o))
override HEADER_DEPS := $(addprefix obj/,$(CFILES:.c=.c.d) $(ASFILES:.S=.S.d))
override OBJDEPS := $(shell find ../arch/aarch64/obj/* -type f -name '*.S.o')
.PHONY: all
all: bin/$(KERNEL)
# Link rules for the final kernel executable.
bin/$(KERNEL): Makefile ../arch/aarch64/linker.ld $(OBJ)
mkdir -p "$$(dirname $@)"
$(LD) $(OBJ) $(LDFLAGS) -o $@ $(OBJDEPS)
# Include header dependencies.
-include $(HEADER_DEPS)
# Compilation rules for *.c files.
obj/%.c.o: src/%.c Makefile
mkdir -p "$$(dirname $@)"
$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
# Compilation rules for *.S files.
obj/%.S.o: src/%.S Makefile
mkdir -p "$$(dirname $@)"
$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
# Remove object files and the final executable.
.PHONY: clean
clean:
rm -rf bin obj