###############################################################################
# 
#  Name:  Makefile
#
#  Description:
#
#      This is the Makefile for the Replay+ application.
#
#  Author:  Kevin Brisley
#
#  Copyright (c) 1997  Kevin Brisley
#  All rights reserved.
#
#  Do not reproduce without permission in writing.
#
###############################################################################


###############################################################################
#  Customization.
###############################################################################
#
#  Your platform can be selected here or set as an environment variable.
#
#REPPLAT = linux
#REPPLAT = dos
#REPPLAT = win32
#REPPLAT = solaris
#REPPLAT = hpux

#
#  Is this the developer or release version.
#  NOTE:  The release version for Intel platforms (i.e. dos, windows, linux)
#         can *not* be compiled from the developer distribution since the
#         ASM cores are not part of the distribution!
#
#DISTRIBUTION = release
DISTRIBUTION = developer

#
#  Choose whether or not you want to compile with the integrated debugger.
#
IDEBUGGER = on
#IDEBUGGER = off

#
#  Select whether you are compiling for optimization, debugging or profiling.
#
COMPILEFOR = optimize
#COMPILEFOR = debug
#COMPILEFOR = profile

#
#  Uncomment this if you would like to skip the assert() checks.
#  During development you would typically want assert()'s to be processed
#  to be notified of problems during execution.  
#
ASSERTS = on
#ASSERTS = off

#
#  Uncomment one of these based on whether you would like the games to
#  be compiled into Replay+ or placed in shared libraries (.DLLs).
#
DRIVER_TYPE = static
#DRIVER_TYPE = shared


###############################################################################
#  Some miscellaneous variables. 
#  DON'T TOUCH.
###############################################################################
DISTRIBUTION_.release	=	RELEASE
DISTRIBUTION_.developer	=	DEVELOPER
DISTRIBUTION_			=	$(DISTRIBUTION_.$(DISTRIBUTION))
IDEBUGGER_.on			=	DEBUGGER
IDEBUGGER_.off			=	NDEBUGGER
IDEBUGGER_				=	$(IDEBUGGER_.$(IDEBUGGER))
ASSERTS_.on				=	DEBUG
ASSERTS_.off			=	NDEBUG
ASSERTS_				=	$(ASSERTS_.$(ASSERTS))



###############################################################################
#  Definitions for each architecture.
###############################################################################

###############################################################################
#  DOS.
###############################################################################

#  Extensions.
OBJ_EXT.dos				=	.o
EXE_EXT.dos				=	.exe
SHL_EXT.dos				=

#  Path.
VPATH.release.dos		=	\
							src/cpu/6502/6502nba \
							src/cpu/6809/6809pla \
							src/cpu/68000/68000nca \
							src/cpu/z80/z80nba \
							src/cpu/z80/z80mdc
VPATH.developer.dos		=	\
							src/cpu/6502/6502mfc \
							src/cpu/6809/6809kbc \
							src/cpu/68000/68000bsc \
							src/cpu/z80/z80mdc
VPATH.dos				=	\
							$(VPATH.$(DISTRIBUTION).dos) \
							src/dos \
							src/x86

#  Misc.
RM.dos					=	del
RMDIR.dos				=	deltree /y
MKDIR.dos				=	mkdir
ECHO.dos				=	echo
DIRCHAR.dos             =   \\

#  Archive.
ARCHIVE.dos				=	zip -r
AREXT.dos	  			=	.zip

#  Purify.
PURIFY.dos				=
PFLAGS.dos				=

#  Quantify.
QUANTIFY.dos			=
QFLAGS.dos				=

#  C++.
CXX.dos					=	g++
CDIRS.release.dos		=	\
							-Isrc/cpu/6502/6502nba \
							-Isrc/cpu/6809/6809pla \
							-Isrc/cpu/68000/68000nca \
							-Isrc/cpu/z80/z80nba \
							-Isrc/cpu/z80/z80mdc
CDIRS.developer.dos		=	\
							-Isrc/cpu/6502/6502mfc \
							-Isrc/cpu/6809/6809kbc \
							-Isrc/cpu/68000/68000bsc \
							-Isrc/cpu/z80/z80mdc
CDIRS.dos				=	\
							$(CDIRS.$(DISTRIBUTION).dos) \
							-Isrc/dos \
							-Isrc/x86
CDEFS.dos				=	\
							-DDOS \
							-DBYTE_LS_FIRST \
							-DBIT_LS_FIRST
CFLAGS.optimize.dos		=	\
							-O3 \
							-m486 \
							-Wall \
							-Wno-parentheses \
							-funroll-loops \
							-fstrength-reduce \
							-fomit-frame-pointer \
							-ffast-math \
							-malign-functions=2 \
							-malign-jumps=2 \
							-malign-loops=2
