TARGET=i686 ARCHDIR=arch/$(TARGET)/ SOURCEDIR=src/ BUILDDIR=build/ INCLUDEDIR=$(SOURCEDIR)include/ CFLAGS?= ASFLAGS?= # Define flags for C files CFLAGS:=\ -O2 \ -ffreestanding \ -Wall -Wextra \ -fno-exceptions -fno-rtti \ -I$(INCLUDEDIR) \ $(CFLAGS) CXXFLAGS:=$(CFLAGS) # Define flags for assembly files ASFLAGS:=\ -I$(SOURCEIDR)$(INCLUDEDIR) \ -I$(SOURCEDIR)$(ARCHDIR) \ $(ASFLAGS) LINKERFLAGS:=\ -ffreestanding \ -O2 \ -nostdlib \ -lgcc LIB_OBJS=\ $(BUILDDIR)$(ARCHDIR)bootstrap.o \ $(BUILDDIR)$(ARCHDIR)paging.o \ $(BUILDDIR)$(ARCHDIR)initialize_pages.o \ $(BUILDDIR)$(ARCHDIR)tty.o KERNEL_OBJS=\ $(BUILDDIR)kernel/kernel.o OBJS=$(LIB_OBJS) $(KERNEL_OBJS) LINKER_PATH=$(SOURCEDIR)$(ARCHDIR)linker.ld .PHONY: all clean snowstorm.iso debug .SUFFIXES: .c .o .s $(BUILDDIR)%.o : $(SOURCEDIR)%.cpp i686-elf-g++ -c $< -o $@ $(CXXFLAGS) $(BUILDDIR)%.o : $(SOURCEDIR)%.c i686-elf-gcc -c $< -o $@ $(CFLAGS) $(BUILDDIR)%.o : $(SOURCEDIR)%.s i686-elf-as $< -o $@ $(ASFLAGS) all: snowstorm.iso # Take the kernel file and make a bootable ISO through GRUB snowstorm.iso: snowstorm.kernel cp build/snowstorm.kernel build/isodir/boot/snowstorm.kernel grub-mkrescue -o build/snowstorm.iso build/isodir # link all object files together snowstorm.kernel: $(OBJS) i686-elf-gcc -T $(LINKER_PATH) -o build/snowstorm.kernel $(OBJS) $(LINKERFLAGS) grub-file --is-x86-multiboot build/snowstorm.kernel debug: CXXFLAGS += -g -O1 debug: ASFLAGS += -g debug: CFLAGS += -g -O1 debug: all clean: rm -f $(OBJS) rm -f build/snowstorm.kernel rm -f build/snowstorm.iso rm -f build/isodir/boot/snowstorm.kernel run: all qemu-system-i386 -d int -no-reboot -kernel build/snowstorm.kernel run-debug: debug qemu-system-i386 -d int -no-reboot -S -gdb tcp::9000 -kernel build/snowstorm.kernel