AS = nasm CC = clang LD = lld ASM_FLAGS=-f bin -o CFLAGS=-ffreestanding -m32 -target i386-pc-none-elf -c -Wall -Wextra -Werror -mno-red-zone -std=c17 -o STAGE1_TARGET=stage1.bin ASM_TARGET=stage2.bin stage1.bin stage3.bin TARGET_DIR=out all : createdir $(ASM_TARGET) kernel.bin image createdir: mkdir -p $(TARGET_DIR) clean: sudo umount $(TARGET_DIR)/mount || /bin/true sudo rm -rf out kernel.bin: kernel.c $(CC) $(CFLAGS) $(TARGET_DIR)/$@.o $< ld.$(LD) -e kmain -Ttext 0x40000 $(TARGET_DIR)/$@.o -o $(TARGET_DIR)/$@.old objcopy -O binary $(TARGET_DIR)/$@.old $(TARGET_DIR)/$@ $(ASM_TARGET):%.bin : %.asm $(AS) $(ASM_FLAGS) $(TARGET_DIR)/$@ $< image: rm -rf $(TARGET_DIR)/boot.img mkfs.msdos -C $(TARGET_DIR)/boot.img 1440 dd if=$(TARGET_DIR)/$(STAGE1_TARGET) of=$(TARGET_DIR)/boot.img bs=512 count=1 conv=notrunc mkdir -p $(TARGET_DIR)/mount sudo mount -o loop $(TARGET_DIR)/boot.img $(TARGET_DIR)/mount sudo cp $(addprefix $(TARGET_DIR)/, $(ASM_TARGET)) $(TARGET_DIR)/kernel.bin $(TARGET_DIR)/mount sudo umount $(TARGET_DIR)/mount