From 9b22a6965579ea1867aea291d910c96f386b518b Mon Sep 17 00:00:00 2001 From: Brett Weiland Date: Tue, 24 Aug 2021 14:09:29 -0500 Subject: major backup 8.24.21 --- src/makefile | 104 ++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 71 insertions(+), 33 deletions(-) (limited to 'src/makefile') diff --git a/src/makefile b/src/makefile index 2398509..83876c2 100644 --- a/src/makefile +++ b/src/makefile @@ -4,60 +4,98 @@ OBJCPY=../compiler/indigo_gcc/bin/x86_64-elf-objcopy INC=-I./include EMU_CORES=4 -EMU_RAM=4G +EMU_RAM=5G XRES=1024 YRES=768 -CCFLAGS=-g -ffreestanding -Wall +CFLAGS=-g -ffreestanding -mcmodel=kernel -masm=intel -Wall -O0 -make: - nasm -g -felf64 bootloader/bootloader.asm -o objects/bootloader.o - $(CC) $(INC) $(CCFLAGS) -c kernel/kernel.c -o objects/kernel.o - $(CC) $(INC) $(CCFLAGS) -c kernel/panic.c -o objects/panic.o - $(CC) $(INC) $(CCFLAGS) -c kernel/acpi.c -o objects/acpi.o - $(CC) $(INC) $(CCFLAGS) -c kernel/drivers/serial.c -o objects/serial.o - $(CC) $(INC) $(CCFLAGS) -c kernel/drivers/video.c -o objects/video.o - $(CC) $(INC) $(CCFLAGS) -c kernel/printf.c -o objects/printf.o - $(CC) $(INC) $(CCFLAGS) -c kernel/page.c -o objects/page.o - $(CC) $(INC) $(CCFLAGS) -c kernel/libc.c -o objects/libc.o - $(LD) -o indigo_os.elf --oformat=elf64-x86-64 -T link.ld +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 -ifneq ("$(wildcard $(./debug/serial.in))","") - mkfifo debug/serial.in + 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/$@ + +printf.o: kernel/printf.c +ifdef screen + $(CC) $(CFLAGS) $(INC) -MMD -MP -DSCREEN_OUTPUT -c kernel/printf.c -o objects/$@ +else + $(CC) $(CFLAGS) $(INC) -MMD -MP -c kernel/printf.c -o objects/$@ endif -ifneq ("$(wildcard $(./debug/serial.out))","") - mkfifo debug/serial.out + +kernel.o: kernel/kernel.c +ifdef screen + $(CC) $(CFLAGS) $(INC) -MMD -MP -DSCREEN_OUTPUT -c kernel/kernel.c -o objects/$@ +else + $(CC) $(CFLAGS) $(INC) -MMD -MP -c kernel/kernel.c -o objects/$@ endif -# rm -f indigo_os.elf +%.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 -preproc_debug: - nasm -g -felf64 bootloader/bootloader.asm - $(CC) $(INC) $(CCFLAGS) -E -c kernel/kernel.c - $(CC) $(INC) $(CCFLAGS) -E -c kernel/acpi.c - $(CC) $(INC) $(CCFLAGS) -E -c kernel/drivers/serial.c - $(CC) $(INC) $(CCFLAGS) -E -c kernel/drivers/video.c - $(CC) $(INC) $(CCFLAGS) -E -c kernel/printf.c - $(CC) $(INC) $(CCFLAGS) -E -c kernel/page.c - $(CC) $(INC) $(CCFLAGS) -E -c kernel/libc.c +smp_trampoline.o: + nasm -g -felf64 kernel/smp_trampoline.asm -o objects/smp_trampoline.o run: - qemu-system-x86_64 -smp $(EMU_CORES) -m $(EMU_RAM) -nographic -no-reboot -drive format=raw,file=./indigo_os - + qemu-system-x86_64 $(QEMU_OPTS) $(QEMU_PRINTDEBUG) -nographic gdb: indigo_os - tmux new-session -s os_gdb "qemu-system-x86_64 -smp $(EMU_CORES) -nographic -no-reboot -S -s -drive format=raw,file=./indigo_os -m $(EMU_RAM)"\;\ + 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 -S -s -smp $(EMU_CORES) -m $(EMU_RAM) -no-reboot -serial pipe:debug/serial -device VGA,edid=on,xres=$(XRES),yres=$(YRES) -drive format=raw,file=./indigo_os &\ + 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 - rm -f debug/serial.in - rm -f debug/serial.out -- cgit v1.2.3