summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile53
1 files changed, 53 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..7478d63
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,53 @@
1SRC_DIR := src
2BUILD_DIR := build
3OBJ_DIR := $(BUILD_DIR)
4BIN_DIR := $(BUILD_DIR)/bin
5
6IMG := $(BIN_DIR)/kernel8.img
7ELF := $(BIN_DIR)/kernel8.elf
8
9SRC := $(wildcard $(SRC_DIR)/*.c)
10OBJ := $(SRC:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
11ASM_SRC := $(wildcard $(SRC_DIR)/*.s)
12ASM_OBJ := $(ASM_SRC:$(SRC_DIR)/%.s=$(OBJ_DIR)/%.o)
13LINK := $(SRC_DIR)/link.ld
14
15CPPFLAGS := -I$(SRC_DIR) -MMD -MP
16CFLAGS := -Wall -Wextra -O2 -ffreestanding -nostdinc -nostdlib -nostartfiles
17LDFLAGS := -nostdlib
18
19TOOLCHAIN := $(HOME)/bin/arm-gnu-toolchain-14.2.rel1-x86_64-aarch64-none-elf/bin
20AS := $(TOOLCHAIN)/aarch64-none-elf-as
21CC := $(TOOLCHAIN)/aarch64-none-elf-gcc
22LD := $(TOOLCHAIN)/aarch64-none-elf-ld
23OBJCOPY := $(TOOLCHAIN)/aarch64-none-elf-objcopy
24
25.PHONY: all clean
26
27all: $(IMG)
28
29$(IMG): $(ELF) | $(BIN_DIR)
30 @echo Building $@
31 $(OBJCOPY) -O binary $(ELF) $@
32
33$(ELF): $(OBJ) $(ASM_OBJ) | $(BIN_DIR)
34 @echo Building $@
35 $(LD) $(LDFLAGS) $^ -T $(LINK) -o $@
36
37$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(BUILD_DIR)
38 @echo Building $< "->" $@
39 $(CC) $(CFLAGS) -c $< -o $@
40
41$(OBJ_DIR)/%.o: $(SRC_DIR)/%.s | $(BUILD_DIR)
42 @echo Building $< "->" $@
43 $(AS) $< -o $@
44
45clean:
46 rm -rf $(BUILD_DIR)
47
48$(BUILD_DIR):
49 mkdir -p $(BUILD_DIR)
50
51$(BIN_DIR):
52 mkdir -p $(BIN_DIR)
53