ARCH = x86_64-elf- CC = $(ARCH)gcc AS = $(ARCH)as LD = $(ARCH)ld OBJDUMP = $(ARCH)objcopy OBJCOPY = $(ARCH)objdump CFLAGS = -Wall -Werror -Wno-error=infinite-recursion -O -fno-omit-frame-pointer # -mgeneral-regs-only disables SIMD instructions CFLAGS += -MD -O3 -mgeneral-regs-only CFLAGS += -ffreestanding -fno-common -nostdlib CFLAGS += -I include CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) CFLAGS += -fno-pie -no-pie -fno-pic LDFLAGS = -z max-page-size=4096 K=kernel OBJS = \ $K/header.o \ $K/boot.o \ $K/boot64.o \ $K/main.o \ $K/graphics.o \ $K/multiboot2.o \ $K/debug.o \ kernel.iso: kernel.bin $K/grub.cfg mkdir -p isodir/boot/grub cp kernel.bin isodir/boot/kernel.bin cp $K/grub.cfg isodir/boot/grub/grub.cfg grub-mkrescue -o kernel.iso isodir kernel.bin: $(OBJS) $K/kernel.ld Makefile $(LD) $(LDFLAGS) -T $K/kernel.ld $(OBJS) -o kernel.bin %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ %.o: %.S $(CC) $(CFLAGS) -c $< -o $@ .PHONY: qemu bochs clean run QEMU = qemu-system-x86_64 BOCHS = bochs -q qemu: kernel.iso $(QEMU) -cdrom kernel.iso bochs: kernel.iso $(BOCHS) -qf .bochsrc clean: rm -f kernel.bin kernel.iso $K/*.o $K/*.d xbochs.log bx_enh_dbg.ini rm -rf isodir run: qemu