OS日記~Makefileの整理~

今日はMakefileを整理しました。

AS := x86_64-elf-as
CC := x86_64-elf-gcc
OBJS := boot.o kernel.o

IMAGE := myos

%.o: %.S Makefile
    $(AS) $*.S -o $@

%.o: %.c Makefile
    $(CC) -c $*.c -o $@ -std=gnu99 -ffreestanding -O2 -Wall -Wextra

$(IMAGE).bin: $(OBJS) linker.ld
    $(CC) -T linker.ld -o $@ -ffreestanding -O2 -nostdlib $(OBJS) -lgcc


$(IMAGE).iso: $(IMAGE).bin
    i386-elf-grub-file --is-x86-multiboot $(IMAGE).bin
    mkdir -p isodir/boot/grub
    cp $(IMAGE).bin isodir/boot/myos.bin
    cp grub.cfg isodir/boot/grub/grub.cfg
    i386-elf-grub-mkrescue -o $@ isodir

こんな感じです。x86_64-elf-gcc/as にすると、grub-fileで止まります(後述)。

あと

https://qiita.com/kojiohta/items/54b1a9f7d482c35dc4fa

とかで、Makefileの変数について調べました。

32bitのosdev.orgのチュートリアルをベースに64bitモードに移行させようとしましたが、x86_64-elf-gcc にすると、どういうわけか、マルチブートヘッダーがぶっ飛んでしまうので、うまく起動できませんでした。64bit os create tutorial でも、マルチブートヘッダーがなくなって、grub-fileでimageファイルが作れなくなるので、意味がわかりません。

煮詰まったので、検索したら、64bit モードのブートまでをやってる海外サイトがあったので、明日はそれをやろうと思います。

今日も一日楽しかったです。

明日も更新したいです。