INCLUDE?=-Iinclude CFLAGS?=-O0 -ffreestanding -std=gnu11 -fstack-protector-all -target $(ARCH)-none-elf LDFLAGS?=-nostdlib INCLUDE:=$(INCLUDE) $(SYS_INCLUDE) CFLAGS:=$(CFLAGS) -Wall -Wextra -DVERSION=\"$(VERSION)\" -DARCH=\"$(ARCH)\" -g LDFLAGS:=$(LDFLAGS) ARCHDIR=arch/$(ARCH) include $(ARCHDIR)/make.config include $(ROOTDIR)/modules.conf INCLUDE:=$(INCLUDE) $(KERNEL_ARCH_INCLUDE) CFLAGS:=$(CFLAGS) $(KERNEL_ARCH_CFLAGS) LDFLAGS:=$(LDFLAGS) $(KERNEL_ARCH_LDFLAGS) KERNEL=vmbox BOOTDIR=/boot PREFIX=/usr CORE_OBJS=core/init.o \ core/kprintf.o \ core/panic.o \ core/stack_protector.o \ core/string.o \ KERNEL_OBJS=$(KERNEL_ARCH_OBJS) \ $(CORE_OBJS) \ MODULE_SUBDIRS= MODULE_OBJS= include drivers/make.config include fs/make.config OBJS=$(KERNEL_OBJS) \ $(MODULE_OBJS) \ .PHONY: all modules clean install install-headers install-kernel install-modules .SUFFIXES: .o .c .s all: $(KERNEL) modules $(KERNEL): $(KERNEL_OBJS) @$(LD) --script=$(ARCHDIR)/linker.ld $(LDFLAGS) -o $@ $^ @echo [LD] $@ modules: $(MODULE_SUBDIRS) $(MODULE_SUBDIRS): $(MAKE) $(MAKECMDGOALS) -C $@ .c.o: @$(CC) -MD -c $< -o $@ $(CFLAGS) $(INCLUDE) @echo [CC] $@ .s.o: @$(CC) -MD -c $< -o $@ $(CFLAGS) $(INCLUDE) @echo [AS] $@ clean: $(MODULE_SUBDIRS) $(RM) $(KERNEL) $(OBJS) $(OBJS:.o=.d) install: install-headers install-kernel install-modules install-headers: install -d -m 0755 $(DESTDIR)$(PREFIX)/src/kernel/ cp -R include $(DESTDIR)$(PREFIX)/src/kernel/ install-kernel: $(KERNEL) install -m 0644 $(KERNEL) $(DESTDIR)$(BOOTDIR) install -m 0644 System.map-$(VERSION) $(DESTDIR)$(BOOTDIR) install-modules: $(MODULE_SUBDIRS) $(MAKE) $(MAKECMDGOALS) -C $@ -include $(OBJS:.o=.d)