##################### # # # FoolOS Build Sys. # # # ##################### # main phony targets .PHONY: all new run newrun stick clean tags mount umount ############ some constants ############ FOOLOS=FoolOS.img FOOLOS_VDI=FoolOS.vdi #submodules SUBDIRS=font userspace #take care to set this properly! USB_STICK=/dev/sdf #use our cross compiler CC=i686-foolos-gcc ############ compiler flags ############ CFLAGS= ## CFLAGS+=-fstack-protector-all ## CFLAGS+=-Werror-implicit-function-declaration ## CFLAGS+=-w CFLAGS+=-ffreestanding CFLATS+=-Wall CFLAGS+=-Wextra #CFLAGS+=-O3 #CFLAGS+=-O0 #CFLAGS+=-nostdlib CFLAGS+=-std=gnu11 CFLAGS+=-I. CFLAGS+=-I/home/miguel/temp/fool-os-stuff/newlib-2.1.0/newlib/libc/include CFLAGS+=-gstabs #CFLAGS+=-lgcc #CFLAGS+=-fno-zero-initialized-in-bss #CFLAGS+= -O4 #CFLAGS+=-fdata-sections -ffunction-sections #CFLAGS+= -Werror LDFLAGS= LDFLAGS+=-nostdlib LDFLAGS+=-lgcc #verbosity #V = 0 #CC = @echo "Compiling $<..."; i686-foolos-gcc #CC_1 = $(CCC) #CC = $(CC_$(V)) ############ source and object files and their deps ############ #kernel sources (asm and c) SOURCES= SOURCES+=$(wildcard ./kernel/*.c) SOURCES+=$(wildcard ./video/*.c) SOURCES+=$(wildcard ./lib/*/*.c) SOURCES+=$(wildcard ./fs/*.c) SOURCES+=$(wildcard ./terminal/*.c) #derive kernel object files OBJECTS=$(patsubst %.c, %.o, $(SOURCES)) #derive deps DEPS=$(patsubst %.c, %.d, $(SOURCES)) ####### ASM STUFF ##### ASM_SOURCES=$(wildcard ./asm/*.asm) ASM_OBJECTS=$(patsubst %.asm, %.o, $(ASM_SOURCES)) ASM_MULTIBOOT=$(wildcard ./asm/*.s) ASM_MULTIBOOT_OBJ=$(patsubst %.s, %.o, $(ASM_MULTIBOOT)) ############ Final Targets ############ all: $(FOOLOS) tags # $(FOOLOS_VDI) new: clean all run: run-qemu-debug newrun: clean run ########### INCLUDES ################### include Makefile.common -include $(DEPS) #### BINARIES AND SUBMODULES ######## KERNEL_IMG=foolos.img BIN_KERNEL=kernel.bin BIN_MBR=./boot1/mbr.bin BIN_STAGE2=./boot2/stage2.bin BIN_MP=./boot2/mp.bin BIN_FOOLFONT=./font/binfont.bin IMG_FILLUP=fill.img IMG_USERSPACE=./userspace/ext2.img ######### RECURSIVE MAKES ######################## CLEANDIRS=$(SUBDIRS:%=clean-%) .PHONY: $(SUBDIRS) $(CLEANDIRS) $(SUBDIRS): $(MAKE) -C $@ $(CLEANDIRS): $(MAKE) -C $(@:clean-%=%) clean ############ linking kernel binary ############ $(KERNEL_IMG): $(ASM_MULTIBOOT_OBJ) $(ASM_OBJECTS) $(OBJECTS) $(CC) $(CFLAGS) $(LDFLAGS) -T linker.ld -o $@ $^ ############ assembling of final image ############ # master boot record, kernel binary and fool-font $(FOOLOS): $(KERNEL_IMG) $(SUBDIRS) sudo cp $(KERNEL_IMG) /mnt/vdi/boot sudo cp $(IMG_USERSPACE) /mnt/vdi/boot sync ############ virtual machines stuff ############ # vdi image for VirtualBox $(FOOLOS_VDI): disk.img -rm FoolOS.vdi #VBoxManage convertfromraw $< $@ --uuid 2f11ca11-c35d-4240-b77e-79e37d32616c VBoxManage convertfromraw disk.img $@ --uuid 2f11ca11-c35d-4240-b77e-79e37d32616c # run in our local bochs (we need cirrus support for our vesa mode) run-bochs: all ~/opt/bochs-2.6.6/bochs -q -f bochs/bochsrc -rc bochs/bochsdebug # run in qemu run-qemu: all qemu -enable-kvm $(FOOLOS) run-qemu-debug: all # qemu -enable-kvm -s -S ~/temp/FoolOs/disk.img qemu -enable-kvm -s disk.img stop: killall qemu ############ create bootable usb image ############ stick: $(FOOLOS) cat $< > $(USB_STICK) && sync xxd $(USB_STICK) | head -n 50 ############ cleanup ############ clean: $(CLEANDIRS) -rm *.bin $(FOOLOS) $(FOOLOS_VDI) $(KERNEL_ENTRY) $(ASM_MULTIBOOT_OBJ) $(KERNEL_IMG) $(ASM_OBJECTS) $(OBJECTS) $(IMG_FILLUP) $(BIN_MBR) $(BIN_MP) $(BIN_STAGE2) $(DEPS) bochs.out bochs.log ne2k-tx.log ne2k-txdump.txt tags tags: ctags --recurse=yes . ############ mounting ############# mount: disk.img echo "* mounting disk image" sudo losetup /dev/loop1 $< -o 1048576 sudo mount /dev/loop1 /mnt/vdi umount: echo "* unmounting disk image" sudo umount /mnt/vdi sudo losetup -d /dev/loop1