2025-11-12 16:16:50 +01:00
|
|
|
TARGET=i686
|
|
|
|
|
ARCHDIR=arch/$(TARGET)/
|
|
|
|
|
SOURCEDIR=src/
|
|
|
|
|
BUILDDIR=build/
|
|
|
|
|
|
|
|
|
|
INCLUDEDIR=$(SOURCEDIR)include/
|
|
|
|
|
|
|
|
|
|
CFLAGS?=
|
|
|
|
|
ASFLAGS?=
|
|
|
|
|
|
|
|
|
|
# Define flags for C files
|
2025-11-13 21:39:22 +01:00
|
|
|
|
2025-11-12 16:16:50 +01:00
|
|
|
CFLAGS:=\
|
|
|
|
|
-O2 \
|
|
|
|
|
-ffreestanding \
|
|
|
|
|
-Wall -Wextra \
|
2025-11-13 21:39:22 +01:00
|
|
|
-fno-exceptions -fno-rtti \
|
2025-11-12 16:16:50 +01:00
|
|
|
-I$(INCLUDEDIR) \
|
|
|
|
|
$(CFLAGS)
|
|
|
|
|
|
2025-11-13 21:39:22 +01:00
|
|
|
CXXFLAGS:=$(CFLAGS)
|
|
|
|
|
|
2025-11-12 16:16:50 +01:00
|
|
|
# Define flags for assembly files
|
|
|
|
|
ASFLAGS:=\
|
|
|
|
|
-I$(SOURCEIDR)$(INCLUDEDIR) \
|
|
|
|
|
-I$(SOURCEDIR)$(ARCHDIR) \
|
|
|
|
|
$(ASFLAGS)
|
|
|
|
|
|
|
|
|
|
LINKERFLAGS:=\
|
|
|
|
|
-ffreestanding \
|
|
|
|
|
-O2 \
|
|
|
|
|
-nostdlib \
|
|
|
|
|
-lgcc
|
|
|
|
|
|
|
|
|
|
LIB_OBJS=\
|
2025-11-13 21:39:22 +01:00
|
|
|
$(BUILDDIR)$(ARCHDIR)bootstrap.o \
|
|
|
|
|
$(BUILDDIR)$(ARCHDIR)paging.o \
|
|
|
|
|
$(BUILDDIR)$(ARCHDIR)initialize_pages.o \
|
|
|
|
|
$(BUILDDIR)$(ARCHDIR)tty.o
|
2025-11-12 16:16:50 +01:00
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
2025-11-13 21:39:22 +01:00
|
|
|
$(BUILDDIR)%.o : $(SOURCEDIR)%.cpp
|
|
|
|
|
i686-elf-g++ -c $< -o $@ $(CXXFLAGS)
|
|
|
|
|
|
2025-11-12 16:16:50 +01:00
|
|
|
$(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
|
|
|
|
|
|
2025-11-13 21:39:22 +01:00
|
|
|
debug: CXXFLAGS += -g -O1
|
2025-11-12 16:16:50 +01:00
|
|
|
debug: ASFLAGS += -g
|
2025-11-13 21:39:22 +01:00
|
|
|
debug: CFLAGS += -g -O1
|
2025-11-12 16:16:50 +01:00
|
|
|
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
|
2025-11-13 21:39:22 +01:00
|
|
|
|