/ Makefile
Makefile
1 # i386 io_uring Kernel Makefile 2 3 CC = i686-elf-gcc 4 AS = i686-elf-as 5 LD = i686-elf-ld 6 OBJCOPY = i686-elf-objcopy 7 8 CFLAGS = -m32 -nostdlib -nostdinc -fno-builtin -fno-stack-protector \ 9 -nostartfiles -nodefaultlibs -Wall -Wextra -Werror -c \ 10 -Ikernel/include -fno-pic -fno-pie -std=gnu99 11 12 LDFLAGS = -T kernel/linker.ld -melf_i386 13 14 KERNEL_OBJS = build/boot.o \ 15 build/isr.o \ 16 build/gdt_flush.o \ 17 build/user_jump.o \ 18 build/paging_asm.o \ 19 build/kernel.o \ 20 build/gdt.o \ 21 build/idt.o \ 22 build/io_uring.o \ 23 build/syscall.o \ 24 build/memory.o \ 25 build/string.o \ 26 build/test_io_uring.o \ 27 build/fs.o \ 28 build/initrd.o \ 29 build/elf.o \ 30 build/process.o \ 31 build/fd.o \ 32 build/paging.o \ 33 build/vfs.o \ 34 build/keyboard.o \ 35 build/console.o 36 37 all: build/kernel.bin build/initrd.img 38 39 build/%.o: kernel/boot/%.s 40 @mkdir -p build 41 $(AS) --32 $< -o $@ 42 43 build/%.o: kernel/core/%.c 44 @mkdir -p build 45 $(CC) $(CFLAGS) $< -o $@ 46 47 build/%.o: kernel/io_uring/%.c 48 @mkdir -p build 49 $(CC) $(CFLAGS) $< -o $@ 50 51 build/%.o: kernel/lib/%.c 52 @mkdir -p build 53 $(CC) $(CFLAGS) $< -o $@ 54 55 build/%.o: kernel/drivers/%.c 56 @mkdir -p build 57 $(CC) $(CFLAGS) $< -o $@ 58 59 build/kernel.bin: $(KERNEL_OBJS) 60 $(LD) $(LDFLAGS) $(KERNEL_OBJS) -o build/kernel.elf 61 $(OBJCOPY) -O binary build/kernel.elf build/kernel.bin 62 63 # Build tools 64 tools/mkinitrd: tools/mkinitrd.c 65 @mkdir -p tools 66 gcc -o tools/mkinitrd tools/mkinitrd.c 67 68 # Build userspace programs 69 userspace/simple_shell: 70 $(MAKE) -C userspace 71 72 # Build initrd 73 build/initrd.img: tools/mkinitrd userspace/simple_shell 74 # Copy the simple shell program 75 @mkdir -p build/initrd_staging 76 @cp -L userspace/simple_shell build/initrd_staging/hello_uring 77 tools/mkinitrd build/initrd.img build/initrd_staging/hello_uring 78 @rm -rf build/initrd_staging 79 80 # Create bootable ISO with GRUB 81 iso: build/kernel.bin 82 @mkdir -p build/iso/boot/grub 83 cp build/kernel.bin build/iso/boot/ 84 echo 'menuentry "io_uring Kernel" {' > build/iso/boot/grub/grub.cfg 85 echo ' multiboot /boot/kernel.bin' >> build/iso/boot/grub/grub.cfg 86 echo '}' >> build/iso/boot/grub/grub.cfg 87 grub-mkrescue -o build/kernel.iso build/iso 88 89 # Run in QEMU 90 run: build/kernel.bin build/initrd.img 91 qemu-system-i386 -kernel build/kernel.elf -initrd build/initrd.img -m 128 -icount 10,align=on 92 93 # Debug with GDB 94 debug: build/kernel.bin 95 qemu-system-i386 -kernel build/kernel.elf -m 128 -s -S & 96 gdb -x .gdbinit 97 98 clean: 99 rm -rf build tools/mkinitrd 100 $(MAKE) -C userspace clean 101 102 .PHONY: all iso run debug clean