#################### # FoolOS Build Sys # #################### .PHONY: all new run newrun stick clean tags mount umount ############ compiler ############ GIT_REVISION=$(shell git rev-parse HEAD) #use our cross compiler CC=i686-foolos-gcc AS=i686-foolos-as #sorry just this CC=i686-elf-gcc AS=i686-elf-as ############ compiler flags ############ CFLAGS= CFLAGS=-DGIT_REVISION=\"$(GIT_REVISION)\" CFLAGS+=-ffreestanding # do we need this if using own compiler? CFLAGS+=-nostdlib CFLAGS+=-O0 CFLAGS+=-I. CFLAGS+=-I/home/miguel/temp/foolos/usr/i686-foolos/include/ CFLAGS+=-gstabs #CFLAGS+=-fstack-protector-all #CFLAGS+=-fno-zero-initialized-in-bss #CFLAGS+=-fdata-sections -ffunction-sections #CFLAGS+= -w # disable all warnings #CFLAGS+= -Wimplicit-function-declaration #CFLAGS+= -Wextra #CFLAGS+= -Wall #CFLAGS+= -Werror #CFLAGS+= -Werror=implicit-function-declaration CFLAGS+= -Wno-int-conversion CFLAGS+= -Wno-incompatible-pointer-types ######## linker flags #################### LDFLAGS= LDLIBS+=-lgcc ########## assembler flags ################# ASFLAGS= ASFLAGS+=-gstabs ########## verbosity ##################3 V = 0 #CC = @echo "Compiling (i686-elf-gcc) $<..."; i686-elf-gcc AS = @echo "Assembling (i686-elf-as) $<..."; i686-elf-as #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 ./fs/*.c) SOURCES+=$(wildcard ./driver/*.c) SOURCES+=$(wildcard ./terminal/*.c) SOURCES+=$(wildcard ./lib/*/*.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)) #### BINARIES AND SUBMODULES ######## FOOLOS_ISO=FoolOS.iso 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 SUBDIRS=userspace IMG_FILLUP=fill.img IMG_USERSPACE=./userspace/ext2.img ############ Final Targets ############ all: tags $(FOOLOS_ISO) #$(FOOLOS) # tags # $(FOOLOS_VDI) new: clean all newrun: clean run run: run-qemu debug: run-qemu-debug ########## INCLUDES ################### include Makefile.common -include $(DEPS) ######### RECURSIVE MAKES ######################## CLEANDIRS=$(SUBDIRS:%=clean-%) .PHONY: $(SUBDIRS) $(CLEANDIRS) $(SUBDIRS): @echo "-- Recursing make to [$@]..."; $(MAKE) --no-print-directory -C $@ @echo "-- Returned from [$@]" $(CLEANDIRS): @echo "-- Recursing clean to [$(@:clean-%=%)]..."; $(MAKE) --no-print-directory -C $(@:clean-%=%) clean @echo "-- Returned from [$(@:clean-%=%)]" ############ linking kernel binary ############ $(KERNEL_IMG): $(ASM_MULTIBOOT_OBJ) $(ASM_OBJECTS) $(OBJECTS) $(CC) $(CFLAGS) $(LDFLAGS) -T linker.ld -o $@ $^ $(LDLIBS) ############ 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.8/bin/bochs -q -f bochs/bochsrc -rc bochs/bochsdebug # run in qemu run-qemu: all #qemu-system-i386 -enable-kvm disk.img -smp 4 -s #qemu-system-i386 -enable-kvm -s -kernel foolos.img -smp 4 -initrd userspace/ext2.img echo XDOTOOL HACK...&& sleep 0.2 && xdotool search --name "QEMU" windowsize 100 100 && echo XDOTOOL HACK END. & qemu-system-i386 -enable-kvm $(FOOLOS_ISO) -smp 4 -serial stdio run-qemu-debug: all # qemu -enable-kvm -s -S ~/temp/FoolOs/disk.img # qemu -enable-kvm -s -singlestep disk.img # qemu-system-i386 -enable-kvm -s -S -kernel foolos.img -smp 4 -initrd userspace/ext2.img echo XDOTOOL HACK...&& sleep 0.2 && xdotool search --name "QEMU" windowsize 100 100 && echo XDOTOOL HACK END. & qemu-system-i386 -s -S $(FOOLOS_ISO) -smp 4 -serial stdio #-enable-kvm -smp 1 monitor: echo XDOTOOL HACK...&& sleep 0.2 && xdotool search --name "QEMU" windowsize 100 100 && echo XDOTOOL HACK END. & qemu-system-i386 -s -S $(FOOLOS_ISO) -smp 4 -monitor stdio # -serial stdio #-enable-kvm -smp 1 stop-qemu: killall qemu-system-i386 ############ create bootable usb image ############ #stick: $(FOOLOS) # cat $< > $(USB_STICK) && sync # xxd $(USB_STICK) | head -n 50 ############ cleanup ############ clean: $(CLEANDIRS) @echo "Cleaning..."; rm -f *.bin $(FOOLOS) $(FOOLOS_ISO) $(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 grubiso/boot/foolos.bin grubiso/boot/ext2.img @echo "Cleaning Documentation..."; rm -f ./doc/ -r tags: @echo "Generating ctags..."; 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 ##### ISO ##### $(FOOLOS_ISO): $(KERNEL_IMG) userspace @echo "------------------------" @echo "Create ISO..." @cp $(KERNEL_IMG) grubiso/boot/foolos.bin @cp $(IMG_USERSPACE) grubiso/boot @grub-mkrescue -o $(FOOLOS_ISO) grubiso/ @echo "Finished ISO" @echo "------------------------" #### README ### gitweb_readme: markdown README.md | ssh git readme miguel/fool-os set ### DOC ### doxygen: clean doxygen doxy.cfg