40 lines
1.0 KiB
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
|
|
|
|
|
|
|