Makefile模板
SRCDIRS := src
INCDIRS := src
C_SRCFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))
S_SRCFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.s))
CFILES :=$(notdir $(C_SRCFILES))
SFILES :=$(notdir $(S_SRCFILES))
C_OBJFILES := $(patsubst %.c, output/%.o, $(CFILES))
S_OBJFILES := $(patsubst %.s, output/%.o, $(SFILES))
OBJFILES := $(C_OBJFILES) $(S_OBJFILES)
INCLUDES :=$(patsubst %, -I %, $(INCDIRS))
VPATH :=$(SRCDIRS)
ARM = /data/cn1891/training/hello_verisilicon_practice/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/bin/aarch64-none-elf
CFLAGS = -march=armv8-a -mtune=cortex-a76 -Wall -O2 -ffreestanding -nostartfiles -g
TARGET :=output/boot.elf
$(TARGET):$(OBJFILES)
@echo "Linking..."
@echo "$$<:" $< "$$^:" $^
@$(ARM)-ld -T bootrom.lds -o $@ $^
@$(ARM)-objcopy -O binary -S $@ output/boot.bin
@$(ARM)-objdump -D -m arm $@ > output/boot.dis
output/%.o:%.s
@echo "compile the assmble..."
@$(ARM)-gcc $(CFLAGS) -c -o $@ $<
output/%.o:%.c
@echo "compile the c code..."
@$(ARM)-gcc $(CFLAGS) $(INCLUDES) -c -o $@ $<
.PHONY:
clean:
@echo "Cleaning output dir"
@rm -rf output/
@mkdir output