# The following is for easier adaptation on your machine. See also README.Amiga .
# It is a derivate of the original 'Makefile' adapted for SAS' own smake.
#
# I (Reinhard) used SAS/C 6.50 to compile the driver with the smake utility
# and a port of BYacc.
# SAS/C supports a generic startup with common macro definitions, so for me
# the following macros are defined automatically:
#
CC = sc:c/sc
LD = sc:c/sc link
AS = sc:c/sc asm
CFLAGS=
SCFLAGS=
YTAB= y.tab
CP= c:copy
RM= c:delete
MV= c:rename
#
# The original makefile had 'CC= gcc' in it...
# The CFLAGS- and YFLAGS-values are modified for Mud-Stuff below.
# There is also a section below where you can add your own pet compiler.
#-----------------------------------------------------------------------------
# What type of net package do we use? Known by this Makefile are:
# AS225 : Commodores AS225 software
# AMITCP: The AmiTCP package from hut.fi
#
# Leave it empty for the simulation (the default).
NETTYPE= AMITCP
# DMake's default-yacc 'Bison' won't work with Amylaars lang.y,
# but byacc will.
YACC= c:byacc
YFLAGS=
# Unix has an option '-f' for it's 'rm' - not the Amiga, so I define
# RMF= $(RM) -f
# and modify it for Amiga as:
RMF= $(RM)
# Compiling on a plain Amiga is slow, so keep some intermediate files:
PREC= .PRECIOUS
# -- Compiler specifics --
#
# Set CCOPTS to any options you need to compile LPMud, what includes
# warning- and optimization options!
#
# If your compiler doesn't define the cpp-symbol AMIGA, it's a good idea
# to add it here.
# If your compiler doesn't have own code for float maths, you must
# define _NO_OWN_FLOATS so OS 1.3-versions will compile properly.
#
# interpret.c and lang.c need lots of RAM to compile, thus it might be wise
# to put the temporaries somewhere else than into T: in RAM:.
# Use these macros to insert the needed compiler-options, including any
# non-standard code-model options.
# LOPT: The options for lang.c
# IOPT: The options for interpret.c
#
# To compile the hosts/amiga/signal, your compiler must be able to
# generate C-Code with registerized parameters. If it needs a special
# option to do this, put it into ROPT.
#
# If your compiler needs additional sources, put them into XSRC, and
# the object files to generate into XOBJ.
# If your compiler doesn't have alloca(), add alloca.c/alloca.o to
# the additional sources.
# afp tells SAS/C to generate 32-bit references to functions
# Data=FAR tells SAS/C to use 32-bit references (no force)
# Code=FAR tells SAS/C to use 32-bit references to functions not declared in current file
# lib=scmffpnb.lib tells SAS/C to generate code to call the FFP shared library
# SAS/C uses the OS' math libraries
# AMIGA is defined automatically
CCOPTS = def=_NO_OWN_FLOATS afp Data=FAR Code=FAR math=ffp ign=55+100+154+161
LOPT=
IOPT=
# option for SAS/C registered parameters
ROPT= parms=registers
# -- Net specifics --
#
# Set NETDEF to define the appropriate symbol selecting the special
# interface code.
# Set NETLIB to specify any additionally needed linker library.
#
# Default first...
NETDEF=
NETLIB=
.IF $(NETTYPE) == AS225
NETDEF= def=AMIGA_TCP def=AMITCP
NETLIB= lib=lib:netnb.lib
NETDEF= def=DAMIGA_TCP def=AS255
NETLIB= lib=lib:socket.lib
.END
.IF $(NETTYPE) == AMITCP
NETDEF= def=AMIGA_TCP def=AMITCP
NETLIB= lib=lib:netnb.lib
.END
# ---------------- Now for the real, the Mud stuff ----------------------
# Chose one of these mallocs:
#
# Satoria's malloc, tries to prevent fragmentation.
# Uses little memory. With FAST_FIT, it is also one of the fastest.
# Required for garbage collection.
MALLOC=smalloc
# Gnu malloc, fastest but uses most memory.
# MALLOC=gmalloc
#
# Use the standard malloc on your system.
# MALLOC=sysmalloc
# Set MUD_LIB to the directory which contains the mud data.
MUD_LIB = mudlib:
#
# Set BINDIR to the directory where you want to install the executables.
BINDIR = mudbin:
# Profiling is mostly useless for us.
# PROFIL= -DOPCPROF -DVERBOSE_OPCPROF
# would enable the profiling of the virtual stackmachine.
PROFIL=
# Debugging options: [-DDEBUG] [-DYYDEBUG|-DYYDEBUG=1] [-DTRACE_CODE]
# Defining DEBUG enables run time debugging. It will use more time and space.
# When the flag is changed, be sure to recompile everything.
# Simply comment out this line if not wanted.
# If you change anything in the source, you are strongly encouraged to have
# DEBUG defined.
# If you will not change anything, you are still encouraged to have
# it defined, if you want to locate any game driver bugs.
DEBUG= def=DEBUG def=TRACE_CODE Debug=symbolflush
# Extra object files and libraries.
XOBJ = crypt.o signal.o signal_rr.o socket.o amiga.o alloca.o
XSRC = hosts/crypt.o hosts/amiga/signal.c hosts/amiga/signal_rr.c\
hosts/amiga/socket.c hosts/amiga/amiga.c alloca.c
LIBS= $(NETLIB) lib=lib:scmffpnb.lib
# ----------------------- The Rules -------------------------------------
MPATH=def=MUD_LIB="\"$(MUD_LIB)\"" def=BINDIR="\"$(BINDIR)\""
LDFLAGS= afp Data=FAR Code=FAR link
DEFINES= $(DEBUG) $(PROFIL) def=MALLOC_$(MALLOC) $(MPATH) $(NETDEF)
CFLAGS= $(CCOPTS) $(DEFINES)
YFLAGS= -d
SRC=lex.c main.c interpret.c simulate.c object.c backend.c array.c\
comm1.c ed.c regexp.c mapping.c wiz_list.c swap.c $(MALLOC).c\
call_out.c otable.c dumpstat.c stralloc.c hash.c indentp.c port.c\
access_check.c parse_old.c parse.c prolang.y\
simul_efun.c sprintf.c gcollect.c closure.c $(XSRC)
OBJ=lang.o lex.o main.o interpret.o simulate.o object.o backend.o array.o\
comm1.o ed.o regexp.o mapping.o wiz_list.o swap.o $(MALLOC).o\
call_out.o otable.o dumpstat.o stralloc.o hash.o indentp.o port.o\
access_check.o parse_old.o parse.o simul_efun.o sprintf.o\
gcollect.o closure.o $(XOBJ)
driver: $(OBJ)
$(CC) $(LDFLAGS) $(LIBS) $(OBJ) to=$@
# Utils and auto installation are not supported
# install: driver
# install csrc=$? $(BINDIR)/parse
#
# install.utils:
# (cd util; $(MAKE) $(MFLAGS) install)
#
# utils:
# (cd util; $(MAKE) $(MFLAGS))
parse: driver
+-$(MV) parse parse.old
$(CP) driver parse
clean:
-$(RMF) *.o *.a lang.c lang.h lang.y instrs.h efun_defs.c y.output
-$(RMF) make_func.c make_func driver PlayMud
tags: $(SRC)
ctags $(SRC)
TAGS: $(SRC)
etags $(SRC)
$(PREC) make_func.c: make_func.y
$(YACC) $(YFLAGS) make_func.y
$(RM) make_func.c
$(MV) $(YTAB).c make_func.c
$(PREC) make_func: make_func.o hash.o ixfile.o exec.h
$(CC) $(LDFLAGS) make_func.o hash.o ixfile.o to=make_func $(LIBS)
.PRECIOUS lang.y efun_defs.c instrs.h: func_spec make_func prolang.y config.h
-$(RMF) efun_defs.c
-$(RMF) lang.y
-$(RMF) instrs.h
make_func > efun_defs.c
# was: ./make_func > efun_defs.c
# Byacc will warn a 'shift/reduce' conflict.
# This is a known wart in the C-grammar.
lang.c lang.h: lang.y
$(YACC) $(YFLAGS) -v lang.y
-$(RMF) lang.c
-$(RMF) lang.h
$(MV) $(YTAB).c lang.c
$(MV) $(YTAB).h lang.h
$(MALLOC).o: $(MALLOC).c lint.h config.h machine.h
-$(RMF) smalloc.o
-$(RMF) gmalloc.o
-$(RMF) sysmalloc.o
-$(RMF) malloc.o
$(CC) $(CFLAGS) csrc=$(MALLOC).c
access_check.o : access_check.c lint.h config.h machine.h comm.h interpret.h
alloca.o : alloca.c
array.o: array.c config.h machine.h lint.h interpret.h object.h wiz_list.h \
regexp.h exec.h lang.h instrs.h stralloc.h
backend.o: backend.c lint.h config.h machine.h interpret.h object.h \
wiz_list.h exec.h comm.h hosts/amiga/patchfloat.h
call_out.o: call_out.c lint.h config.h machine.h interpret.h object.h comm.h \
stralloc.h exec.h wiz_list.h
closure.o: closure.c lint.h config.h machine.h lex.h exec.h interpret.h \
object.h lang.h instrs.h
comm1.o: comm1.c config.h machine.h lint.h interpret.h comm.h object.h \
sent.h patchlevel.h wiz_list.h
dumpstat.o: dumpstat.c lint.h config.h machine.h interpret.h object.h exec.h \
smalloc.h lang.h instrs.h
ed.o: ed.c lint.h config.h machine.h regexp.h interpret.h object.h comm.h
gcollect.o : gcollect.c lint.h config.h machine.h interpret.h object.h exec.h \
sent.h comm.h smalloc.h instrs.h lang.h wiz_list.h stralloc.h
$(PREC) hash.o: hash.c
indentp.o : indentp.c
interpret.o: interpret.c lint.h config.h machine.h interpret.h lang.h exec.h \
object.h wiz_list.h instrs.h comm.h sent.h switch.h smalloc.h stralloc.h \
hosts/amiga/patchfloat.h
$(CC) $(IOPT) $(CFLAGS) csrc=interpret.c to=$@
$(PREC) lang.o: lang.c lint.h config.h machine.h lex.h interpret.h object.h exec.h \
instrs.h incralloc.h switch.h stralloc.h
$(CC) $(LOPT) $(CFLAGS) csrc=lang.c to=$@
lex.o : lex.c lint.h config.h machine.h interpret.h lang.h exec.h lex.h \
instrs.h patchlevel.h stralloc.h efun_defs.c
main.o : main.c lint.h config.h machine.h interpret.h object.h lex.h
$(PREC) make_func.o : make_func.c lint.h config.h machine.h
$(CC) $(CFLAGS) csrc=make_func.c
mapping.o : mapping.c config.h machine.h lint.h interpret.h lang.h instrs.h \
object.h wiz_list.h regexp.h stralloc.h smalloc.h
object.o : object.c lint.h config.h machine.h comm.h interpret.h object.h \
sent.h wiz_list.h exec.h hosts/amiga/patchfloat.h
otable.o : otable.c lint.h config.h machine.h interpret.h object.h \
hosts/amiga/patchfloat.h
parse.o : parse.c lint.h config.h machine.h interpret.h object.h wiz_list.h
parse_old.o : parse_old.c lint.h config.h machine.h interpret.h object.h \
wiz_list.h
port.o : port.c lint.h config.h machine.h
regexp.o : regexp.c regexp.h lint.h config.h machine.h
simul_efun.o : simul_efun.c lint.h config.h machine.h interpret.h object.h \
exec.h lex.h lang.h instrs.h stralloc.h
simulate.o : simulate.c lint.h config.h machine.h interpret.h instrs.h lang.h \
object.h sent.h wiz_list.h exec.h comm.h stralloc.h hosts/amiga/patchfloat.h
sprintf.o : sprintf.c config.h machine.h lint.h interpret.h lang.h instrs.h \
exec.h object.h sent.h
str.o : str.c
stralloc.o : stralloc.c stralloc.h config.h machine.h lint.h \
hosts/amiga/patchfloat.h
swap.o : swap.c lint.h config.h machine.h interpret.h object.h exec.h
wiz_list.o : wiz_list.c config.h machine.h lint.h interpret.h object.h \
wiz_list.h stralloc.h lang.h instrs.h
# It's not that easy under AmigaOS...
#
# timestamp:
# echo '#define RELEASE_DATE "'`date`'"' > tmp
# tail +1 patchlevel.h >> tmp
# $(MV) tmp patchlevel.h
#--------------------------------------------------------------------
# Rules for extra object files.
#
# crypt.o : BSD-implementation of crypt()
# fcrypt.o : Crack-implementation of crypt() (just in case)
# PlayMud : a simple client to access the running mud.
# netclean : removes all object files containing communication-specific code.
# osclean : removes all object files which contain OS-specific code.
# amiga.o : some amiga specific routines.
# signal.o : timers and interruption. It uses interrupt code and therefore
# needs fully registered args.
# socket.o : includes the appropriate socket-code.
fcrypt.o :
$(CC) $(CFLAGS) def=fcrypt=crypt idir=hosts/fcrypt csrc=hosts/fcrypt/crack-fcrypt.c to=fcrypt.o
crypt.o :
$(CC) $(CFLAGS) csrc=hosts/crypt.c to=crypt.o
PlayMud: hosts/amiga/mudmsgs.h
PlayMud: hosts/amiga/PlayMud.c
$(CC) $< to=$@
netclean:
-$(RM) access_check.o comm1.o main.o swap.o socket.o amiga.o
osclean:
-$(RM) $(XOBJ)
-$(RM) backend.o interpret.o object.o otable.o simulate.o stralloc.o
-$(RM) PlayMud driver
amiga.o : patchlevel.h config.h hosts/amiga/nsignal.h
amiga.o : hosts/amiga/amiga.c
$(CC) $(CFLAGS) idir=hosts/amiga csrc=$< to=$@
signal.o : hosts/amiga/nsignal.h
signal.o : hosts/amiga/signal.c
$(CC) $(CFLAGS) idir=hosts/amiga csrc=$< to=$@
signal_rr.o : hosts/amiga/nsignal.h
signal_rr.o : hosts/amiga/signal_rr.c
$(CC) $(CFLAGS) $(ROPT) idir=hosts/amiga csrc=$< to=$@
socket.o : hosts/amiga/nsignal.h hosts/amiga/socket_sim.c hosts/amiga/socket_tcp.c\
hosts/amiga/mudmsgs.h
socket.o : hosts/amiga/socket.c
$(CC) $(CFLAGS) idir=hosts/amiga csrc=$< to=$@