x86_fat12bs/src/makefile

40 lines
1.0 KiB
Makefile

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