-
Notifications
You must be signed in to change notification settings - Fork 2
/
GNU_Makefile
101 lines (70 loc) · 2.11 KB
/
GNU_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
VPATH = driver include kernel user lib
PREFIX = riscv64-unknown-linux-gnu
CXX = $(PREFIX)-g++
INCLUDE = include
CXX_FLAGS = -c -g -Wall -nostdlib -I$(INCLUDE) -mcmodel=medany -ffreestanding -nostartfiles
USER_TEXT = 0xffffffc000001000
AS = $(PREFIX)-as
LD = $(PREFIX)-ld
TARGET = kernel.elf
OBJ = start.o
OBJ += driver.o uart.o init.o asm_utils.o interrupt.o clint.o timer.o utils.o \
address_pool.o bitmap.o mem.o \
list.o process.o proc_zero.o \
syscall_manager.o
$(TARGET) : $(OBJ)
$(LD) $^ -Ttext 0x80000000 -e _start -o $@
# $(LD) $^ -T kernel.ld -o $@
syscall_manager.o: syscall_manager.cpp
$(CXX) $(CXX_FLAGS) $< -o $@
list.o: list.cpp list.h
$(CXX) $(CXX_FLAGS) $< -o $@
process.o: process.cpp process.h pcb.h
$(CXX) $(CXX_FLAGS) $< -o $@
proc_zero.o: proc_zero.cpp
$(CXX) $(CXX_FLAGS) $< -o $@
address_pool.o: address_pool.cpp address_pool.h
$(CXX) $(CXX_FLAGS) $< -o $@
bitmap.o: bitmap.cpp bitmap.h
$(CXX) $(CXX_FLAGS) $< -o $@
mem.o: mem.cpp mem.h
$(CXX) $(CXX_FLAGS) $< -o $@
utils.o: utils.cpp utils.h
$(CXX) $(CXX_FLAGS) $< -o $@
timer.o: timer.cpp timer.h
$(CXX) $(CXX_FLAGS) $< -o $@
clint.o: clint.cpp clint.h
$(CXX) $(CXX_FLAGS) $< -o $@
interrupt.o: interrupt.cpp interrupt.h
$(CXX) $(CXX_FLAGS) $< -o $@
asm_utils.o: asm_utils.s
$(AS) -g $< -o $@
driver.o : driver.cpp driver.h
$(CXX) $(CXX_FLAGS) $< -o $@
uart.o : uart.cpp uart.h
$(CXX) $(CXX_FLAGS) $< -o $@
init.o : init.cpp
$(CXX) $(CXX_FLAGS) $< -o $@
start.o : start.s
$(AS) -g $< -o $@
debug : $(TARGET)
qemu-system-riscv64 -machine virt -kernel $(TARGET) -bios none -nographic -s -S
run : $(TARGET)
clear
qemu-system-riscv64 -machine virt -kernel $(TARGET) -bios none -nographic
stdio.o: stdio.cpp stdio.h
$(CXX) $(CXX_FLAGS) $< -o $@
lib_utils.o: lib_utils.s
$(AS) -g $< -o $@
syscall.o: syscall.cpp
$(CXX) $(CXX_FLAGS) $< -o $@
gen_binary.out: gen_binary.cpp
g++ $< -o $@
zero.o: zero.cpp
$(CXX) $(CXX_FLAGS) $< -o $@
proc_zero.elf: zero.o syscall.o lib_utils.o stdio.o
$(LD) $^ -e main -Ttext $(USER_TEXT) -o $@
proc_zero.cpp: proc_zero.elf gen_binary.out
./gen_binary.out $< $@ zero
clean :
rm -fr *.o *.elf *.out *.cpp