CFLAGS.debug.dos		=	-g -Wall
CFLAGS.profile.dos    	=   -pg $(CFLAGS.debug.dos)
CSRC.release.dos		=	\
							6809pla.cpp \
							6502nba.cpp \
							68000nca.cpp \
							z80nba.cpp \
							z80mdc.cpp \
							z80.cpp
CSRC.developer.dos		=	\
							6502mfc.cpp \
							m6502.cpp \
							6809kbc.cpp \
							mc6809.cpp \
							68000bsc.cpp \
							cpufunc.cpp \
							opcode0.cpp \
							opcode1.cpp \
							opcode2.cpp \
							opcode3.cpp \
							opcode4.cpp \
							opcode5.cpp \
							opcode6.cpp \
							opcode7.cpp \
							opcode8.cpp \
							opcode9.cpp \
							opcodeb.cpp \
							opcodec.cpp \
							opcoded.cpp \
							opcodee.cpp \
							z80mdc.cpp \
							z80.cpp
CSRC.dos				=	\
							$(CSRC.$(DISTRIBUTION).dos) \
							configd.cpp \
							joyd.cpp \
							soundd.cpp \
							bitmapd.cpp \
							canvasd.cpp \
							clockd.cpp \
							diskd.cpp \
							gamfactd.cpp \
							keybd.cpp \
							moused.cpp \
							netipxd.cpp \
							nettcpd.cpp \
							winsockd.cpp \
							wsocket.cpp \
							paged.cpp \
							repfactd.cpp \
							gmode.cpp \
							dbuffer.cpp
COBJ.dos				=	$(CSRC.dos:%.cpp=obj.$(REPPLAT)/%$(OBJ_EXT))

#  Assembly.
AS.dos					=	nasmw
ADEFS.dos	 			= 	-d$(IDEBUGGER_)
AFLAGS.dos				=	-f coff
ASRC.release.dos		=	\
							6809pl.asm \
							6502nb.asm \
							68000nc.asm \
							z80nb.asm
ASRC.developer.dos		=	
ASRC.dos				=	\
							$(ASRC.$(DISTRIBUTION).dos) \
							bmp.asm
AOBJ.dos				=	$(ASRC.dos:%.asm=obj.$(REPPLAT)/%$(OBJ_EXT))

#  Link.
LD.dos					=	g++
LDIRS.dos				=
LIBS.dos				=	\
							-lalleg \
							$(DJDIR)/lib/audiodjf.a
LDFLAGS.optimize.dos	=
LDFLAGS.debug.dos		=
LDFLAGS.profile.dos		=	-pg
SLEFLAGS.dos			=
SLLFLAGS.dos			=


###############################################################################
#  Linux.
###############################################################################

#  Extensions.
OBJ_EXT.linux			=	.o
EXE_EXT.linux			=	
SHL_EXT.linux			=	.so

#  Path.
VPATH.release.linux		=	\
							src/cpu/6502/6502nba \
							src/cpu/6809/6809pla \
							src/cpu/68000/68000nca \
							src/cpu/z80/z80nba \
							src/cpu/z80/z80mdc
VPATH.developer.linux	=	\
							src/cpu/6502/6502mfc \
							src/cpu/6809/6809kbc \
							src/cpu/68000/68000bsc \
							src/cpu/z80/z80mdc
VPATH.linux				=	\
							$(VPATH.$(DISTRIBUTION).linux) \
							src/unix_x \
							src/linux \
							src/x86

#  Misc.
RM.linux				=	/bin/rm -f
RMDIR.linux				=	/bin/rm -rf
MKDIR.linux				=	mkdir -p
ECHO.linux				=	echo
DIRCHAR.linux			=	/

#  Archive.
ARCHIVE.linux			=	zip -r
AREXT.linux  			=	.zip

#  Purify.
PURIFY.linux			=
PFLAGS.linux			=

#  Quantify.
QUANTIFY.linux			=
QFLAGS.linux			=

#  C++.
CXX.linux				=	g++
CDIRS.release.linux		=	\
							-Isrc/cpu/6502/6502nba \
							-Isrc/cpu/6809/6809pla \
							-Isrc/cpu/68000/68000nca \
							-Isrc/cpu/z80/z80nba \
							-Isrc/cpu/z80/z80mdc
CDIRS.developer.linux	=	\
							-Isrc/cpu/6502/6502mfc \
							-Isrc/cpu/6809/6809kbc \
							-Isrc/cpu/68000/68000bsc \
							-Isrc/cpu/z80/z80mdc
CDIRS.linux				=	\
							$(CDIRS.$(DISTRIBUTION).linux) \
							-I/usr/X11R6/include \
							-I/usr/local/include \
							-Isrc/unix_x \
							-Isrc/linux \
							-Isrc/x86
CDEFS.linux				=	\
							-DUNIX \
							-DXSHM \
							-DBYTE_LS_FIRST \
							-DBIT_LS_FIRST \
							-Dstricmp=strcasecmp
