CC = gcc GCCPARAMS = -m32 -fno-pie -nostdlib -fstrength-reduce -fomit-frame-pointer -finline-functions -fno-builtin -nostdinc -fno-stack-protector ASPARAMS = -f elf32 LDPARAMS = -m elf_i386 INCBULDNUM = sh make_buildnum.sh SRC := kernel OBJ := obj SOURCES := $(wildcard $(SRC)/*.c) ASMSOURCES := $(wildcard $(SRC)/*.asm) OBJECTS := $(patsubst $(SRC)/%.c, $(OBJ)/%.o, $(SOURCES)) ASMOBJECTS := $(patsubst $(SRC)/%.asm, $(OBJ)/%.o, $(ASMSOURCES)) run:kernel.iso qemu-system-x86_64 -serial pipe:/tmp/guest -m 256M -cdrom kernel.iso & $(OBJ)/%.o: $(SRC)/%.c mkdir -p $(@D) $(CC) $(GCCPARAMS) $(SRC) -c -o $@ $< $(OBJ)/%.o: $(SRC)/%.asm mkdir -p $(@D) nasm $(ASPARAMS) -o $@ $< kernel.bin: $(OBJECTS) $(ASMOBJECTS) @#Crap way to increment the build number, but will do for now @#thanks to my limited knowledge of Makefiles. @#Sadly this number in the compiled code will always be off by one with this method.... @sh make_buildnum.sh mkdir -p obj/bin ld $(LDPARAMS) -T linker.ld -o obj/bin/$@ $(OBJECTS) $(ASMOBJECTS) kernel.iso: kernel.bin mkdir iso mkdir iso/boot mkdir iso/boot/grub cp obj/bin/kernel.bin iso/boot/kernel.bin echo 'set timeout=0' > iso/boot/grub/grub.cfg echo 'set default=0' >> iso/boot/grub/grub.cfg echo '' >> iso/boot/grub/grub.cfg echo 'menuentry "SDOS" {' >> iso/boot/grub/grub.cfg echo ' multiboot /boot/kernel.bin' >> iso/boot/grub/grub.cfg echo ' boot' >> iso/boot/grub/grub.cfg echo '}' >> iso/boot/grub/grub.cfg grub-mkrescue --output=kernel.iso iso rm -rf iso .PHONY: clean clean: rm -rf obj/* kernel.iso .PHONY: resetbuild resetbuild: echo 0 > build.number