########################################################################
#  Makefile for SPAWNO v3.5
#  by Ralf Brown
########################################################################

# the default memory model if not otherwise specified is Small
!if !$d(MDL)
MDL = s
!endif

# set the assembler's memory model symbol corresponding to the C memory model
!if '$(MDL)' == 't'
AMDL = __TINY__
!elif '$(MDL)' == 's'
AMDL = __SMALL__
!elif '$(MDL)' == 'm'
AMDL = __MEDIUM__
!elif '$(MDL)' == 'c'
AMDL = __COMPACT__
!elif '$(MDL)' == 'l'
AMDL = __LARGE__
!elif '$(MDL)' == 'h'
AMDL = __HUGE__
!else
!error invalid memory model
!endif

#
# set the executable extension for the given memory model
#
!if '$(MDL)' == 't'
EXE = com
!else
EXE = exe
!endif

!if '$(TYPE)' == 't'
TYPE = __TURBOC__
!elif '$(TYPE)' == 'm'
TYPE = __MSC__
!else
TYPE =
!endif

#
# select your C compiler and its default commandline options
# The default here is for Turbo C; for Borland C, change the definition
# of CC to 'bcc'
#
CC = tcc
CFLAGS = -m$(MDL) -1-

#
# select your assembler and its dfeault commandline options
#
ASM = tasm
AFLAGS = /Zi

#
# select your object librarian and its default commandline options
# The default here is Borland's TLIB set for case-sensitive symbols
# (necessary for C code) and stripping debugging information
#
LIB = tlib
LFLAGS = /c/0

#
# the first target is the one that gets built if no target is specified
#
all:	 spawn$(MDL).lib swaptest.$(EXE)

spawn$(MDL).lib: _spawnv$(MDL).obj _spawn.obj _spawne.obj _spawnp.obj \
		 _spawnpe.obj _system.obj spawnlo.obj spawnlpo.obj \
		 spawnvo.obj spawnvpo.obj spawnle.obj spawnlpe.obj \
		 spawnve.obj spawnvpe.obj system.obj _swapdir.obj \
		 spawnenv.obj spawnpth.obj spawnerr.obj
	del spawn$(MDL).lib
	$(LIB) $(LFLAGS) $* +_spawn+_spawne+_spawnp+_spawnpe+_system+system+spawnlo+spawnlpo+spawnvo
	$(LIB) $(LFLAGS) $* +spawnvpo+spawnle+spawnlpe+spawnve+spawnvpe+_spawnv$(MDL)+_swapdir+spawnenv+spawnpth+spawnerr

.c.obj:
	$(CC) $(CFLAGS) -c $*

spawnlo.obj:  _spawno.h
spawnlpo.obj: _spawno.h
spawnvo.obj:  _spawno.h
spawnvpo.obj: _spawno.h
spawnle.obj:  _spawno.h
spawnlpe.obj: _spawno.h
spawnve.obj:  _spawno.h
spawnvpe.obj: _spawno.h
system.obj:   _spawno.h
spawnenv.obj: _spawno.h
_spawn.obj:   _spawno.h
_spawne.obj:  _spawno.h
_spawnp.obj:  _spawno.h
_spawnpe.obj: _spawno.h
_system.obj:  _spawno.h
_swapdir.obj: _spawno.h

_spawno.h:    spawno.h
	touch _spawno.h

spawnpth.obj: spawnpth.asm rules.asi
	$(ASM) /mx /D$(AMDL) /D$(TYPE) $(AFLAGS) spawnpth

spawnerr.obj: spawnerr.asm rules.asi
	$(ASM) /mx /D$(AMDL) /D$(TYPE) $(AFLAGS) spawnerr

_spawnv$(MDL).obj: __spawnv.asm rules.asi
	$(ASM) /mx /D$(AMDL) /D$(TYPE) $(AFLAGS) __spawnv,_spawnv$(MDL)

swaptest.$(EXE): swaptest.c spawno.h spawn$(MDL).lib
	$(CC) $(CFLAGS) swaptest spawn$(MDL).lib

