60 lines
1.5 KiB
Makefile
60 lines
1.5 KiB
Makefile
GCCPARAMS = -m32 -fno-pie -nostdlib -fstrength-reduce -fomit-frame-pointer -finline-functions -fno-builtin -nostdinc -fno-stack-protector
|
|
ASPARAMS = -f elf32
|
|
LDPARAMS = -m elf_i386
|
|
INCBULDNUM := sh make_buildnum.sh
|
|
|
|
objects = obj/start.o \
|
|
obj/kernel.o \
|
|
obj/scrn.o \
|
|
obj/gdt.o \
|
|
obj/idt.o \
|
|
obj/isrs.o \
|
|
obj/irq.o \
|
|
obj/timer.o \
|
|
obj/kb.o \
|
|
obj/shell.o \
|
|
obj/memorymanager.o \
|
|
obj/pci.o \
|
|
obj/port.o
|
|
|
|
run:kernel.iso
|
|
qemu-system-x86_64 -m 256M -cdrom kernel.iso &
|
|
|
|
obj/%.o: src/%.c
|
|
mkdir -p $(@D)
|
|
gcc $(GCCPARAMS) -c -o $@ $<
|
|
|
|
obj/%.o: src/%.asm
|
|
mkdir -p $(@D)
|
|
nasm $(ASPARAMS) -o $@ $<
|
|
|
|
kernel.bin: linker.ld $(objects)
|
|
#Crap way to increment the build number, but will do for now
|
|
#thanks to my limited knowledge of Makefiles.
|
|
sh make_buildnum.sh
|
|
mkdir -p obj/bin
|
|
ld $(LDPARAMS) -T $< -o obj/bin/$@ $(objects)
|
|
|
|
kernel.iso: kernel.bin
|
|
mkdir iso
|
|
mkdir iso/boot
|
|
mkdir iso/boot/grub
|
|
cp obj/bin/kernel.bin iso/boot/kernel.bin
|
|
echo 'set timeout=0' > iso/boot/grub/grub.cfg
|
|
echo 'set default=0' >> iso/boot/grub/grub.cfg
|
|
echo '' >> iso/boot/grub/grub.cfg
|
|
echo 'menuentry "SDOS" {' >> iso/boot/grub/grub.cfg
|
|
echo ' multiboot /boot/kernel.bin' >> iso/boot/grub/grub.cfg
|
|
echo ' boot' >> iso/boot/grub/grub.cfg
|
|
echo '}' >> iso/boot/grub/grub.cfg
|
|
grub-mkrescue --output=kernel.iso iso
|
|
rm -rf iso
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf obj kernel.iso
|
|
|
|
.PHONY: resetbuild
|
|
resetbuild:
|
|
echo 0 > build.number
|