-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
79 lines (62 loc) · 1.88 KB
/
Makefile
File metadata and controls
79 lines (62 loc) · 1.88 KB
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
RISCV_PREFIX ?= riscv64-elf-
# 若默认前缀不可用(旧环境),回退到 riscv-none-elf-
ifeq (, $(shell command -v $(RISCV_PREFIX)gcc 2>/dev/null))
RISCV_PREFIX := riscv-none-elf-
endif
CC = $(RISCV_PREFIX)gcc
OBJCOPY = $(RISCV_PREFIX)objcopy
ARCH_DIR = arch/riscv
KERNEL_DIR = kernel
BUILD_DIR = build
CFLAGS = -march=rv64imac_zicsr -mabi=lp64 -mcmodel=medany
CFLAGS += -nostdlib -ffreestanding -fno-builtin -fno-stack-protector
CFLAGS += -Wall -Wextra -Werror
CFLAGS += -I$(KERNEL_DIR)/include -I$(ARCH_DIR)/include
LDFLAGS = -T linker.ld -nostdlib -z max-page-size=4096
SRCS_C = \
$(KERNEL_DIR)/main.c \
$(KERNEL_DIR)/handle.c \
$(KERNEL_DIR)/trap/trap.c \
$(KERNEL_DIR)/syscall/syscall.c \
$(KERNEL_DIR)/fs/namesvc.c \
$(KERNEL_DIR)/fs/ramfs.c \
$(KERNEL_DIR)/dev/plic.c \
$(KERNEL_DIR)/dev/virtio_blk.c \
$(KERNEL_DIR)/proc.c \
$(KERNEL_DIR)/idle.c \
$(KERNEL_DIR)/mm/kalloc.c \
$(KERNEL_DIR)/mm/vm.c \
$(KERNEL_DIR)/async/async.c \
$(ARCH_DIR)/sbi.c \
$(ARCH_DIR)/mmu/sv39.c
SRCS_S = \
$(ARCH_DIR)/boot/start.S \
$(ARCH_DIR)/boot/trap.S
OBJS = $(SRCS_C:%.c=$(BUILD_DIR)/%.o) \
$(SRCS_S:%.S=$(BUILD_DIR)/%.o)
TARGET_ELF = $(BUILD_DIR)/kernel.elf
TARGET_BIN = $(BUILD_DIR)/kernel.bin
.PHONY: all clean dirs
all: dirs $(TARGET_BIN)
DIRS := \
$(BUILD_DIR) \
$(BUILD_DIR)/arch/riscv/boot \
$(BUILD_DIR)/arch/riscv/mmu \
$(BUILD_DIR)/kernel/trap \
$(BUILD_DIR)/kernel/mm \
$(BUILD_DIR)/kernel/dev \
$(BUILD_DIR)/kernel/fs \
$(BUILD_DIR)/kernel/async \
$(BUILD_DIR)/kernel/syscall
dirs:
@mkdir -p $(DIRS)
$(BUILD_DIR)/%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/%.o: %.S
$(CC) $(CFLAGS) -c $< -o $@
$(TARGET_ELF): $(OBJS) linker.ld
$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) -o $@
$(TARGET_BIN): $(TARGET_ELF)
$(OBJCOPY) -O binary $< $@
clean:
rm -rf $(BUILD_DIR)