|
| 1 | +SYSROOT=~/sysroot/ |
| 2 | +ROOTDIR=$(shell pwd) |
| 3 | +SRCDIR=$(ROOTDIR)/src |
| 4 | +INCDIR=$(SRCDIR)/include |
| 5 | +GRUBDIR=~/sysroot/grub/ |
| 6 | + |
| 7 | +CC=$(SYSROOT)/bin/i686-elf-gcc |
| 8 | +CFLAGS= |
| 9 | +KCFLAGS= -I$(INCDIR) -fno-builtin -fno-leading-underscore -ffreestanding -Wall -O2 -nostdlib $(CFLAGS) |
| 10 | + |
| 11 | +LD=$(SYSROOT)/bin/i686-elf-ld |
| 12 | +LINKERSCRIPT=$(SRCDIR)/boot/link.ld |
| 13 | +LIBGCC_PATH=$(shell $(CC) -print-libgcc-file-name) |
| 14 | +LDFLAGS= -T$(LINKERSCRIPT) |
| 15 | + |
| 16 | +AS=$(SYSROOT)/bin/i686-elf-as |
| 17 | +ASFLAGS= |
| 18 | + |
| 19 | +NASM=nasm |
| 20 | +NASMFLAGS=-f elf32 -g -F dwarf -O2 -w+zeroing |
| 21 | +OBJCOPY=$(SYSROOT)/bin/i686-elf-objcopy |
| 22 | +OBJDUMP=$(SYSROOT)/bin/i686-elf-objdump |
| 23 | + |
| 24 | +QEMU=qemu-system-i386 |
| 25 | +QEMUFLAGS=-cdrom $(ISOFILE) -m 512M -boot d |
| 26 | +QEMUDFLAGS=-s -S -daemonize |
| 27 | + |
| 28 | +KERNEL_NAME=arthur |
| 29 | +OS_NAME=SectorOS |
| 30 | + |
| 31 | +KERNEL_IMAGE=$(KERNEL_NAME).elf |
| 32 | +ISOFILE=$(OS_NAME).iso |
| 33 | + |
| 34 | +OBJECTS= $(SRCDIR)/boot/multiboot2.o \ |
| 35 | + $(SRCDIR)/boot/boot.o \ |
| 36 | + $(SRCDIR)/kernel/kernel.o \ |
| 37 | + $(SRCDIR)/common/debug.o \ |
| 38 | + $(SRCDIR)/common/printf.o \ |
| 39 | + $(SRCDIR)/drivers/io/ports.o \ |
| 40 | + $(SRCDIR)/drivers/video/textmode.o |
| 41 | + |
| 42 | +kernel : $(KERNEL_IMAGE) |
| 43 | +iso : $(ISOFILE) |
| 44 | + |
| 45 | +$(KERNEL_IMAGE) : $(OBJECTS) |
| 46 | + @echo "[LD] $@" |
| 47 | + @$(LD) $(LDFLAGS) -o $@ $(OBJECTS) $(LIBGCC_PATH) |
| 48 | + |
| 49 | +$(ISOFILE) : $(KERNEL_IMAGE) |
| 50 | + @echo '[GRUB] $@' |
| 51 | + @mkdir -p $(OS_NAME)/boot/grub |
| 52 | + @cp $(ROOTDIR)/docs/grub.cfg $(OS_NAME)/boot/grub/grub.cfg |
| 53 | + @cp $(KERNEL_IMAGE) $(OS_NAME)/boot/ |
| 54 | + @$(GRUBDIR)bin/grub-mkrescue -o $(ISOFILE) $(OS_NAME) --product-name=$(OS_NAME) |
| 55 | + @rm -rf $(OS_NAME) |
| 56 | + |
| 57 | +%.o : %.c |
| 58 | + @echo '[CC] $@' |
| 59 | + @$(CC) $(KCFLAGS) -c -o $@ $< |
| 60 | + |
| 61 | +%.o : %.s |
| 62 | + @echo '[AS] $@' |
| 63 | + @$(AS) $(ASFLAGS) -o $@ $< |
| 64 | + |
| 65 | +%.o : %.asm |
| 66 | + @echo '[NASM] $@' |
| 67 | + @$(NASM) $(NASMFLAGS) -o $@ $< |
| 68 | + |
| 69 | +run : $(ISOFILE) |
| 70 | + @echo '[QEMU] Running OS...' |
| 71 | + @$(QEMU) $(QEMUFLAGS) -serial stdio |
| 72 | + |
| 73 | +PHONY: clean |
| 74 | +clean: |
| 75 | + @echo 'Cleaning the source directory...' |
| 76 | + @rm -f $(OBJECTS) $(KERNEL_IMAGE) $(ISOFILE) |
0 commit comments