ASM ?= nasm CC := i686-elf-gcc GDB := i686-elf-gdb LD := i686-elf-ld C_FILES = $(shell find src/ -type f -name '*.c') CO_FILES = $(patsubst src/%.c, obj/%.o, $(C_FILES)) ASM_FILES = $(shell find src/kernel/ -type f -name '*.asm') AO_FILES = $(patsubst src/kernel/%.asm, obj/kernel/%.o, $(ASM_FILES)) KERNEL_O_FILES = ${CO_FILES} ${AO_FILES} iso: bin/shade.iso obj/boot.o: src/boot.asm $(ASM) -felf32 $^ -o $@ bin/shade.bin: obj/boot.o ${KERNEL_O_FILES} mkdir -p bin $(CC) -T src/linker.ld -ffreestanding -O2 -nostdlib $^ -o $@ -lgcc grub-file --is-x86-multiboot bin/shade.bin bin/shade.iso: bin/shade.bin mkdir -p isodir/boot/grub cp bin/shade.bin isodir/boot/shade.bin cp src/iso/grub.cfg isodir/boot/grub/grub.cfg grub-mkrescue -o bin/shade.iso isodir rm -rf isodir obj/%.o: src/%.c mkdir -p "$(@D)" $(CC) -ffreestanding -O2 -Wall -Wextra -c $< -o $@ obj/%.o: src/%.asm mkdir -p "$(@D)" $(ASM) -f elf $< -o $@ run: clean bin/shade.iso qemu-system-x86_64 -hdd bin/shade.iso debug: clean bin/shade.iso bin/shade.bin qemu-system-x86_64 -s -S -hdd bin/shade.iso & ${GDB} os-image.bin -ex "symbol-file bin/shade.bin" -ex "target remote localhost:1234" clean: find obj -type f -name '*.o' -exec rm {} + find obj -type f -name '*.bin' -exec rm {} + find bin -type f -name '*.o' -exec rm {} + find bin -type f -name '*.bin' -exec rm {} + find . -type f -name '*.dis' -exec rm {} + rm -f kernel.elf rm -rf isodir