blob: 646f7818e94a7a696fe6f641fdf27a290ca3da36 (
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
SHELL:=/bin/bash
override CFLAGS += \
-nostdlib \
-nostdinc \
-fno-builtin \
-fno-stack-protector \
-mno-red-zone \
-nostartfiles \
-nodefaultlibs \
-Wall \
-Wextra
override LDFLAGS += --no-warn-rwx-segment
ifneq "$(DEBUG)" "0"
override CFLAGS += -g -fno-omit-frame-pointer -DDEBUG
override LDFLAGS += -g
override NASMFLAGS_KERNEL += -g
endif
STAGE3_C = \
stage3/init.o \
stage3/main.o \
stage3/gfx.o \
stage3/halt.o \
stage3/interrupts.o \
stage3/pic.o \
stage3/clock.o \
stage3/memory.o \
stage3/heap.o \
stage3/font.o \
stage3/font_classic.o \
stage3/ata.o \
stage3/string.o \
stage3/pci.o \
stage3/fs.o \
stage3/ps2.o \
stage3/thread.o \
stage3/shell.o \
stage3/version.o \
stage3/rng.o \
stage3/cheese3d.o \
stage3/cheese_demo.o \
stage3/debug.o
STAGE3 = $(STAGE3_C) \
stage3/isr.o \
stage3/yield.o \
stage3/watchdog.o
PAD_BOUNDARY = pad() { truncate -s $$(echo "($$(du -b $$1 | cut -f1)+$$2-1)/$$2*$$2" | bc) $$1; }; pad
DISAS = objdump -D -M intel -j .text stage3.elf
cuddles.img: stage1.bin stage23.bin fs.tar
cat stage{1,23}.bin fs.tar > cuddles.img
$(PAD_BOUNDARY) cuddles.img 1048576
stage1.bin: stage1/main.asm stage1/print.asm stage23.bin
nasm $(NASMFLAGS_BOOT) -f bin stage1/main.asm -o stage1.bin \
-dKSIZE=$$(du -cb stage23.bin | tail -n1 | cut -f1)
stage23.bin: stage2.bin stage3.elf
cat stage2.bin stage3.elf > stage23.bin
$(PAD_BOUNDARY) stage23.bin 512
stage2.bin: stage2/main.asm stage2/mmap.asm stage2/paging.asm stage2/vesa.asm stage1/print.asm
nasm $(NASMFLAGS_BOOT) -f bin stage2/main.asm -o stage2.bin
stage3.elf: $(STAGE3) stage3.ld
ld $(LDFLAGS) $(STAGE3) -T stage3.ld -o stage3.elf
fs/dbg/kernel.dis.asm: stage3.elf
mkdir -p fs/dbg/
$(DISAS) > fs/dbg/kernel.dis.asm
stage3/%.o: stage3/%.asm
nasm $(NASMFLAGS_KERNEL) -f elf64 $< -o $@
stage3/interrupts.o: stage3/interrupts.c
gcc $(CFLAGS) -MMD -mgeneral-regs-only -c $< -o $@
stage3/pic.o: stage3/pic.c
gcc $(CFLAGS) -MMD -mgeneral-regs-only -c $< -o $@
stage3/init.o: stage3/init.c
gcc $(CFLAGS) -MMD -mgeneral-regs-only -c $< -o $@
stage3/%.o: stage3/%.c
gcc $(CFLAGS) -MMD -c $< -o $@
-include $(STAGE3_C:%.o=%.d)
GIT_VERSION := $(shell git describe --tags 2>/dev/null || git rev-parse --short HEAD)
.version-$(GIT_VERSION):
rm -f .version-*
touch $@
stage3/version.c: .version-$(GIT_VERSION)
echo -e "#include \"def.h\"\nstr version = S(\"$(GIT_VERSION)\");" > $@
stage3/%.asm: stage3/%.lua
lua $< > $@
stage3/font.c: stage3/font_builtin.c
stage3/font_builtin.c: fs/fonts/ter-u16n.cuddlefont
xxd -i $< > $@
fs.tar: $(shell find fs | sed 's/ /\\ /g') fs/dbg/kernel.dis.asm
cd fs && tar --format=ustar -cf ../fs.tar *
.PHONY: run clean flash disas qemu bochs
bochs: cuddles.img
rm -f cuddles.img.lock
echo c | bochs -q
# to qemu slow: make QFLAGS="-icount shift=9,align=on,sleep=on" run
# try QFLAGS="-enable-kvm" for better performance
override QFLAGS += -drive format=raw,file=cuddles.img
qemu: cuddles.img
qemu-system-x86_64 $(QFLAGS)
run: qemu
clean:
rm -rf .version-* stage3/*.{o,d} *.bin *.img stage3/{isr.asm,version.c,font_builtin.c} fs.tar fs/dbg
flash: cuddles.img
dd if=cuddles.img of=$(DEV)
disas: stage3.elf
$(DISAS) --disassembler-color=on
|