CFLAGS.optimize.linux	=	\
							-O3 \
							-m486 \
							-Wall \
							-Wno-parentheses \
							-funroll-loops \
							-fstrength-reduce \
							-fomit-frame-pointer \
							-ffast-math \
							-malign-functions=2 \
							-malign-jumps=2 \
							-malign-loops=2
CFLAGS.debug.linux		=	-g -Wall
CFLAGS.profile.linux    =   -pg $(CFLAGS.debug.linux)
CSRC.release.linux		=	\
							6809pla.cpp \
							6502nba.cpp \
							68000nca.cpp \
							z80nba.cpp \
							z80mdc.cpp \
							z80.cpp
CSRC.developer.linux	=	\
							6502mfc.cpp \
							m6502.cpp \
							6809kbc.cpp \
							mc6809.cpp \
							68000bsc.cpp \
							cpufunc.cpp \
							opcode0.cpp \
							opcode1.cpp \
							opcode2.cpp \
							opcode3.cpp \
							opcode4.cpp \
							opcode5.cpp \
							opcode6.cpp \
							opcode7.cpp \
							opcode8.cpp \
							opcode9.cpp \
							opcodeb.cpp \
							opcodec.cpp \
							opcoded.cpp \
							opcodee.cpp \
							z80mdc.cpp \
							z80.cpp
CSRC.linux				=	\
							$(CSRC.$(DISTRIBUTION).linux) \
							configl.cpp \
							joyl.cpp \
							soundl.cpp \
							configx.cpp \
							bitmapx.cpp \
							bitmapl.cpp \
							canvasx.cpp \
							canvasl.cpp \
							clockx.cpp \
							diskx.cpp \
							gamfactx.cpp \
							keybx.cpp \
							mousex.cpp \
							networkx.cpp \
							pagex.cpp \
							repfactl.cpp
COBJ.linux				=	$(CSRC.linux:%.cpp=obj.$(REPPLAT)/%$(OBJ_EXT))

#  Assembly.
AS.linux				=	nasm
ADEFS.linux 			= 	-d$(IDEBUGGER_)
AFLAGS.linux			=	-f elf
ASRC.release.linux		=	\
							6809pl.asm \
							6502nb.asm \
							68000nc.asm \
							z80nb.asm
ASRC.developer.linux	=	
ASRC.linux				=	\
							$(ASRC.$(DISTRIBUTION).linux) \
							bmp.asm
AOBJ.linux				=	$(ASRC.linux:%.asm=obj.$(REPPLAT)/%$(OBJ_EXT))

#  Link.
LD.linux				=	g++
LDIRS.linux				=	\
							-L/usr/X11R6/lib/ \
							-L/usr/local/lib/
LIBS.linux				=	\
							-lX11 \
							-lXext \
							-ldl
LDFLAGS.optimize.linux	=
LDFLAGS.debug.linux		=
LDFLAGS.profile.linux	=	-pg
SLEFLAGS.linux			=	-rdynamic
SLLFLAGS.linux			=	-shared


###############################################################################
#  Solaris.
###############################################################################

#  Extensions.
OBJ_EXT.solaris			=	.o
EXE_EXT.solaris			=	
SHL_EXT.solaris			=	.so

#  Path.
VPATH.solaris			=	\
							src/cpu/6502/6502mfc \
							src/cpu/6809/6809kbc \
							src/cpu/68000/68000bsc \
							src/cpu/z80/z80mdc \
							src/unix_x \
							src/solaris 
#  Misc.
RM.solaris				=	/bin/rm -f
RMDIR.solaris			=	/bin/rm -rf
MKDIR.solaris			=	mkdir -p
ECHO.solaris			=	echo
DIRCHAR.solaris			=	/

#  Archive.
ARCHIVE.solaris			=	zip -r
AREXT.solaris			=	.zip

#  Purify.
PURIFY.solaris		=	/isg/proj/tools/products/purify/3.2/$(OMACHINE)/purify
PFLAGS.solaris		=	\
						-best-effort \
						-always-use-cache-dir \
						-cache-dir=/home/tsunami/kevin/purify_cache \
						-leaks_at_exit=yes

#  Quantify.
QUANTIFY.solaris	=	/isg/proj/tools/products/quantify/2.0/sol5/quantify
QFLAGS.solaris		=	\
						-always-use-cache-dir \
						-cache-dir=/home/tsunami/kevin/quantify_cache


#  C++.
CXX.solaris				=	g++
CDIRS.solaris			=	\
							-I/usr/openwin/include \
							-I/usr/local/include \
							-Isrc/cpu/6502/6502mfc \
							-Isrc/cpu/6809/6809kbc \
							-Isrc/cpu/68000/68000bsc \
							-Isrc/cpu/z80/z80mdc \
							-Isrc/unix_x \
							-Isrc/solaris
CDEFS.solaris			=	\
							-DUNIX \
							-DXSHM \
							-DBYTE_MS_FIRST \
							-DBIT_MS_FIRST \
							-Dstricmp=strcasecmp
