summaryrefslogtreecommitdiff
path: root/src/makefile
diff options
context:
space:
mode:
authorBrett Weiland <brett_weiland@bpcspace.com>2021-08-24 14:09:29 -0500
committerBrett Weiland <brett_weiland@bpcspace.com>2021-08-24 14:09:29 -0500
commit9b22a6965579ea1867aea291d910c96f386b518b (patch)
treed06dbb9c4708f1cc713bcb115b32ff9bce4cf9b9 /src/makefile
parentbad4b0e9bdfee336bfc1c23761408279eaec1558 (diff)
major backup 8.24.21
Diffstat (limited to 'src/makefile')
-rw-r--r--src/makefile104
1 files changed, 71 insertions, 33 deletions
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