1
1
# Compiler flags
2
2
AARCH64_TOOLCHAIN_DIR = build/aarch64-unknown-linux-gnu
3
- ARM_GCC = $(AARCH64_TOOLCHAIN_DIR ) /bin/aarch64-unknown-linux-gnu-gcc
4
- CFLAGS = -mcpu=$(CPU ) -fpic -ffreestanding
5
- CSRCFLAGS = -O2 -Wall -Wextra
6
- LDFLAGS = -ffreestanding -O2 -nostdlib
3
+ ARMGNU = $(AARCH64_TOOLCHAIN_DIR ) /bin/aarch64-unknown-linux-gnu
4
+ CFLAGS = -Wall -Wextra -ffreestanding -mgeneral-regs-only -MMD - mcpu=$(CPU )
5
+ ASMFLAGS = -MMD
6
+ LDFLAGS = -nostdlib -nostartfiles
7
7
8
8
# Machine and emulator targets
9
9
CPU = cortex-a53
@@ -20,7 +20,9 @@ SRC_DIRS += src/common
20
20
# Output directories
21
21
BUILD_DIR = build
22
22
OBJ_DIR = $(BUILD_DIR ) /obj
23
- IMG_NAME = $(BUILD_DIR ) /kernel8.img
23
+ IMAGE = kernel8
24
+ BIN_NAME = $(BUILD_DIR ) /$(IMAGE ) .elf
25
+ IMG_NAME = $(BUILD_DIR ) /$(IMAGE ) .img
24
26
25
27
# Setup derived variables
26
28
VPATH := src
@@ -35,21 +37,23 @@ HEADERS = $(foreach dir, $(SRC_DIRS), $(wildcard $(dir)/*.h))
35
37
# Targets
36
38
build : $(OBJECTS ) $(HEADERS )
37
39
@echo " ==>" linking $(OBJECTS )
38
- $(ARM_GCC ) -T $(BUILD_DIR ) /linker.ld -o $(IMG_NAME ) $(LDFLAGS ) $(OBJECTS )
40
+ $(ARMGNU ) -ld $(LDFLAGS ) -T $(BUILD_DIR ) /linker.ld -o $(BIN_NAME ) $(OBJECTS )
41
+ $(ARMGNU ) -objcopy $(BIN_NAME ) -O binary $(IMG_NAME )
39
42
40
43
$(OBJ_DIR ) /% _c.o : % .c
41
44
@echo " ==>" compiling $<
42
45
@mkdir -p $(@D )
43
- $(ARM_GCC ) $(CFLAGS ) $(INCLUDES ) -c $< -o $@ $( CSRCFLAGS )
46
+ $(ARMGNU ) -gcc $(CFLAGS ) $(INCLUDES ) -c $< -o $@
44
47
45
48
$(OBJ_DIR ) /% _s.o : % .S
46
49
@echo " ==>" building $<
47
50
@mkdir -p $(@D )
48
- $(ARM_GCC ) $(CFLAGS ) $(INCLUDES ) -c $< -o $@
51
+ $(ARMGNU ) -gcc $(ASMFLAGS ) $(INCLUDES ) -c $< -o $@
49
52
50
53
clean :
51
54
@echo " ==>" removing assets
52
55
rm -rf $(OBJ_DIR )
56
+ rm -f $(BIN_NAME )
53
57
rm -f $(IMG_NAME )
54
58
55
59
emu : build
0 commit comments