-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
59 lines (42 loc) · 1.38 KB
/
Makefile
File metadata and controls
59 lines (42 loc) · 1.38 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
ARCH ?= aarch64
GCC = $(ARCH)-elf-gcc
LD = $(ARCH)-elf-ld
AS = $(ARCH)-elf-as
OC = $(ARCH)-elf-objcopy
BUILD = build
BIN = bin
SRC_DIR = src
KERNEL_DIR = $(SRC_DIR)/kernel
ARCH_SRC_DIR = $(SRC_DIR)/arch/$(ARCH)
DRIVERS_DIR = $(SRC_DIR)/drivers
INCLUDE_DIR = include
ALL_SRC_C := $(wildcard $(KERNEL_DIR)/*.c) \
$(wildcard $(ARCH_SRC_DIR)/*.c) \
$(wildcard $(DRIVERS_DIR)/*/*.c)
OBJ_S := $(BUILD)/arch/$(ARCH)/boot.o
OBJ := $(patsubst src/%.c,build/%.o,$(ALL_SRC_C)) $(OBJ_S)
all: $(BIN)/kernel8.img
kernel8.bin: $(BIN)/kernel8.img
$(BIN)/kernel8.img: $(BUILD)/kernel.elf | $(BIN)
$(OC) -O binary $(BUILD)/kernel.elf $(BIN)/kernel8.img
$(BUILD)/kernel.elf: $(OBJ) $(ARCH_SRC_DIR)/linker.ld | $(BUILD)
$(LD) -T $(ARCH_SRC_DIR)/linker.ld -o $(BUILD)/kernel.elf $(OBJ)
$(BUILD)/%.o: src/%.s
mkdir -p $(dir $@)
$(AS) $< -o $@
$(BUILD)/%.o : src/%.c
mkdir -p $(dir $@)
$(GCC) -ffreestanding -fno-builtin -mgeneral-regs-only -I include -c $< -o $@
$(BUILD):
mkdir -p $(BUILD)
$(BIN):
mkdir -p $(BIN)
.PHONY: clean
clean:
rm -rf $(BIN) $(BUILD)
.PHONY: run-pi3
run-pi3:
qemu-system-aarch64 -M raspi3b -kernel bin/kernel8.img -serial stdio -display none -dtb qemu/bcm2710-rpi-3-b.dtb -D qemu.log -d in_asm
.PHONY: run-pi4
run-pi4:
qemu-system-aarch64 -M raspi4b -kernel bin/kernel8.img -serial stdio -display none -dtb qemu/bcm2711-rpi-4-b.dtb -D qemu.log -d in_asm