blob: 0c9b507e1c28a4262b60c05dcd782a8cd37110ad (
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
|
#
# Makefile fragment for the kernel components of the system.
#
# Makefile fragment for the kernel component of the system.
#
# THIS IS NOT A COMPLETE Makefile - run GNU make in the top-level
# directory, and this will be pulled in automatically.
#
SUBDIRS += kernel
###################
# FILES SECTION #
###################
BOOT_OBJ := $(patsubst %.c, $(BUILDDIR)/%.o, $(BOOT_SRC))
KERN_SRC := kernel/startup.S kernel/isrs.S \
kernel/cio.c kernel/clock.c kernel/kernel.c kernel/kmem.c \
kernel/list.c kernel/procs.c kernel/sio.c kernel/support.c \
kernel/syscalls.c kernel/user.c kernel/vm.c kernel/vmtables.c
KERN_OBJ := $(patsubst %.c, $(BUILDDIR)/%.o, $(KERN_SRC))
KERN_OBJ := $(patsubst %.S, $(BUILDDIR)/%.o, $(KERN_OBJ))
KCFLAGS := -ggdb
KLDFLAGS := -T kernel/kernel.ld
KLIBS := -lkernel -lcommon
###################
# RULES SECTION #
###################
kernel: $(BUILDDIR)/kernel/kernel.b
$(BUILDDIR)/kernel/%.o: kernel/%.c $(BUILDDIR)/.vars.CFLAGS
@mkdir -p $(@D)
$(CC) $(CFLAGS) $(KCFLAGS) -c -o $@ $<
$(BUILDDIR)/kernel/%.o: kernel/%.S $(BUILDDIR)/.vars.CFLAGS
@mkdir -p $(@D)
$(CPP) $(CPPFLAGS) -o $(@D)/$*.s $<
$(AS) $(ASFLAGS) $(KCFLAGS) -o $@ $(@D)/$*.s -a=$(@D)/$*.lst
$(RM) -f $(@D)/$*.s
$(BUILDDIR)/kernel/kernel: $(KERN_OBJ)
@mkdir -p $(@D)
$(LD) $(KLDFLAGS) $(LDFLAGS) -o $@ $(KERN_OBJ) $(KLIBS)
$(OBJDUMP) -S $@ > $@.asm
$(NM) -n $@ > $@.sym
$(READELF) -a $@ > $@.info
$(BUILDDIR)/kernel/kernel.b: $(BUILDDIR)/kernel/kernel
$(LD) $(LDFLAGS) -o $(BUILDDIR)/kernel/kernel.b -s \
--oformat binary -Ttext 0x10000 $(BUILDDIR)/kernel/kernel
# some debugging assist rules
$(BUILDDIR)/kernel/%.i: kernel/%.c $(BUILDDIR)/.vars.CFLAGS
@mkdir -p $(@D)
$(CC) $(CFLAGS) $(KCFLAGS) -E -c $< > $(@D)/$*.i
$(BUILDDIR)/kernel/%.dat: $(BUILDDIR)/kernel/%.o
@mkdir -p $(@D)
$(OBJCOPY) -S -O binary -j .data $< $@
hexdump -C $@ > $(@D)/$*.hex
|