56 lines
1.6 KiB
Makefile
56 lines
1.6 KiB
Makefile
CC = gcc
|
|
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
|
|
|
|
SRC := kernel
|
|
OBJ := obj
|
|
|
|
SOURCES := $(wildcard $(SRC)/*.c)
|
|
ASMSOURCES := $(wildcard $(SRC)/*.asm)
|
|
OBJECTS := $(patsubst $(SRC)/%.c, $(OBJ)/%.o, $(SOURCES))
|
|
ASMOBJECTS := $(patsubst $(SRC)/%.asm, $(OBJ)/%.o, $(ASMSOURCES))
|
|
|
|
run:kernel.iso
|
|
qemu-system-x86_64 -serial pipe:/tmp/guest -m 256M -cdrom kernel.iso &
|
|
|
|
$(OBJ)/%.o: $(SRC)/%.c
|
|
mkdir -p $(@D)
|
|
$(CC) $(GCCPARAMS) $(SRC) -c -o $@ $<
|
|
|
|
$(OBJ)/%.o: $(SRC)/%.asm
|
|
mkdir -p $(@D)
|
|
nasm $(ASPARAMS) -o $@ $<
|
|
|
|
kernel.bin: $(OBJECTS) $(ASMOBJECTS)
|
|
@#Crap way to increment the build number, but will do for now
|
|
@#thanks to my limited knowledge of Makefiles.
|
|
@#Sadly this number in the compiled code will always be off by one with this method....
|
|
@sh make_buildnum.sh
|
|
mkdir -p obj/bin
|
|
ld $(LDPARAMS) -T linker.ld -o obj/bin/$@ $(OBJECTS) $(ASMOBJECTS)
|
|
|
|
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
|