summaryrefslogtreecommitdiff
path: root/kernel/Makefile
blob: 955cb8de6c0266e28351fb37a392e3605e3b4edb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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)