##################### # # # FoolOS Build Sys. # # # ##################### .PHONY: all clean run #improve implicit rules #lets use the size of a 1.44 floppy for a start for our boot img IMAGE_SIZE=1474560 #font data starts at sector 50 FONT_DATA_START=25600 #data starts at 0x8000 #DATA_START=32768 CFLAGS=-ffreestanding -std=gnu99 -m32 -fno-asynchronous-unwind-tables -O0 ############ source and object files ############ #kernel sources (asm and c) SOURCES=$(wildcard ./kernel/*.c) SOURCES+=$(wildcard ./lib/*/*.c) ASMSOURCES=$(wildcard ./asm/*.asm) #kernel object files OBJECTS=$(patsubst %.c, %.o, $(SOURCES)) ASMOBJECTS=$(patsubst %.asm, %.o, $(ASMSOURCES)) KERNEL_ENTRY=./boot/kernel_entry.o #master boot record asm MBR=./boot/mbr.bin #some fillup data (zeros) FILLUP=./data/fill.bin ############ final image (default target) ############ all: FoolOS.img ############ nasm assembling rules ############ %.o: %.asm nasm -f elf $^ -o $@ %.bin: %.asm nasm -f bin $^ -o $@ ############ linking kernel binary ############ # the kernel_entry.o needs to be FIRST!! kernel.bin: $(KERNEL_ENTRY) $(ASMOBJECTS) $(OBJECTS) ld -o $@ -Ttext 0x1000 --oformat binary -melf_i386 $^ -O0 ############ fool-font ############ binfont.bin: data/binfont.src python tools/binarize.py $< $@ ############ assembling of final image ############ # master boot record, kernel binary and fool-font FoolOS.img: Fool.img FoolData.img $(FILLUP) cat $^ | head -c $(IMAGE_SIZE) > $@ Fool.img: $(MBR) kernel.bin $(FILLUP) cat $^ | head -c $(FONT_DATA_START) > $@ FoolData.img: binfont.bin cat $^ > $@ ############ vm stuff ############ # run in our local bochs (we need cirrus support for our vesa mode) run: FoolOS.img ~/opt/bochs-2.6.6/bochs -q ############ cleanup ############ clean: -rm *.bin *.img bochs.log $(KERNEL_ENTRY) $(ASMOBJECTS) $(OBJECTS) $(FILLUP) $(MBR)