summaryrefslogtreecommitdiff
path: root/kernel/Make.mk
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