# Compiler and Options for Microsoft C
# ------------------------------------
CC		= CL
CFLAGS		= -Zi -Zp1 -G0 -Gs -X -I. -DDEBUG -DKERNEL -DI86 -DPROTO
NDBCFLAGS	= -Zp1 -G0 -Gs -X -I. -DDEBUG -DKERNEL -DI86 -DPROTO
ASM		= MASM
AFLAGS		= /Mx
#AFLAGS		= /Mx/Zi
LINK		= LINK
LFLAGS		= /CO/MAP/NOE/NOD
LIBS		=.\KERNEL.LIB ..\DRIVERS\DEVICE.LIB D:\CTR\LIBRARY\SCTR_M D:\DC600\LIB\LIBH ;
SYSLIBS		=.\SYS.LIB ..\DRIVERS\DEVICE.LIB D:\DC600\LIB\LIBH ;

# The following should be made to match libs
CSRC = \
  main.c \
  ..\fs\fatfs.c \
  ..\fs\fattab.c \
  ..\fs\fatdir.c \
  ..\fs\dosnames.c \
  initoem.c
LIBCSRC1 = \
  ..\fs\fcbfns.c \
  ..\fs\dosfns.c \
  memmgr.c \
  task.c \
  systime.c \
  sysclk.c \
  ioctl.c
LIBCSRC2 = \
  inthndlr.c \
  ..\fs\error.c
LIBCSRC3 = \
  ..\fs\blockio.c \
  ..\fs\chario.c \
  syscon.c \
  dsk.c
LIBCSRC4 = \
  ..\fs\prf.c \
  ..\fs\misc.c \
  ..\misc\strings.c \
  ..\fs\syspack.c

ASMSRC = \
  st.asm \
  kernel.asm \
  procsupt.asm \
  execrh.asm \
  int2f.asm \
  apisupt.asm

# where to copy source from
FSSRC = \
  ..\fs\fatfs.c \
  ..\fs\fattab.c \
  ..\fs\fatdir.c \
  ..\fs\dosnames.c \
  ..\fs\dosfns.c \
  ..\fs\error.c
SUPTSRC = \
  ..\fs\prf.c \
  ..\fs\misc.c \
  ..\fs\syspack.c
IOSRC = \
  ..\fs\blockio.c \
  ..\fs\chario.c

ASMSRC = \
  st.asm \
  kernel.asm \
  procsupt.asm \
  execrh.asm \
  apisupt.asm

# Headers
HDRS = \
  ../../hdr/device.h\
  ../../hdr/mcb.h\
  ../../hdr/pcb.h\
  ../../hdr/date.h\
  ../../hdr/time.h\
  ../../hdr/fat.h\
  ../../hdr/fcb.h\
  ../../hdr/process.h\
  ../../hdr/dcb.h\
  ../../hdr/dhdr.h\
  ../../hdr/sft.h\
  ../../hdr/exe.h\
  ../../hdr/fnode.h\
  ../../hdr/dirmatch.h

# libs and main object
EXE_dependencies =  \
  main.obj \
  fatfs.obj \
  fattab.obj \
  fatdir.obj \
  dosnames.obj \
  initoem.obj \

LIB1 =  fcbfns.obj \
  dosfns.obj \
  memmgr.obj \
  task.obj \
  systime.obj \
  ioctl.obj
LIB2 = inthndlr.obj \
  sysclk.obj \
  error.obj \
  procsupt.obj \
  execrh.obj \
  apisupt.obj
LIB3 = blockio.obj \
  chario.obj \
  syscon.obj \
  dsk.obj
LIB4 =   prf.obj \
  misc.obj \
  strings.obj \
  syspack.obj

# rules overide for auto-configure
#.c.obj:
#  $(CC) $(CFLAGS) -c $<
#  echo $*.obj+ >> kernel.lst

#.asm.obj:
#  $(ASM) $(AFLAGS) $*;
#  echo $*.obj+ >> kernel.lst

#		*Explicit Rules*
all:		populate proto.h kernel.lib kernel.exe

populate:
		for %%f in ( $(FSSRC) ) do copy %%f .
		for %%f in ( $(SUPTSRC) ) do copy %%f .
		for %%f in ( $(IOSRC) ) do copy %%f .

kernel.sys: 	clean sys.obj sys.lib $(EXE_dependencies)
		echo sys.obj + >kernel.lst
		for %%f in ( $(EXE_dependencies) ) do echo %%f + >>kernel.lst
		echo. >>kernel.lst
		echo kernel.sys >>kernel.lst
		echo sys.map >>kernel.lst
		echo $(SYSLIBS) >>kernel.lst
		$(LINK) $(LFLAGS) /tiny @kernel.lst
		del kernel.lst

sys.lib:	$(LIB1) $(LIB2) $(LIB3) $(LIB4)
		del sys.lib
		echo sys.lib >sys.lst
		echo y >>sys.lst
		for %%f in ( $(LIB1) ) do echo + %%f & >>sys.lst
		for %%f in ( $(LIB2) ) do echo + %%f & >>sys.lst
		for %%f in ( $(LIB3) ) do echo + %%f & >>sys.lst
		for %%f in ( $(LIB4) ) do echo + %%f & >>sys.lst
		echo. >>sys.lst
		echo nul >>sys.lst
		lib /NOI/NOE @sys.lst
		del sys.lst

