ARMGNU = arm-none-eabi SHELL = /bin/sh TARGET = kernel7.bin SDTARGET = /Volumes/boot/kernel7.img DEPS = *.h DIRS = lib_syscalls app? COPS = -Wall -O2 -nostdlib -nostartfiles -ffreestanding all : $(TARGET) @for i in $(DIRS) ; do ( cd $$i ; make $(MAKECMDGOALS) ) ; done cp : $(TARGET) cp $(TARGET) $(SDTARGET) @for i in $(DIRS) ; do ( cd $$i ; make $(MAKECMDGOALS) ) ; done diskutil unmount /Volumes/boot copy : clean $(TARGET) cp $(TARGET) $(SDTARGET) @for i in $(DIRS) ; do ( cd $$i ; make $(MAKECMDGOALS) ) ; done %.o : %.s $(ARMGNU)-as $< -o $@ %.o : %.c $(DEPS) $(ARMGNU)-gcc $(COPS) -c $< -o $@ OBJECTS := $(patsubst %.s,%.o,$(wildcard *.s)) $(patsubst %.c,%.o,$(wildcard *.c)) $(TARGET) : $(OBJECTS) make kversion $(ARMGNU)-ld $(OBJECTS) -T memmap -o kernel7.elf $(ARMGNU)-objdump -D kernel7.elf > kernel7.list $(ARMGNU)-objcopy kernel7.elf -O binary $(TARGET) kversion : echo char kversion\[\] = \"Kernel version: \[`basename \`pwd\``\, `date`\]\"\; > kversion.c $(ARMGNU)-gcc $(COPS) -c kversion.c -o kversion.o clean : rm -f *.o rm -f *.bin rm -f *.elf rm -f *.list rm -f *.auto @for i in $(DIRS) ; do ( cd $$i ; make $(MAKECMDGOALS) ) ; done