CFLAGS.optimize.solaris	=	\
							-funroll-loops \
							-fomit-frame-pointer \
							-O3 \
							-Wall
CFLAGS.debug.solaris	=	-g -Wall
CFLAGS.profile.solaris	=	-pg $(CFLAGS.debug.solaris)
CSRC.solaris			=	\
							6502mfc.cpp \
							m6502.cpp \
							6809kbc.cpp \
							mc6809.cpp \
							68000bsc.cpp \
							cpufunc.cpp \
							opcode0.cpp \
							opcode1.cpp \
							opcode2.cpp \
							opcode3.cpp \
							opcode4.cpp \
							opcode5.cpp \
							opcode6.cpp \
							opcode7.cpp \
							opcode8.cpp \
							opcode9.cpp \
							opcodeb.cpp \
							opcodec.cpp \
							opcoded.cpp \
							opcodee.cpp \
							z80mdc.cpp \
							z80.cpp \
							configs.cpp \
							configx.cpp \
							bitmapx.cpp \
							canvasx.cpp \
							clockx.cpp \
							diskx.cpp \
							gamfactx.cpp \
							joyx.cpp \
							keybx.cpp \
							mousex.cpp \
							networkx.cpp \
							pagex.cpp \
							repfactx.cpp \
							soundx.cpp
COBJ.solaris			=	$(CSRC.solaris:%.cpp=obj.$(REPPLAT)/%$(OBJ_EXT))

#  Assembly.
AS.solaris				= 
ADEFS.solaris			= 
AFLAGS.solaris			=
ASRC.solaris			=
AOBJ.solaris			=	$(ASRC.solaris:%.asm=obj.$(REPPLAT)/%$(OBJ_EXT))

#  Link.
LD.solaris				=	g++
LDIRS.solaris			=	\
							-L/usr/openwin/lib/ \
							-L/usr/local/lib/
LIBS.solaris			=	\
							-lX11 \
							-lXext \
							-lsocket \
							-lnsl \
							-ldl
LDFLAGS.optimize.solaris=
LDFLAGS.debug.solaris	=
LDFLAGS.profile.solaris	=	-pg
SLEFLAGS.solaris		=
SLLFLAGS.solaris		=	-shared



###############################################################################
#  Common.
###############################################################################

#  Path.
VPATH.common		=	\
						src/control \
						src/cpu \
						src/cpu/6502 \
						src/cpu/6809 \
						src/cpu/68000 \
						src/cpu/z80 \
						src/debugger \
						src/file \
						src/game \
						src/meddler \
						src/replay \
						src/select \
						src/sound \
						src/support 

#  C++.
CDIRS.common		=	\
						-Isrc/control \
						-Isrc/cpu \
						-Isrc/cpu/6502 \
						-Isrc/cpu/6809 \
						-Isrc/cpu/68000 \
						-Isrc/cpu/z80 \
						-Isrc/debugger \
						-Isrc/file \
						-Isrc/game \
						-Isrc/meddler \
						-Isrc/replay \
						-Isrc/select \
						-Isrc/sound \
						-Isrc/support
CDEFS.common		=	\
						-D$(DISTRIBUTION_) \
						-D$(ASSERTS_) \
						-D$(IDEBUGGER_) \
						-D$(REPPLAT) \
						-DARCH=\"$(REPPLAT)\"
CFLAGS.common		=
CSRC.common			=	\
						control.cpp \
						dcontrol.cpp \
						joy.cpp \
						keyb.cpp \
						mouse.cpp \
						switch.cpp \
						cpu.cpp \
						cpurh.cpp \
						cpuwh.cpp \
						cpu6502.cpp \
						cpu6809.cpp \
						cpu68000.cpp \
						cpuz80.cpp \
						brkpt.cpp \
						dbgbps.cpp \
						dbgcmd.cpp \
						dbginfo.cpp \
						dbgmem.cpp \
						dbgreg.cpp \
						dbgsrc.cpp \
						dbgstat.cpp \
						dbgwin.cpp \
						debugger.cpp \
						appfile.cpp \
						gfile.cpp \
						regular.cpp \
						buffer.cpp \
						colour.cpp \
						ctable.cpp \
						ctrlmap.cpp \
						dip.cpp \
						game.cpp \
						gameio.cpp \
						gamefind.cpp \
						gameinfo.cpp \
						gamfact.cpp \
						gfxset.cpp \
						hiscore.cpp \
						input.cpp \
						sample.cpp \
						cqueue.cpp \
						setting.cpp \
						space.cpp \
						screen.cpp \
						schedule.cpp \
						client.cpp \
						meddler.cpp \
						movie.cpp \
						netgame.cpp \
						play.cpp \
						record.cpp \
						server.cpp \
						bitmap.cpp \
						canvas.cpp \
						clock.cpp \
						config.cpp \
						disk.cpp \
						main.cpp \
						network.cpp \
						page.cpp \
						param.cpp \
						registry.cpp \
						repbase.cpp \
						repfact.cpp \
						replay.cpp \
						sound.cpp \
						select.cpp \
						sssbase.cpp \
						ssscfg.cpp \
						ssscli.cpp \
						sssdemo.cpp \
						sssdip.cpp \
						sssinit.cpp \
						ssskeyc.cpp \
						sssjoyc.cpp \
						ssslist.cpp \
						sssmenu.cpp \
						sssmiss.cpp \
						sssmsg.cpp \
						ssspause.cpp \
						sssserv.cpp \
						kstring.cpp \
						clip.cpp \
						slice.cpp \
						bytemod.cpp \
						kplist.cpp \
						kpslist.cpp \
						matrix.cpp \
						sdev.cpp \
						ay8910.cpp \
						ym3812.cpp \
						waveform.cpp