kernel.lib:	$(LIB1) $(LIB2) $(LIB3) $(LIB4)
		del kernel.lib
		echo kernel.lib >kernel.lst
		echo y >>kernel.lst
		for %%f in ( $(LIB1) ) do echo + %%f & >>kernel.lst
		for %%f in ( $(LIB2) ) do echo + %%f & >>kernel.lst
		for %%f in ( $(LIB3) ) do echo + %%f & >>kernel.lst
		for %%f in ( $(LIB4) ) do echo + %%f & >>kernel.lst
		echo. >>kernel.lst
		echo nul >>kernel.lst
		lib /NOI/NOE @kernel.lst
		del kernel.lst

kernel.exe:	st.obj kernel.obj $(EXE_dependencies) kernel.lib
		echo st.obj + >kernel.lst
		for %%f in ( $(EXE_dependencies) ) do echo %%f + >>kernel.lst
		echo kernel.obj >>kernel.lst
		echo kernel >>kernel.lst
		echo kernel >>kernel.lst
		echo $(LIBS) >>kernel.lst
		$(LINK) $(LFLAGS) @kernel.lst
		del kernel.lst

kernel.lst:
		del proto.h
		del *.obj
		nmake kernel.exe

new:
		del proto.h
		del *.obj
		nmake all

clean:
		del proto.h
		del *.obj
		del *.bak
		del *.crf
		del *.lst

#		*Individual File Dependencies*
# LIB1 functions
LIB1 =  
fcbfns.obj:	fcbfns.c globals.h $(HDRS)
		$(CC) $(NDBCFLAGS) -c fcbfns.c

dosfns.obj:	dosfns.c globals.h $(HDRS)

memmgr.obj:	memmgr.c globals.h $(HDRS)
		$(CC) $(NDBCFLAGS) -c memmgr.c

task.obj:	task.c globals.h $(HDRS)

#		$(CC) $(NDBCFLAGS) -c task.c

systime.obj:	systime.c globals.h $(HDRS)
		$(CC) $(NDBCFLAGS) -c systime.c

sysclk.obj:	sysclk.c globals.h $(HDRS)
		$(CC) $(NDBCFLAGS) -c sysclk.c

ioctl.obj:	ioctl.c globals.h $(HDRS)
		$(CC) $(NDBCFLAGS) -c ioctl.c

# LIB2 functions
chario.obj:	chario.c globals.h $(HDRS)
		$(CC) $(NDBCFLAGS) -c chario.c
		
blockio.obj:	blockio.c globals.h $(HDRS)
		$(CC) $(NDBCFLAGS) -c blockio.c

dsk.obj:	dsk.c globals.h $(HDRS)
		$(CC) $(NDBCFLAGS) -c dsk.c

syscon.obj:	syscon.c globals.h $(HDRS)
		$(CC) $(NDBCFLAGS) -c syscon.c

# LIB4 functions
prf.obj:	prf.c globals.h $(HDRS)
		$(CC) $(NDBCFLAGS) -c prf.c

misc.obj:	misc.c globals.h $(HDRS)
		$(CC) $(NDBCFLAGS) -c misc.c

fatfs.obj:	fatfs.c globals.h $(HDRS)

#		$(CC) $(NDBCFLAGS) -c fatfs.c

fatdir.obj:	fatdir.c globals.h $(HDRS)

#		$(CC) $(NDBCFLAGS) -c fatdir.c

initoem.obj:	initoem.c globals.h $(HDRS)
		$(CC) $(NDBCFLAGS) -c initoem.c

fattab.obj:	fattab.c globals.h $(HDRS)
		$(CC) $(NDBCFLAGS) -c fattab.c

strings.obj:	..\misc\strings.c globals.h $(HDRS)
		$(CC) $(NDBCFLAGS) -c ..\misc\strings.c

syspack.obj:	syspack.c globals.h $(HDRS)
		$(CC) $(NDBCFLAGS) -c syspack.c

main.obj:	main.c globals.h $(HDRS)

error.obj:	error.c globals.h $(HDRS)
		$(CC) $(NDBCFLAGS) -c error.c

st.obj:		st.inc powerup.inc biosext.inc hardinit.inc mmacros.inc
		$(ASM) $(AFLAGS)/DSTANDALONE=0 st,st,st,st;

kernel.obj:	kernel.asm
		$(ASM) $(AFLAGS)/DSTANDALONE=0 kernel,kernel,kernel,kernel;

sys.obj:	kernel.asm
		$(ASM) $(AFLAGS)/DSTANDALONE=1 sys,sys,sys,sys;

procsupt.obj:	procsupt.asm
		$(ASM) $(AFLAGS)/DSTANDALONE=0 procsupt,procsupt,procsupt,procsupt;

execrh.obj:	execrh.asm
		$(ASM) $(AFLAGS)/DSTANDALONE=0 execrh,execrh,execrh,execrh;

apisupt.obj:	apisupt.asm
		$(ASM) $(AFLAGS)/DSTANDALONE=0 apisupt,apisupt,apisupt,apisupt;

proto.h:	$(CSRC) $(LIBCSRC1) $(LIBCSRC2) $(LIBCSRC3) $(LIBCSRC4)
		echo /* proto.h generated by nmake */ > proto.h
		echo #undef _P >> proto.h
		for %%f in ( $(CSRC) ) do mkptypes %%f >>proto.h
		for %%f in ( $(LIBCSRC1) ) do mkptypes %%f >>proto.h
		for %%f in ( $(LIBCSRC2) ) do mkptypes %%f >>proto.h
		for %%f in ( $(LIBCSRC3) ) do mkptypes %%f >>proto.h
		for %%f in ( $(LIBCSRC4) ) do mkptypes %%f >>proto.h

