LD=../compiler/indigo_gcc/bin/x86_64-elf-ld CC=../compiler/indigo_gcc/bin/x86_64-elf-gcc OBJCPY=../compiler/indigo_gcc/bin/x86_64-elf-objcopy INC=-I./include EMU_CORES=4 EMU_RAM=5G XRES=1024 YRES=768 CFLAGS=-g -ffreestanding -mcmodel=kernel -masm=intel -Wall -O0 C_SRCFILES := $(wildcard kernel/*.c) C_SRCFILES := $(filter-out kernel/isv.c, $(C_SRCFILES)) C_OBJFILES := $(patsubst kernel/%.c,%.o,$(C_SRCFILES)) ASM_SRCFILES := $(wildcard kernel/*.asm) ASM_SRCFILES := $(filter-out kernel/smp_trampoline.asm, $(ASM_SRCFILES)) ASM_OBJFILES := $(patsubst kernel/%.asm,%.o,$(ASM_SRCFILES)) MISC_OBJFILES := isv.o #this will probably expand over time for files that require special treatment OBJFILES_PATH := $(patsubst %,objects/%,$(C_OBJFILES) $(ASM_OBJFILES) $(MISC_OBJFILES)) QEMU_OPTS=-smp $(EMU_CORES) -m $(EMU_RAM) -no-reboot -drive format=raw,file=./indigo_os QEMU_CPU=-cpu host,+invtsc,+tsc-deadline ifndef disable-kvm QEMU_OPTS := $(QEMU_OPTS) -enable-kvm $(QEMU_CPU) endif QEMU_PRINTDEBUG=-d int,guest_errors all: $(ASM_OBJFILES) $(C_OBJFILES) $(MISC_OBJFILES) bootloader.o smp_trampoline.o $(LD) -o indigo_os.elf --no-check-sections --oformat=elf64-x86-64 -T link.ld $(OBJFILES_PATH) $(OBJCPY) --only-keep-debug indigo_os.elf debug/debug_syms.o $(OBJCPY) -O binary --strip-all indigo_os.elf indigo_os compiledb make --dry-run > /dev/null isv.o: kernel/isv.c $(CC) $(CFLAGS) $(INC) -mgeneral-regs-only -MMD -MP -c kernel/isv.c -o objects/$@ %.o: kernel/%.c makefile $(CC) $(CFLAGS) $(INC) -MMD -MP -c $< -o objects/$@ %.o: kernel/%.asm makefile nasm -g -felf64 $< -o objects/$@ bootloader.o: nasm -g -felf64 bootloader/bootloader.asm -o objects/bootloader.o smp_trampoline.o: nasm -g -felf64 kernel/smp_trampoline.asm -o objects/smp_trampoline.o run: qemu-system-x86_64 $(QEMU_OPTS) $(QEMU_PRINTDEBUG) -nographic run_quiet: qemu-system-x86_64 $(QEMU_OPTS) $(QEMU_PRINTDEBUG) -nographic 2>/dev/null gdb: indigo_os tmux new-session -s os_gdb "qemu-system-x86_64 -S -s $(QEMU_OPTS) -nographic"\;\ split-window -h "gdb -x debug/gdbinit.gdb; killall qemu-system-x86_64" run-graphical: qemu-system-x86_64 -device VGA,edid=on,xres=$(XRES),yres=$(YRES) -S -s $(QEMU_OPTS) &\ gdb -x debug/gdbinit.gdb; killall qemu-system-x86_64 install-sandisk: indigo_os test -h /dev/disk/by-id/usb-SanDisk_Cruzer_Fit_4C531001351010112404-0:0 && \ sudo dd if=indigo_os of=/dev/disk/by-id/usb-SanDisk_Cruzer_Fit_4C531001351010112404-0:0 && \ sync install-trav: indigo_os test -h /dev/disk/by-id/usb-Kingston_DataTraveler_3.0_E0D55EA573F1E3A11963008B-0:0 && \ sudo dd if=indigo_os of=/dev/disk/by-id/usb-Kingston_DataTraveler_3.0_E0D55EA573F1E3A11963008B-0:0 && \ sync clean: rm -f objects/* rm -f indigo_os rm -f indigo_os.elf rm -f bin/* rm -f debug/debug_syms.o