##################### # # # FoolOS Build Sys. # # # ##################### ############ phony targets ############ .PHONY: all clean run ############ some constants ############ USB_STICK=/dev/sdg #take care! #here our kernel will be loaded by the bootloader. KERNEL_START=0x10000 ############ flags ############ CFLAGS=-ffreestanding -std=gnu99 -m32 -fno-asynchronous-unwind-tables -O0 CFLAGS+= -I. #CFLAGS+=-fdata-sections -ffunction-sections #CFLAGS+= -Werror ############ 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 #multiprocessor binary entry MP_BIN=./boot/mp.bin #some fillup data (zeros) FILLUP=./data/fill.bin ############ final image (default target) ############ all: FoolOS.img FoolData.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 $(KERNEL_START) --oformat binary -melf_i386 $^ -O0 # --gc-sections --entry=kernel_main -v ############ 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: $(MBR) kernel.bin $(FILLUP) cp $(FILLUP) $@ dd if=$(MBR) of=$@ bs=1 seek=0 conv=notrunc dd if=kernel.bin of=$@ bs=1 seek=512 conv=notrunc binfont.img: binfont.bin cat $^ > $@ FoolData.img: binfont.bin cp $^ $@ ############ vm stuff ############ # run in our local bochs (we need cirrus support for our vesa mode) run: all ~/opt/bochs-2.6.6/bochs -q -rc bochsdebug ############ cleanup ############ clean: -rm *.bin *.img bochs.log $(KERNEL_ENTRY) $(ASMOBJECTS) $(OBJECTS) $(FILLUP) $(MBR) $(MP_BIN) bochs.out ne2k-tx.log ne2k-txdump.txt ############ test stuff ############ stick: FoolOS.img cat FoolOS.img > $(USB_STICK) && sync xxd $(USB_STICK) | head -n 50