summaryrefslogtreecommitdiff
path: root/kernel/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/Makefile')
-rw-r--r--kernel/Makefile78
1 files changed, 78 insertions, 0 deletions
diff --git a/kernel/Makefile b/kernel/Makefile
new file mode 100644
index 0000000..955cb8d
--- /dev/null
+++ b/kernel/Makefile
@@ -0,0 +1,78 @@
+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)