COBJ.common			=	$(CSRC.common:%.cpp=obj.$(REPPLAT)/%$(OBJ_EXT))


###############################################################################
#  Games.
###############################################################################
STATIC.static			=	games
SHARED.shared			=	games

#  Path.
VPATH.games				=	src/games 

#  C++.
CDIRS.games				=	-Isrc/games
CDEFS.games				=	-DGAMES_$(DRIVER_TYPE)
CFLAGS.games			=
CSRC.concrete.games		=	\
							amidar.cpp \
							amidarjp.cpp \
							amigo.cpp \
							bnj.cpp \
							brubber.cpp \
							btime.cpp \
							btimeb.cpp \
							caractn.cpp \
							lnc.cpp \
							pacnpal.cpp \
							robocop.cpp \
							robocopp.cpp \
							superpac.cpp \
							superpcn.cpp \
							turpin.cpp \
							turtles.cpp
CSRC.abstract.games 	=	\
							_6809pac.cpp \
							_amidar.cpp \
							_amihw.cpp \
							_bm6809.cpp \
							_bnj.cpp \
							_btime.cpp \
							_de-0.cpp \
							_decoigs.cpp \
							_robocop.cpp \
							_spac.cpp \
							_turtles.cpp
CSRC.games				=	$(CSRC.concrete.games) $(CSRC.abstract.games)
COBJ.games				=	$(CSRC.games:%.cpp=obj.$(REPPLAT)/%$(OBJ_EXT))

#  For static.
CDIRS.static			=	$(CDIRS.$(STATIC.$(DRIVER_TYPE)))
CDEFS.static			=	$(CDEFS.games)
CFLAGS.static			=
CSRC.concrete.static	=	$(CSRC.concrete.$(STATIC.$(DRIVER_TYPE)))
CSRC.abstract.static	=	$(CSRC.abstract.$(STATIC.$(DRIVER_TYPE)))
CSRC.static				=	$(CSRC.$(STATIC.$(DRIVER_TYPE)))
COBJ.static				=	$(COBJ.$(STATIC.$(DRIVER_TYPE)))
CDLL.static				=	
SLEFLAGS.static			=
SLLFLAGS.static			=
SLDIR.static			=

#  For shared.
CDIRS.shared			=	$(CDIRS.$(SHARED.$(DRIVER_TYPE)))
CDEFS.shared			=	$(CDEFS.games)
CFLAGS.shared			=	-fPIC
CSRC.concrete.shared	=	$(CSRC.concrete.$(SHARED.$(DRIVER_TYPE)))
CSRC.abstract.shared	=	$(CSRC.abstract.$(SHARED.$(DRIVER_TYPE)))
CSRC.shared				=	$(CSRC.$(SHARED.$(DRIVER_TYPE)))
COBJ.shared				=	$(COBJ.$(SHARED.$(DRIVER_TYPE)))
CDLL.shared				=	$(CSRC.concrete.shared:%.cpp=lib.$(REPPLAT)/%$(SHL_EXT))
SLEFLAGS.shared			=	$(SLEFLAGS.$(REPPLAT))
SLLFLAGS.shared			=	$(SLLFLAGS.$(REPPLAT))
SLDIR.shared			=	lib.$(REPPLAT)/__dir__


###############################################################################
#  Combine.
###############################################################################

#  Extensions.
OBJ_EXT			= 	$(OBJ_EXT.$(REPPLAT))
EXE_EXT			=	$(EXE_EXT.$(REPPLAT))
SHL_EXT			=	$(SHL_EXT.$(REPPLAT))

#  Path.
VPATH			=	$(VPATH.$(REPPLAT)) $(VPATH.common) $(VPATH.games)

#  Misc.
RM				=	$(RM.$(REPPLAT))
RMDIR			=	$(RMDIR.$(REPPLAT))
MKDIR			=	$(MKDIR.$(REPPLAT))
ECHO			=	$(ECHO.$(REPPLAT))
DIRCHAR			=	$(DIRCHAR.$(REPPLAT))

