.POSIX: .SUFFIXES: .PHONY: clean run RPI_VERSION ?= 3 # Compiler. AS := aarch64-elf-as CC := aarch64-elf-gcc LD := aarch64-elf-ld OBJCOPY := aarch64-elf-objcopy # Paths. SRC_DIR := src BUILD_DIR := build # Output files. ELF := $(BUILD_DIR)/kernel8.elf IMG := $(BUILD_DIR)/kernel8.img # Bootstrapping files. OBJ_START = $(BUILD_DIR)/start.o OBJ_MAIN = $(BUILD_DIR)/main.o SRC_LINK = $(SRC_DIR)/linker.ld CFLAGS := -Wall -ffreestanding -nostartfiles -O2 -nostdlib -lgcc -mgeneral-regs-only -fno-stack-protector CFLAGS += -DRPI_VERSION=$(RPI_VERSION) AFLAGS := LDFLAGS := default: $(IMG) $(BUILD_DIR)/%.o: $(SRC_DIR)/%.s $(AS) $(AFLAGS) -o $@ -c $< $(BUILD_DIR)/%.o: $(SRC_DIR)/%.c $(CC) $(CFLAGS) -o $@ -c $< $(IMG): $(BUILD_DIR) $(ELF) $(OBJCOPY) $(ELF) -O binary $(IMG) $(ELF): $(OBJ_START) $(OBJ_MAIN) $(LD) $(LDFLAGS) -T $(SRC_LINK) -o $(ELF) $(OBJ_START) $(OBJ_MAIN) clean: rm -rf $(BUILD_DIR) $(BUILD_DIR): mkdir -p $(BUILD_DIR) run: $(IMG) qemu-system-aarch64 -M raspi3 -kernel $(IMG) -serial null -serial stdio