diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..174ca3f --- /dev/null +++ b/Makefile @@ -0,0 +1,50 @@ +C_SOURCES = $(wildcard src/*.c) +C_HEADERS = $(wildcard src/*.h) +C_OBJECTS = ${C_SOURCES:.c=.o} +C_OBJECTD = ${subst src,obj,${C_OBJECTS}} +A_SOURCES = $(wildcard src/*.S) +A_OBJECTS = ${A_SOURCES:.S=.o} +A_OBJECTD = ${subst src,obj,${A_OBJECTS}} + +CROSS = arm-none-eabi +CC = ${CROSS}-gcc +AS = ${CROSS}-as +OBJCOPY = ${CROSS}-objcopy +QEMU = qemu-system-arm +GDB = gdb-multiarch +CFLAGS = -mcpu=cortex-a7 -fpic -ffreestanding -std=gnu99 -O2 -Wall -Wextra -nostdlib -g +AFLAGS = -mcpu=cortex-a7 + +.PHONY: clean run run-debug debug export + +default: clean build/kernel7.img + +build/kernel7.img: build/kernel.elf + ${OBJCOPY} $< -O binary $@ + +build/kernel.list: build/kernel.elf + ${OBJDUMP} -D $< > $@ + +build/kernel-g.elf: ${A_OBJECTD} ${C_OBJECTD} + ${CC} -T linker.ld -o $@ ${CFLAGS} $^ -lgcc + +build/kernel.elf: ${A_OBJECTD} ${C_OBJECTD} + ${CC} -T linker.ld -o $@ -ffreestanding -O2 -nostdlib $^ -lgcc + +export: build/kernel.list + cp build/kernel.elf /mnt/c/Local/ + +obj/%.o: src/%.S + ${AS} ${AFLAGS} -g -c $< -o $@ + +clean: + rm -f obj/*.o build/*.elf build/*.list build/*.img + +run: build/kernel.elf + ${QEMU} -M raspi2 -kernel $< -m 1G -serial mon:stdio + +run-debug: build/kernel-g.elf + ${QEMU} -M raspi2 -cpu arm1176 -kernel $< -m 1G -s -S -serial mon:stdio -nographic + +debug: build/kernel-g.elf build/kernel.list + ${GDB} $< -command=gdbinit |