#  Archive.
ARCHIVE			=	$(ARCHIVE.$(REPPLAT))
AREXT			=	$(AREXT.$(REPPLAT))

#  Archive.
ARCHIVE   		=	$(ARCHIVE.$(REPPLAT))

#  Purify.
PURIFY			=	$(PURIFY.$(REPPLAT))
PFLAGS			=	$(PFLAGS.$(REPPLAT))

#  Quantify.
QUANTIFY		=	$(QUANTIFY.$(REPPLAT))
QFLAGS			=	$(QFLAGS.$(REPPLAT))

#  C++.
CXX				=	$(CXX.$(REPPLAT))
CDIRS			=	$(CDIRS.$(REPPLAT))		$(CDIRS.common)		$(CDIRS.static)
CDEFS			=	$(CDEFS.$(REPPLAT))		$(CDEFS.common)		$(CDEFS.static)
CFLAGS			=	$(CFLAGS.$(COMPILEFOR).$(REPPLAT))	\
					$(CFLAGS.common)	$(CFLAGS.static)
CSRC			=	$(CSRC.$(REPPLAT))		$(CSRC.common)		$(CSRC.static)
COBJ			=	$(COBJ.$(REPPLAT))		$(COBJ.common)		$(COBJ.static)
CDLL			=	$(CDLL.$(DRIVER_TYPE))

#  Assembly.
AS				=	$(AS.$(REPPLAT))
ADEFS			=	$(ADEFS.$(REPPLAT))
AFLAGS			=	$(AFLAGS.$(REPPLAT))
ASRC			=	$(ASRC.$(REPPLAT))
AOBJ			=	$(AOBJ.$(REPPLAT))

#  Link.
LD				=	$(LD.$(REPPLAT))
LDIRS			=	$(LDIRS.$(REPPLAT))
LIBS			=	$(LIBS.$(REPPLAT))
LDFLAGS			=	$(LDFLAGS.$(COMPILEFOR).$(REPPLAT))
SLEFLAGS		=	$(SLEFLAGS.$(DRIVER_TYPE))
SLLFLAGS		=	$(SLLFLAGS.$(DRIVER_TYPE))
SLDIR           =   $(SLDIR.$(DRIVER_TYPE))


###############################################################################
#  Rules.
###############################################################################

#
#  VPATH rule needed for DOS, ignored by others.
# 
vpath %.cpp $(VPATH)

#
#  A rule to build all items required for Replay.
#
all: replay$(EXE_EXT) $(SLDIR) $(CDLL)

#
#  A rule to build the purified application.
#
purify: preplay$(EXE_EXT) $(SLDIR) $(CDLL)


#
#  A rule to build the quantified application.
#
quantify: qreplay$(EXE_EXT) $(SLDIR) $(CDLL)


#
#  This creates the object directory.
#
obj.$(REPPLAT)/__dir__:
	@echo Making object directory
	@$(MKDIR) obj.$(REPPLAT)
	@$(ECHO) d > obj.$(REPPLAT)$(DIRCHAR)__dir__


#
#  This creates the library directory.
#
lib.$(REPPLAT)/__dir__:
	@echo Making library directory
	@$(MKDIR) lib.$(REPPLAT)
	@$(ECHO) d > lib.$(REPPLAT)$(DIRCHAR)__dir__


#
#  A rule to build the application.
#
replay$(EXE_EXT): $(COBJ) $(AOBJ)
	@echo 
	@echo Linking $(DISTRIBUTION)-$(COMPILEFOR) version of $@
	@$(LD) $(LDFLAGS) $(SLEFLAGS) -o $@ $(LDIRS) $(COBJ) $(AOBJ) $(LIBS)


#
#  A rule to build the purified application.
#
preplay$(EXE_EXT): $(COBJ) $(AOBJ)
	@echo 
	@echo Linking Purified $(DISTRIBUTION)-$(COMPILEFOR) version of $@
	@$(PURIFY) $(PFLAGS) \
		$(LD) $(SLEFLAGS) -o $@ $(LDIRS) $(COBJ) $(AOBJ) $(LIBS)


#
#  A rule to build the quantified application.
#
qreplay$(EXE_EXT): $(COBJ) $(AOBJ)
	@echo 
	@echo Linking Quantified $(DISTRIBUTION)-$(COMPILEFOR) version of $@
	@$(QUANTIFY) $(QFLAGS) \
		$(LD) $(SLEFLAGS) -o $@ $(LDIRS) $(COBJ) $(AOBJ) $(LIBS)


#
#  The rule to build the object files from source.
#
$(COBJ): obj.$(REPPLAT)/%$(OBJ_EXT): %.cpp obj.$(REPPLAT)/__dir__
	@echo Compiling $< 
	@$(CXX) $(CDEFS) $(CDIRS) $(CFLAGS) -o $@ -c $<


