# はてなダイアリー解説用OSのMakefile

# 変数の定義

AS = as

CC = gcc
CFLAGS =

DC = gdc
DFLAGS = -nostdlib -fno-builtin -frelease -Wall -O3 -inline

LD = ld
LDFLAGS = 

OBJS = \
	ipl.o\
	setup.o\
	outlandish/os/startup.o\
	outlandish/os/io.o\

# これらは実際のファイル・ディレクトリと関係ないターゲット。
.PHONY: clean run

# 拡張子規則
%.o : %.d
	$(DC) $(DFLAGS) $(INCLUDES) -o $@ -c $<

%.o : %.c
	$(CC) $(CFLAGS) $(INCLUDES) -o $@  -c $<

%.o : %.s
	$(AS) $(ASFLAGS) $(INCLUDES) -o $@ $<

# FDイメージを元にOSを実行する。
run: fd.img
	./qemu/qemu.exe -L ./qemu -m 128 -fda $<

# 生成物・中間生成物の削除。
clean:
	-rm fd.img ipl.bin $(OBJS)

# FDイメージの生成。
fd.img: ipl.bin
	dd if=/dev/zero of=$@ count=2880
	dd if=$< of=$@ conv=notrunc

# バイナリイメージの生成。
ipl.bin: ipl.exe
	objcopy -S -O binary $< $@

# オブジェクト・ファイルのリンク。
ipl.exe: $(OBJS) ipl.ls
	$(LD) $(LDFLAGS) -o $@ -T ipl.ls $(OBJS)

# オブジェクト・ファイルの依存関係。
ipl.o: ipl.s
setup.o: setup.s

outlandish/os/startup.o: outlandish/os/startup.d
outlandish/os/io.o: outlandish/os/io.d
