-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
139 lines (120 loc) · 2.58 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
137
138
include common.mk
SRCS_ASM = \
kernel/switch.S \
kernel/lock/atomic.S \
mm/mem.S \
BOOT/boot.S
SRCS_C = \
kernel/kernel.c \
kernel/sys.c \
kernel/errno.c \
kernel/signal.c \
kernel/ctype.c \
kernel/errno.c \
kernel/lock/spin_lock.c \
kernel/system_call.c \
kernel/sched/sched.c \
kernel/sched/fork.c \
kernel/sched/exit.c \
kernel/sched/wait.c \
kernel/sched/exec.c \
init/init.c \
print/printf.c \
print/printk.c \
print/panic.c \
string/string.c \
timer/timer.c \
timer/time.c \
mm/malloc.c \
mm/page.c \
mm/mm.c \
mm/pg.c \
trap/trap.c \
trap/plic.c \
driver/uart.c \
driver/buffer.c \
driver/virtio.c \
fs/fat32_disk.c \
fs/fat32_file.c \
fs/fat32_inode.c \
fs/fat32_stack.c \
fs/fd.c \
fs/ops.c \
user_test/user.c \
OBJS = $(SRCS_ASM:.S=.o)
OBJS += $(SRCS_C:.c=.o)
MNT_DIR=build/mnt
$(shell mkdir -p $(MNT_DIR))
FSIMG = fsimg
oscompU=user
FILE= mnt text.txt \
chdir close dup2 dup \
fstat getcwd mkdir_ write \
openat open read test_echo \
getdents unlink pipe \
brk clone execve exit fork \
getpid getppid sleep times \
gettimeofday mmap munmap \
uname wait waitpid yield \
mount umount
TESTFILE=$(addprefix $(oscompU)/build/riscv64/, $(FILE))
.DEFAULT_GOAL := all
all: kernel-qemu
kernel-qemu: ${OBJS}
${CC} ${CFLAGS} -T 404OS.ld -o kernel-qemu $^
${OBJCOPY} -O binary kernel-qemu os.bin
%.o : %.c
${CC} ${CFLAGS} -c -o $@ $<
%.o : %.S
${CC} ${CFLAGS} -c -o $@ $<
run: all
@${QEMU} -M ? | grep virt >/dev/null || exit
@echo "Press Ctrl-A and then X to exit QEMU"
@echo "------------------------------------"
@${QEMU} ${QFLAGS} -kernel kernel-qemu
.PHONY : debug
debug: all
@echo "Press Ctrl-C and then input 'quit' to exit GDB and QEMU"
@echo "-------------------------------------------------------"
@${QEMU} ${QFLAGS} -kernel kernel-qemu -s -S &
@${GDB} kernel-qemu -q -x gdbinit
.PHONY : code
code: all
@${OBJDUMP} -S kernel-qemu | less
.PHONY : img
img: user sdcard.img
user: oscomp
@echo "$(YELLOW)build user:$(RESET)"
@cp README.md $(FSIMG)/
oscomp:
@make -C $(oscompU) -e all CHAPTER=7
@cp -r $(TESTFILE) $(FSIMG)/
.PHONY : dep
sdcard.img: dep
@dd if=/dev/zero of=$@ bs=1M count=128
@mkfs.vfat -F 32 -s 2 -a $@
@sudo mount -t vfat $@ $(MNT_DIR)
@sudo cp -r $(FSIMG)/* $(MNT_DIR)/
@sync $(MNT_DIR) && sudo umount -v $(MNT_DIR)
.PHONY : clean
clean:
rm -rf \
BOOT/*.o \
init/*.o \
driver/*.o \
kernel/*.o \
kernel/sched/*.o \
kernel/lock/*.o \
timer/*.o \
trap/*.o \
mm/*.o \
print/*.o \
string/*.o \
driver/*.o \
fs/*.o \
user_test/*.o \
*.o \
*.bin \
sdcard.img \
$(FSIMG)/* \
kernel-qemu