# defines
.SUFFIXES: .asm .exe .cpp
MAKEFILE=makefile

# uncomment the next line to rebuild everything if this makefile changes
#MAKEDEP=$(MAKEFILE)

AFLAGS	=-f aout -dUNDERBARS=1
LSCRIPT	=coffkrnl.ld
# if you use C++ but not -fno-exceptions, you get extra sections
# in the .COF file that make objcopy -O binary ... crash
CFLAGS	=-g -Wall -W -O2 -fno-exceptions
LFLAGS	=-g -T$(LSCRIPT)
OBJS	=startup.o krnl.o
LIBC	=/djgpp/lib/libc.a

# targets
all: krnl.com

install: krnl.com fat12-f.bin
	partcopy fat12-f.bin  0   3 -f0
	partcopy fat12-f.bin 24 1DC -f0 24
	copy krnl.com a:\loader.bin

clean:
	for %f in (*.o *.lst *.sym *.cof *.com *.exe *.bin) do del %f

# implicit rules
.cpp.o:
	gcc $(CFLAGS) -c -o$@ $<

.c.o:
	gcc $(CFLAGS) -c -o$@ $<

.asm.o:
	nasm $(AFLAGS) -o$@ $<

# dependencies
#krnl.o:		krnl.cpp	$(MAKEDEP)

krnl.o:		krnl.c		$(MAKEDEP)

startup.o:	startup.asm	$(MAKEDEP)

# explicit rules
fat12-f.bin: fat12-f.asm $(MAKEDEP)
	nasm -f bin -o $@ fat12-f.asm

krnl.com: $(OBJS) $(LSCRIPT) $(MAKEDEP)
	ld $(LFLAGS) -o krnl.cof $(OBJS) $(LIBC)
	objdump --line-numbers --source krnl.cof >krnl.lst
	nm --line-numbers krnl.cof | sort >krnl.sym
	objcopy -O binary krnl.cof $@
