PLAT=i386 C_SOURCES = $(wildcard kernel/*.c drivers/$(PLAT)/*.c drivers/$(PLAT)/*/*.c kernel/cpu/$(PLAT)/*.c fs/*.c) ASM = $(wildcard kernel/cpu/$(PLAT)/*.asm) S_ASM = $(wildcard kernel/cpu/$(PLAT)/*.s) LIBC_SOURCES = $(wildcard libc/*.c libc/*/*.c) LIBC_HEADERS = $(wildcard libc/*.h libc/*/*.h) OBJ = $(C_SOURCES:.c=.o kernel/cpu/$(PLAT)/boot.o) ASM_OBJ = $(S_ASM:.s=.o) S_ASM_OBJ = $(ASM:.asm=.o) LIBC_OBJ = $(LIBC_SOURCES:.c=.o) CC = $(shell cat psinfo/$(PLAT)/cc.txt) AS = $(shell cat psinfo/$(PLAT)/as.txt) AR = $(shell cat psinfo/$(PLAT)/ar.txt) NASM = $(shell cat psinfo/$(PLAT)/nasm.txt) EMU = $(shell cat psinfo/$(PLAT)/emu.txt) GDB = $(shell cat psinfo/$(PLAT)/gdb.txt) CFLAGS = -Isysroot/usr/include -Wextra -Wall -Wno-unused-parameter -g -ffreestanding QFLAGS = -hda ext2.img -m 2G -boot d -cdrom os.iso -serial vc #-chardev socket,id=s1,port=3000,host=localhost -serial chardev:s1 .PHONY: sysroot all: os.iso run: os.iso @$(EMU) $(QFLAGS) -monitor stdio debug: os.iso kernel/kernel.elf @$(EMU) -s $(QFLAGS) & @$(GDB) -ex "target remote localhost:1234" -ex "symbol-file kernel/kernel.elf" os.iso: kernel/kernel.elf init vfs initrd/* @cp kernel/kernel.elf iso/boot @cd initrd; tar -f ../iso/boot/initrd.tar -c * @grub-mkrescue -o $@ iso >/dev/null 2>/dev/null init: init/* kernel/start.o @cd init && make @cp init/init initrd/init vfs: vfs/* kernel/start.o @cd vfs && make @cp vfs/vfs initrd/vfs kernel/kernel.elf: $(OBJ) $(ASM_OBJ) $(S_ASM_OBJ) libc/libc.a @$(CC) -z max-page-size=4096 -Xlinker -n -T kernel/cpu/$(PLAT)/linker.ld -o $@ $(CFLAGS) -nostdlib $^ -lgcc libc/libc.a: $(LIBC_OBJ) @$(AR) rcs $@ $^ %.o: %.c @$(CC) $(CFLAGS) -c $< -o $@ %.o: %.asm @$(NASM) $< -o $@ %.o: %.s @$(AS) $< -o $@ clean: @rm -rf kernel/*.o drivers/*/*.o drivers/*/*/*.o cpu/*/*.o fs/*.o libc/libc.a kernel/cstart.o cpu/memory.h os.iso */*.elf iso/boot/initrd.tar