Files
osc2025/Makefile
2025-04-08 06:59:49 +08:00

73 lines
1.6 KiB
Makefile

MAKE := make
ARCH := aarch64
GNU := $(ARCH)-linux-gnu
QEMU := qemu-system-$(ARCH)
QEMUFLAGS += -M raspi3b -display none -serial null -serial pty
CC := $(GNU)-gcc
CCFLAGS += -Wall -Wextra -O0 \
-nostdinc -nostdlib -nostartfiles -nodefaultlibs \
-Wno-unused-parameter -Wno-main -g
LD := $(GNU)-ld
LDFLAGS += -g -nostdlib
OBJCOPY := $(GNU)-objcopy
#TARGET := kernel8
#TARGET_DIR := ./kernel
ELF := $(TARGET).elf
IMG := $(TARGET).img
LD_SCRIPT := $(TARGET_DIR)/linker.ld
INCLUDE += -Iinclude
LIB_DIR := ./lib
MISC_DIR := ./misc
#QEMUFLAGS += -dtb $(MISC_DIR)/bcm2710-rpi-3-b-plus.dtb
BOOTLOADER_DIR := ./bootloader
ROOTFS_DIR := ./rootfs
CPIO := initramfs.cpio
QEMUFLAGS += -initrd $(CPIO)
SRCS := $(shell find $(TARGET_DIR) -name '*.[cS]') \
$(shell find $(LIB_DIR) -name '*.c')
OBJS := $(SRCS:%=%.o)
.PHONY: all build clean clean_target run
all:
$(MAKE) build TARGET_DIR=./kernel TARGET=kernel8
$(MAKE) build TARGET_DIR=./bootloader TARGET=bootloader
build: $(IMG)
$(CPIO): $(shell find $(ROOTFS_DIR))
cd $(ROOTFS_DIR) && find . | cpio -o -H newc > ../$@
$(IMG): $(ELF)
$(OBJCOPY) -O binary $< $@
$(ELF): $(LD_SCRIPT) $(OBJS)
$(LD) -o $@ -T $^ $(LDFLAGS)
%.S.o: %.S
mkdir -p $(dir $@)
$(CC) -c $< -o $@ $(INCLUDE) $(CCFLAGS)
%.c.o: %.c
mkdir -p $(dir $@)
$(CC) -c $< -o $@ $(INCLUDE) $(CCFLAGS)
clean:
$(MAKE) clean_target TARGET_DIR=./kernel TARGET=kernel8
$(MAKE) clean_target TARGET_DIR=./bootloader TARGET=bootloader
clean_target:
-rm $(OBJS) $(ELF) $(IMG) $(CPIO)
run: all $(CPIO)
$(QEMU) -kernel bootloader.img $(QEMUFLAGS)
#$(QEMU) -kernel kernel8.img $(QEMUFLAGS)