GPP_ARGS = -Wall -Wextra -O3 -ggdb -I include \ -ffreestanding -fno-exceptions -fno-rtti -mno-sse KGPP_ARGS = ${GPP_ARGS} AGPP_ARGS = ${GPP_ARGS} LD_ARGS = -z noexecstack KLD_ARGS = -T kernel/link.ld ${LD_ARGS} ALD_ARGS = -T applications/link.ld ${LD_ARGS} LLD_ARGS = ${LD_ARGS} all: out/disk.iso run: out/disk.iso gdb -x qemu.gdb clean: rm -rf obj out dist-clean: rm -rf limine rm -f include/mercury/kernel/limine.hpp limine: git clone --depth=1 -b v6.x-branch \ https://github.com/limine-bootloader/limine.git limine cd limine && ./bootstrap && ./configure -q --enable-bios --enable-bios-cd +make -C limine cp limine/limine.h include/mercury/kernel/limine.hpp obj/kernel/entry.cpp.o: kernel/entry.cpp limine @mkdir -p $(@D) g++ -c ${KGPP_ARGS} $< -o $@ obj/kernel/%.cpp.o: kernel/%.cpp @mkdir -p $(@D) g++ -c ${KGPP_ARGS} $< -o $@ obj/kernel/%.asm.o: kernel/%.asm @mkdir -p $(@D) nasm -f elf64 $< -o $@ KERNEL_OBJECTS = allocator.cpp application.cpp entry.cpp framebuffer.cpp \ paging.asm paging.cpp storage.cpp storage/bd/memory.cpp terminal.cpp \ storage/fs/tarfs.cpp utility.cpp vfile.cpp syscall.asm syscall.cpp \ interrupts.asm interrupts.cpp obj/kernel.elf: ${KERNEL_OBJECTS:%=obj/kernel/%.o} ld ${KLD_ARGS} $^ -o $@ obj/stdlib/%.asm.o: stdlib/%.asm @mkdir -p $(@D) nasm -f elf64 $< -o $@ obj/stdlib/%.cpp.o: stdlib/%.cpp @mkdir -p $(@D) g++ -c ${AGPP_ARGS} $< -o $@ STDLIB_OBJECTS = entry.cpp syscall.asm obj/stdlib.o: ${STDLIB_OBJECTS:%=obj/stdlib/%.o} ld -r ${LLD_ARGS} $^ -o $@ obj/%.cpp.o: applications/%.cpp @mkdir -p $(@D) g++ -c ${AGPP_ARGS} $< -o $@ INIT_OBJECTS = main.cpp obj/initfs/bin/init.elf: ${INIT_OBJECTS:%=obj/init/%.o} obj/stdlib.o @mkdir -p $(@D) ld ${ALD_ARGS} $^ -o $@ APPLICATIONS = init obj/initfs.tgz: ${APPLICATIONS:%=obj/initfs/bin/%.elf} tar czf obj/initfs.tgz -C obj/initfs . out/disk.iso: obj/kernel.elf obj/initfs.tgz limine mkdir -p obj/iso out cp obj/kernel.elf obj/initfs.tgz limine/bin/limine-bios.sys \ limine/bin/limine-bios-cd.bin limine.cfg obj/iso/ cp terminus/ter-u16b.psf obj/iso/termfont.psf xorriso -as mkisofs -quiet -no-emul-boot -boot-info-table \ -boot-load-size 4 -b limine-bios-cd.bin obj/iso -o $@ limine/bin/limine bios-install $@ rm -rf obj/iso