-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
92 lines (77 loc) · 2.15 KB
/
Makefile
File metadata and controls
92 lines (77 loc) · 2.15 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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
TOOLCHAIN ?= aarch64-elf
include toolchains/$(TOOLCHAIN).mk
CFLAGS = -ffreestanding -nostdlib -nostartfiles -Wall -Wextra -Iinclude -MMD -MP -mgeneral-regs-only -Iarch/arm64/include
DEBUG ?= true
ifeq ($(DEBUG),true)
CFLAGS += -g -O0 -fno-omit-frame-pointer
endif
LDFLAGS = -T kernel_linker.ld
SRC = \
arch/arm64/boot/kernel_boot.S \
arch/arm64/kernel/cpu.c \
arch/arm64/kernel/enter_user_mode.S \
arch/arm64/kernel/exception.c \
arch/arm64/kernel/gic.c \
arch/arm64/kernel/irq.c \
arch/arm64/kernel/timer.c \
arch/arm64/kernel/vectors.S \
arch/arm64/mm/fault.c \
arch/arm64/mm/mmu.c \
arch/arm64/mm/tlb.c \
drivers/uart/uart.c \
kernel/initramfs.c \
kernel/kthread.c \
kernel/main.c \
kernel/panic.c \
kernel/pid.c \
kernel/printk.c \
kernel/scheduler/reaper.c \
kernel/scheduler/scheduler.c \
kernel/scheduler/sleep.c \
kernel/string.c \
kernel/syscall/syscall.c \
kernel/syscall/sys_execve.c \
kernel/syscall/sys_exit.c \
kernel/syscall/sys_fork.c \
kernel/syscall/sys_read.c \
kernel/syscall/sys_write.c \
kernel/task.c \
kernel/user_access.c \
kernel/user_thread.c \
kernel/scheduler/wait.c \
mm/heap.c \
mm/kmap.c \
mm/kvmalloc.c \
mm/memory.c \
mm/page.c \
mm/pgtable.c \
mm/user_pgtable.c
OBJ = $(SRC:.c=.o)
OBJ := $(OBJ:.S=.o)
DEPS = $(OBJ:.o=.d)
-include $(DEPS)
INITRAMFS_IMG = initramfs.img
INITRAMFS_OBJ = initramfs_blob.o
all: kernel.elf
userspace/init.bin userspace/hello.bin: userspace_build
.PHONY: userspace_build
userspace_build:
$(MAKE) -C userspace TOOLCHAIN=$(TOOLCHAIN)
$(INITRAMFS_IMG): userspace/init.bin userspace/hello.bin
python3 tools/mkinitramfs.py -o $@ \
bin/init=userspace/init.bin \
bin/hello=userspace/hello.bin
# Convert initramfs binary blob into an object file that can be linked into the kernel
$(INITRAMFS_OBJ): $(INITRAMFS_IMG)
$(OBJCOPY) -I binary -O elf64-littleaarch64 \
--rename-section .data=.initramfs,alloc,load,readonly,data,contents \
$< $@
kernel.elf: $(OBJ) $(INITRAMFS_OBJ)
$(LD) $(LDFLAGS) -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
%.o: %.S
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f $(OBJ) $(DEPS) kernel.elf $(INITRAMFS_IMG) $(INITRAMFS_OBJ)
$(MAKE) -C userspace clean