#
#  The rule to build the object files from assembly.
#
$(AOBJ): obj.$(REPPLAT)/%$(OBJ_EXT): %.asm obj.$(REPPLAT)/__dir__
	@echo Assembling $< 
	@$(AS) $(AFLAGS) $(ADEFS) $< -o $@


#
#  The rule to build the object files from source for shared libraries.
#
$(COBJ.shared): obj.$(REPPLAT)/%$(OBJ_EXT): %.cpp obj.$(REPPLAT)/__dir__
	@echo Compiling $< for shared
	@$(CXX) $(CDEFS) $(CDEFS.shared) \
		$(CDIRS) $(CDIRS.shared) $(CFLAGS) $(CFLAGS.shared) -o $@ -c $<

#
#  The rules to build the shared libraries from the object files.
#
lib.$(REPPLAT)/amidar$(SHL_EXT): \
		obj.$(REPPLAT)/_amihw$(OBJ_EXT) \
		obj.$(REPPLAT)/_amidar$(OBJ_EXT) \
		obj.$(REPPLAT)/amidar$(OBJ_EXT)
	@echo Building $@ 
	@$(CXX) $(SLLFLAGS) -o $@ $+
	
lib.$(REPPLAT)/amidarjp$(SHL_EXT): \
		obj.$(REPPLAT)/_amihw$(OBJ_EXT) \
		obj.$(REPPLAT)/_amidar$(OBJ_EXT) \
		obj.$(REPPLAT)/amidarjp$(OBJ_EXT)
	@echo Building $@ 
	@$(CXX) $(SLLFLAGS) -o $@ $+
	
lib.$(REPPLAT)/amigo$(SHL_EXT): \
		obj.$(REPPLAT)/_amihw$(OBJ_EXT) \
		obj.$(REPPLAT)/_amidar$(OBJ_EXT) \
		obj.$(REPPLAT)/amigo$(OBJ_EXT)
	@echo Building $@ 
	@$(CXX) $(SLLFLAGS) -o $@ $+
	
lib.$(REPPLAT)/bnj$(SHL_EXT): \
		obj.$(REPPLAT)/_decoigs$(OBJ_EXT) \
		obj.$(REPPLAT)/_bnj$(OBJ_EXT) \
		obj.$(REPPLAT)/bnj$(OBJ_EXT)
	@echo Building $@ 
	@$(CXX) $(SLLFLAGS) -o $@ $+

lib.$(REPPLAT)/brubber$(SHL_EXT): \
		obj.$(REPPLAT)/_decoigs$(OBJ_EXT) \
		obj.$(REPPLAT)/_bnj$(OBJ_EXT) \
		obj.$(REPPLAT)/brubber$(OBJ_EXT)
	@echo Building $@ 
	@$(CXX) $(SLLFLAGS) -o $@ $+
	
lib.$(REPPLAT)/btime$(SHL_EXT): \
		obj.$(REPPLAT)/_decoigs$(OBJ_EXT) \
		obj.$(REPPLAT)/_btime$(OBJ_EXT) \
		obj.$(REPPLAT)/btime$(OBJ_EXT)
	@echo Building $@ 
	@$(CXX) $(SLLFLAGS) -o $@ $+

lib.$(REPPLAT)/btimeb$(SHL_EXT): \
		obj.$(REPPLAT)/_decoigs$(OBJ_EXT) \
		obj.$(REPPLAT)/_btime$(OBJ_EXT) \
		obj.$(REPPLAT)/btimeb$(OBJ_EXT)
	@echo Building $@ 
	@$(CXX) $(SLLFLAGS) -o $@ $+

lib.$(REPPLAT)/caractn$(SHL_EXT): \
		obj.$(REPPLAT)/_decoigs$(OBJ_EXT) \
		obj.$(REPPLAT)/_bnj$(OBJ_EXT) \
		obj.$(REPPLAT)/caractn$(OBJ_EXT)
	@echo Building $@ 
	@$(CXX) $(SLLFLAGS) -o $@ $+

lib.$(REPPLAT)/lnc$(SHL_EXT): \
		obj.$(REPPLAT)/_decoigs$(OBJ_EXT) \
		obj.$(REPPLAT)/lnc$(OBJ_EXT)
	@echo Building $@ 
	@$(CXX) $(SLLFLAGS) -o $@ $+

lib.$(REPPLAT)/pacnpal$(SHL_EXT): \
		obj.$(REPPLAT)/_bm6809$(OBJ_EXT) \
		obj.$(REPPLAT)/_6809pac$(OBJ_EXT) \
		obj.$(REPPLAT)/pacnpal$(OBJ_EXT)
	@echo Building $@ 
	@$(CXX) $(SLLFLAGS) -o $@ $+
	
