-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathMakefile
137 lines (112 loc) · 3.28 KB
/
Makefile
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
135
136
MAKEFLAGS += --no-print-directory
Q = @
LD = ld
AS = as
CC = gcc
DD = dd
NM = nm
BUILD = tools/build
MKFS = tools/mkfs.minix
CTAGS = ctags
OBJDUMP = objdump
OBJCOPY = objcopy
CFLAGS = -Wall -Werror -fno-builtin -nostdinc -nostdlib -I../include -g -m32
LDFLAGS = -m elf_i386
export Q LD AS CC NM OBJDUMP OBJCOPY CFLAGS LDFLAGS
KVM = qemu-kvm
KLINK = -T kernel.ld
USER_APPS = user/init user/hello user/sh user/cat user/stat user/ls user/mkdir\
user/sync user/rmdir user/rm user/cp user/pwd
export USER_APPS
OBJS = kernel/kernel.o mm/mm.o video/video.o fs/fs.o keyboard/keyboard.o
all:disk.img user
user:user/init
user/init:user/*.c user/*/*.c user/*/*.S
@make -C user/ all
disk.img:boot/boot.bin kernel.bin tools/build tools/mkfs.minix
$(Q)$(BUILD) boot/boot.bin kernel.bin 10000
@echo " [BUILD] boot/boot.bin"
$(Q)$(DD) of=$@ if=/dev/zero bs=512 count=10000 2>/dev/null
$(Q)$(DD) of=$@ if=boot/boot.bin conv=notrunc 2>/dev/null
$(Q)$(DD) of=$@ if=kernel.bin conv=notrunc bs=512 seek=8 2>/dev/null
@echo " [DD] $@"
$(Q)$(MKFS) $@
@echo " [MKFS] $@"
tools/%:tools/%.c
$(Q)$(CC) $< -o $@
@echo " [CC] $@"
kernel.bin:kernel.elf
$(Q)$(OBJCOPY) $< -O binary $@
@echo " [GEN] $@"
kernel.elf:$(OBJS)
$(Q)$(LD) $(KLINK) $^ -o $@
@echo " [LD] $@"
video/video.o:video/*.c
@make -C video/
keyboard/keyboard.o:keyboard/*.c
@make -C keyboard/
fs/fs.o:fs/*.c fs/minix/*.c
@make -C fs/
mm/mm.o:mm/*.c
@make -C mm/
kernel/kernel.o:kernel/*.S kernel/*.c
@make -C kernel/
boot/boot.bin:boot/boot.S boot/main.c
@make -C boot/
debug:kernel.asm kernel.sym
@make -C boot/ debug
@make -C user/ debug
kernel.asm:kernel.elf
$(Q)$(OBJDUMP) -S $< > $@
@echo " [DASM] $@"
kernel.sym:kernel.elf
$(Q)$(NM) -n $< > $@
@echo " [NM] $@"
# minixdir/dir/[1-100]
MKDIRS = $(shell seq -s ' ' 1 100 | sed 's/\([0-9]\+\)/minixdir\/dir\/\1/g')
RMDIRS = $(shell seq -s ' ' 20 40 | sed 's/\([0-9]\+\)/minixdir\/dir\/\1/g')
# load user environment into bootale disk image
loaduser:disk.img
-mkdir -p minixdir
-sudo losetup /dev/loop0 -o $(shell cat .offset) disk.img
sudo mount -t minix /dev/loop0 minixdir
-sudo cp $(USER_APPS) minixdir/
-sudo mkdir -p minixdir/dir
-sudo mkdir -p minixdir/dir/dir1
-@sudo mkdir -p $(MKDIRS); echo "Create 100 dirs"
-@sudo rmdir $(RMDIRS); echo "Remove 20 dirs"
-echo "hello wrold" > text1; sudo mv text1 minixdir/
-echo "RIP Dennis Ritchie" > text2; sudo mv text2 minixdir/dir/
-sudo umount minixdir
-sudo losetup -d /dev/loop0
-rm -rf minixdir
kvm:disk.img
$(KVM) -hda disk.img -m 64
bochs:disk.img
bochs -qf tools/bochs.bxrc
# If your bochs installs nogui library, you can run this command.
nbochs:disk.img
bochs -qf tools/bochs.bxrc 'display_library: nogui'
tag:
$(Q)$(CTAGS) -R *
@echo " [CTAGS]"
fsck:disk.img
-sudo losetup /dev/loop0 -o $(shell cat .offset) disk.img
-sudo fsck.minix /dev/loop0
-sudo losetup -d /dev/loop0
mount:disk.img
mkdir -p minixdir
-sudo losetup /dev/loop0 -o $(shell cat .offset) disk.img
-sudo mount -t minix /dev/loop0 minixdir
umount:
-sudo umount minixdir
-sudo losetup -d /dev/loop0
rm -rf minixdir
clean:
@find . -regex ".*\.\(o\|sym\|asm\|elf\|bin\)" -exec rm -f {} ';'
@rm -rf tools/mkfs.minix tools/build tags .offset disk.img
@rm -rf $(USER_APPS)
@echo " [CLEAN]"
lines:
@echo "code lines:"
@wc -l `find . -name \*.[ch]` | sort -n