lib.$(REPPLAT)/robocop$(SHL_EXT): \
		obj.$(REPPLAT)/_de-0$(OBJ_EXT) \
		obj.$(REPPLAT)/_robocop$(OBJ_EXT) \
		obj.$(REPPLAT)/robocop$(OBJ_EXT)
	@echo Building $@ 
	@$(CXX) $(SLLFLAGS) -o $@ $+
	
lib.$(REPPLAT)/robocopp$(SHL_EXT): \
		obj.$(REPPLAT)/_de-0$(OBJ_EXT) \
		obj.$(REPPLAT)/_robocop$(OBJ_EXT) \
		obj.$(REPPLAT)/robocopp$(OBJ_EXT)
	@echo Building $@ 
	@$(CXX) $(SLLFLAGS) -o $@ $+
	
lib.$(REPPLAT)/superpac$(SHL_EXT): \
		obj.$(REPPLAT)/_bm6809$(OBJ_EXT) \
		obj.$(REPPLAT)/_6809pac$(OBJ_EXT) \
		obj.$(REPPLAT)/_spac$(OBJ_EXT) \
		obj.$(REPPLAT)/superpac$(OBJ_EXT)
	@echo Building $@ 
	@$(CXX) $(SLLFLAGS) -o $@ $+
	
lib.$(REPPLAT)/superpcn$(SHL_EXT): \
		obj.$(REPPLAT)/_bm6809$(OBJ_EXT) \
		obj.$(REPPLAT)/_6809pac$(OBJ_EXT) \
		obj.$(REPPLAT)/_spac$(OBJ_EXT) \
		obj.$(REPPLAT)/superpcn$(OBJ_EXT)
	@echo Building $@ 
	@$(CXX) $(SLLFLAGS) -o $@ $+
	
lib.$(REPPLAT)/turpin$(SHL_EXT): \
		obj.$(REPPLAT)/_amihw$(OBJ_EXT) \
		obj.$(REPPLAT)/_turtles$(OBJ_EXT) \
		obj.$(REPPLAT)/turpin$(OBJ_EXT)
	@echo Building $@ 
	@$(CXX) $(SLLFLAGS) -o $@ $+
	
lib.$(REPPLAT)/turtles$(SHL_EXT): \
		obj.$(REPPLAT)/_amihw$(OBJ_EXT) \
		obj.$(REPPLAT)/_turtles$(OBJ_EXT) \
		obj.$(REPPLAT)/turtles$(OBJ_EXT)
	@echo Building $@ 
	@$(CXX) $(SLLFLAGS) -o $@ $+
	
#
#  The following rule is old and obsolete.
#
#$(CDLL): lib/$(REPPLAT)/%$(SHL_EXT): obj/$(REPPLAT)/%$(OBJ_EXT)
#	@echo Building shared library for $< 
##	@$(CXX) $(SLLFLAGS) -o $@ $<

#
#  A rule to clean up object files.
#
clean: 
	@echo Cleaning
	@$(RMDIR) obj.$(REPPLAT)
	@$(RM) replay$(EXE_EXT)
	@$(RM) preplay$(EXE_EXT)
	@$(RM) $(CDLL)
	@$(RM) core

#
#  A rule to clean up everything.
#
pristine: clean
	@echo Heavy-Duty Cleaning
	@$(RMDIR) config
	@$(RMDIR) depend.$(REPPLAT)
	@$(RMDIR) scores


#
#  A rule to archive the source distribution.
#
archive:
	@echo Archiving
	$(RM) -f repp$(AREXT)
	$(ARCHIVE) repp$(AREXT) __fromnowon
	$(ARCHIVE) repp$(AREXT) *.fnt
	$(ARCHIVE) repp$(AREXT) makefile
	$(ARCHIVE) repp$(AREXT) replay.pic
	$(ARCHIVE) repp$(AREXT) doc$(DIRCHAR)*
	$(ARCHIVE) repp$(AREXT) info$(DIRCHAR)*
	$(ARCHIVE) repp$(AREXT) src


#
#  This target should only need to be executed if you're using an older
#  version of make that won't automatically generate the dependency files.
#
depend: $(CSRC:%.cpp=depend.$(REPPLAT)/%.d) depend.$(REPPLAT)/__dir__
	@echo 
	@echo Dependencies updated.

depend.$(REPPLAT)/__dir__:
	@echo Making dependency directory
	@$(MKDIR) depend.$(REPPLAT)
	@$(ECHO) d > depend.$(REPPLAT)$(DIRCHAR)__dir__

#
#  A rule to build the dependency files.
#
depend.$(REPPLAT)/%.d: %.cpp depend.$(REPPLAT)/__dir__
	@echo Updating dependencies for $< 
	@$(CXX) -MM $(CDIRS) $(CDEFS) $< \
	| sed "s/^$*/depend.$(REPPLAT)\/$*.d obj.$(REPPLAT)\/$*/" > $@


include \
	$(CSRC:%.cpp=depend.$(REPPLAT)/%.d) \
	$(CSRC.shared:%.cpp=depend.$(REPPLAT)/%.d)
