###############################################################################
#
#	ASpecT runtime system
#
#	file	: Makefile
#	version	: 1.6
#	creation: 1991-04-04
#	author	: Joern von Holten (jvh)
#
#	history:
#	1991-04-04	jvh	first release
#	1991-07-22	jvh	gcc included
#	1991-12-11	jvh	mac release
#	1992-02-24	jvh	improvements (backup,clean,link)
#	1992-03-03	jvh	adjustment for A/UX problems with matching
#	1992-06-23	jvh	minor improvements
#	1992-06-26	jvh	source line debugger added
#	1992-07-27	jvh	NeXT and RS6000 release
#	1992-09-15	jvh	sun386i release
#	1992-10-09	jvh	linux release
#	
###############################################################################

###############################################################################
#
#	DEFAULT SETTINGS
#
###############################################################################

               ASPECT_DIR = /user/wimi/aspect/ASpecT

              RUNTIME_DIR = $(ASPECT_DIR)/runtime
               BACKUP_DIR = $(ASPECT_DIR)/runtime/old

# GNU C Compiler 2.1

                 GCC21SW1 = -fcaller-saves
                 GCC21SW2 = -fomit-frame-pointer -fforce-addr -fforce-mem

                 GCC21OPT = gcc -c -O2 $(GCC21SW1) $(GCC21SW2)
                 GCC21DBX = gcc -c -O2 -g $(GCC21SW1)

# GNU C Compiler 1.4

                 GCC14SW1 = -fcombine-regs -fcaller-saves
                 GCC14SW2 = -fomit-frame-pointer -fforce-addr -fforce-mem

                 GCC14OPT = gcc -c -O $(GCC14SW1) $(GCC14SW2)
                 GCC14DBX = gcc -c -O -g $(GCC14SW1)

# normal  C Compiler

                   SCCOPT = cc -c -O
                   SCCDBX = cc -c -g

# MacIntosh C Compiler

#                   CCMAC = cc -A 2 -c -O -DSUN4
                    CCMAC = $(GCC21OPT)


#
# select C Compiler here (choose either SCC or GCC14)
#

                    CCOPT = $(GCC21OPT)
                    CCDBX = $(GCC21DBX)

# Linker

                       LN = ln -s

                     INCL = -I$(RUNTIME_DIR)
              WITHDBUGGER = -DDEBUG
                NOCMDREAD = $(DBX) -DDBXTOOL

                     SUN3 =
                     SUN4 = -DSUN4
                      MAC = -DMAC
                   RS6000 = -DSUN4
                     NeXT = -DSUN4

###############################################################################
#
#	Sourcefiles
#
###############################################################################

                  RUNTIME = runtime.X
                  DBUGGER = rts_db.X
                  SLDEBUG = aspdb.c
                  ASPSERV = aspserv.c
                  MODULES = boolean.X char.X closure.X integer.X string.X     \
                            system.X
                UTILITIES = ansidecl.h
                     ICON = ASpecT.icon

                       O3 = 3.o
                       O4 = 4.o
                     OMAC = mac.o
                  ORS6000 = rs.o
                    ONeXT = nx.o
                      O3i = 386i.o
                      OLX = lx.o
                      TST = tst.o

                RUNTIME_C = $(RUNTIME:X=c)
                RUNTIME_H = $(RUNTIME:X=h)
               RUNTIME_O3 = $(RUNTIME:X=$(O3))
               RUNTIME_O4 = $(RUNTIME:X=$(O4))
               RUNTIME_OM = $(RUNTIME:X=mac.o)
               RUNTIME_OR = $(RUNTIME:X=$(ORS6000))
               RUNTIME_ON = $(RUNTIME:X=$(ONeXT))
              RUNTIME_O3i = $(RUNTIME:X=$(O3i))
              RUNTIME_OLX = $(RUNTIME:X=$(OLX))
              RUNTIME_TST = $(RUNTIME:X=$(TST))

                DBUGGER_C = $(DBUGGER:X=c)
                DBUGGER_H = $(DBUGGER:X=h)
               DBUGGER_O3 = $(DBUGGER:X=$(O3))
               DBUGGER_O4 = $(DBUGGER:X=$(O4))
               DBUGGER_OM = $(DBUGGER:X=mac.o)
               DBUGGER_OR = $(DBUGGER:X=$(ORS6000))
               DBUGGER_ON = $(DBUGGER:X=$(ONeXT))
              DBUGGER_O3i = $(DBUGGER:X=$(O3i))
              DBUGGER_OLX = $(DBUGGER:X=$(OLX))
              DBUGGER_TST = $(DBUGGER:X=$(TST))

                MODULES_C = $(MODULES:X=rc)
                MODULES_H = $(MODULES:X=rh)
               MODULES_O3 = $(MODULES:X=$(O3))
               MODULES_O4 = $(MODULES:X=$(O4))
               MODULES_OM = $(MODULES:X=mac.o)
               MODULES_OR = $(MODULES:X=$(ORS6000))
               MODULES_ON = $(MODULES:X=$(ONeXT))
              MODULES_O3i = $(MODULES:X=$(O3i))
              MODULES_OLX = $(MODULES:X=$(OLX))
              MODULES_TST = $(MODULES:X=$(TST))

                ALL_OTHER = $(ASPSERV) $(SLDEBUG) $(ICON)

                    ALL_C = $(RUNTIME_C) $(DBUGGER_C) $(MODULES_C)
                    ALL_H = $(RUNTIME_H) $(DBUGGER_H) $(MODULES_H)            \
                            $(UTILITIES)
                    ALL_O = $(RUNTIME_O3) $(RUNTIME_O4) $(RUNTIME_OM)         \
                            $(RUNTIME_OR) $(RUNTIME_ON) $(RUNTIME_O3i)        \
                            $(RUNTIME_OLX) $(RUNTIME_TST)		      \
		            $(DBUGGER_O3) $(DBUGGER_O4) $(DBUGGER_OM)         \
		            $(DBUGGER_OR) $(DBUGGER_ON) $(DBUGGER_O3i)        \
		            $(DBUGGER_OLX) $(DBUGGER_TST)		      \
		            $(MODULES_O3) $(MODULES_O4) $(MODULES_OM)	      \
		            $(MODULES_OR) $(MODULES_ON) $(MODULES_O3i)	      \
		            $(MODULES_OLX) $(MODULES_TST)

                  R_TAIL3 = $(INCL) $(RUNTIME_C) -o $(RUNTIME_O3)
                  D_TAIL3 = $(INCL) $(DBUGGER_C) -o $(DBUGGER_O3)

                  R_TAIL4 = $(INCL) $(RUNTIME_C) -o $(RUNTIME_O4)
                  D_TAIL4 = $(INCL) $(DBUGGER_C) -o $(DBUGGER_O4)

                  R_TAILM = $(INCL) $(RUNTIME_C) -o $(RUNTIME_OM)
                  D_TAILM = $(INCL) $(DBUGGER_C) -o $(DBUGGER_OM)

                  R_TAILR = $(INCL) $(RUNTIME_C) -o $(RUNTIME_OR)
                  D_TAILR = $(INCL) $(DBUGGER_C) -o $(DBUGGER_OR)

                  R_TAILN = $(INCL) $(RUNTIME_C) -o $(RUNTIME_ON)
                  D_TAILN = $(INCL) $(DBUGGER_C) -o $(DBUGGER_ON)

                 R_TAIL3i = $(INCL) $(RUNTIME_C) -o $(RUNTIME_O3i)
                 D_TAIL3i = $(INCL) $(DBUGGER_C) -o $(DBUGGER_O3i)

                 R_TAILLX = $(INCL) $(RUNTIME_C) -o $(RUNTIME_OLX)
                 D_TAILLX = $(INCL) $(DBUGGER_C) -o $(DBUGGER_OLX)

                R_TAILTST = $(INCL) $(RUNTIME_C) -o $(RUNTIME_TST)
                D_TAILTST = $(INCL) $(DBUGGER_C) -o $(DBUGGER_TST)

###############################################################################
#
#	RUNTIME
#
###############################################################################

none:
	@echo "ASpecT Make Runtime"
	@echo "==================================================="
	@echo "make (r|rg|d|dg|n)(3|4|R|N|V|3i|LX)"
	@echo "     (r|d)M"
	@echo "     [r]l"
	@echo "     [x]aspdb"
	@echo "     aspserv[M]"
	@echo "     backup"
	@echo "     clean"
	@echo " r: (runtime only)"
	@echo " d: (runtime and debugger)"
	@echo " n: (runtime and debugger but no commands with DBX)"
	@echo " g: (with DBX)"
	@echo "Machines: 3 => Sun 3/x    4 => Sun 4/x"
	@echo "          M => MacIntosh  R => RS6000"
	@echo "          N => NeXT       3i=> Sun 386i"
	@echo "		 LX=> PC (linux)


xaspdb:
	cc -O -o xaspdb $(SLDEBUG) -DXView -lxview -lolgx -lX11
	
aspdb:
	cc -O -o aspdb $(SLDEBUG) -lsuntool -lsunwindow -lpixrec

aspserv:
	gcc -O -o aspserv $(ASPSERV)

aspservM:
	gcc -O $(MAC) -o aspserv $(ASPSERV)

###############################################################################
r3:	
	$(CCOPT) $(SUN3) $(R_TAIL3)
	
rg3:
	$(CCDBX) $(SUN3) $(R_TAIL3)
	
d3:	
	$(CCOPT) $(SUN3) $(WITHDBUGGER) $(R_TAIL3)
	$(CCOPT) $(SUN3) $(D_TAIL3)
	
dg3:	
	$(CCDBX) $(SUN3) $(WITHDBUGGER) $(R_TAIL3)
	$(CCDBX) $(SUN3) $(D_TAIL3)
	
n3:	
	$(CCOPT) $(SUN3) $(WITHDBUGGER) $(NOCMDREAD) $(R_TAIL3)
	$(CCOPT) $(SUN3) $(NOCMDREAD) $(D_TAIL3)

###############################################################################
r3i:	
	$(CCOPT) $(SUN3) $(R_TAIL3i)
	
rg3i:
	$(CCDBX) $(SUN3) $(R_TAIL3i)
	
d3i:	
	$(CCOPT) $(SUN3) $(WITHDBUGGER) $(R_TAIL3i)
	$(CCOPT) $(SUN3) $(D_TAIL3i)
	
dg3i:	
	$(CCDBX) $(SUN3) $(WITHDBUGGER) $(R_TAIL3i)
	$(CCDBX) $(SUN3) $(D_TAIL3i)
	
n3i:	
	$(CCOPT) $(SUN3) $(WITHDBUGGER) $(NOCMDREAD) $(R_TAIL3i)
	$(CCOPT) $(SUN3) $(NOCMDREAD) $(D_TAIL3i)

###############################################################################
rLX:	
	$(CCOPT) $(SUN3) $(R_TAILLX)
	
rgLX:
	$(CCDBX) $(SUN3) $(R_TAILLX)
	
dLX:	
	$(CCOPT) $(SUN3) $(WITHDBUGGER) $(R_TAILLX)
	$(CCOPT) $(SUN3) $(D_TAILLX)
	
dgLX:	
	$(CCDBX) $(SUN3) $(WITHDBUGGER) $(R_TAILLX)
	$(CCDBX) $(SUN3) $(D_TAILLX)
	
nLX:	
	$(CCOPT) $(SUN3) $(WITHDBUGGER) $(NOCMDREAD) $(R_TAILLX)
	$(CCOPT) $(SUN3) $(NOCMDREAD) $(D_TAILLX)

###############################################################################
r4:	
	$(CCOPT) $(SUN4) $(R_TAIL4)
	
rg4:	
	$(CCDBX) $(SUN4) $(R_TAIL4)
	
d4:	
	$(CCOPT) $(SUN4) $(WITHDBUGGER) $(R_TAIL4)
	$(CCOPT) $(SUN4) $(D_TAIL4)
	
dg4:	
	$(CCDBX) $(SUN4) $(WITHDBUGGER) $(R_TAIL4)
	$(CCDBX) $(SUN4) $(D_TAIL4)
	
n4:	
	$(CCOPT) $(SUN4) $(WITHDBUGGER) $(NOCMDREAD) $(R_TAIL4)
	$(CCOPT) $(SUN4) $(NOCMDREAD) $(D_TAIL4)

test:	
	$(CCDBX) $(SUN4) $(WITHDBUGGER) $(R_TAILTST)
	$(CCDBX) $(SUN4) $(D_TAILTST)
	
###############################################################################
rR:	
	$(CCOPT) $(RS6000) $(R_TAILR)
	
rgR:	
	$(CCDBX) $(RS6000) $(R_TAILR)
	
dR:	
	$(CCOPT) $(RS6000) $(WITHDBUGGER) $(R_TAILR)
	$(CCOPT) $(RS6000) $(D_TAILR)
	
dgR:	
	$(CCDBX) $(RS6000) $(WITHDBUGGER) $(R_TAILR)
	$(CCDBX) $(RS6000) $(D_TAILR)
	
nR:	
	$(CCOPT) $(RS6000) $(WITHDBUGGER) $(NOCMDREAD) $(R_TAILR)
	$(CCOPT) $(RS6000) $(NOCMDREAD) $(D_TAILR)

###############################################################################
rN:	
	$(CCOPT) $(NeXT) $(R_TAILN)
	
rgN:	
	$(CCDBX) $(NeXT) $(R_TAILN)
	
dN:	
	$(CCOPT) $(NeXT) $(WITHDBUGGER) $(R_TAILN)
	$(CCOPT) $(NeXT) $(D_TAILN)
	
dgN:	
	$(CCDBX) $(NeXT) $(WITHDBUGGER) $(R_TAILN)
	$(CCDBX) $(NeXT) $(D_TAILN)
	
nN:	
	$(CCOPT) $(NeXT) $(WITHDBUGGER) $(NOCMDREAD) $(R_TAILN)
	$(CCOPT) $(NeXT) $(NOCMDREAD) $(D_TAILN)

###############################################################################
rM:	
	$(CCMAC) $(MAC)  $(R_TAILM)
	
dM:	
	$(CCMAC) $(MAC)  $(WITHDBUGGER) $(R_TAILM)
	$(CCMAC) $(MAC)  $(D_TAILM)

###############################################################################
l:	
	@echo Generating symbolic links to runtime system
	@for FILE in $(ALL_C) ; \
	do if (test ! -h $$FILE) then $(LN) $(RUNTIME_DIR)/$$FILE $$FILE ; \
	   fi ; \
	done
	@for FILE in $(ALL_H) ; \
	do if (test ! -h $$FILE) then $(LN) $(RUNTIME_DIR)/$$FILE $$FILE ; \
	   fi ; \
	done
rl:	
	@echo Removing symbolic links to runtime system
	@for FILE in $(ALL_C) ; \
	do if (test -h $$FILE) then rm $$FILE ; \
	   fi ; \
	done
	@for FILE in $(ALL_H) ; \
	do if (test -h $$FILE) then rm $$FILE ; \
	   fi ; \
	done

###############################################################################
backup:
	@echo Backup sources to $(BACKUP_DIR)
	@for FILE in $(ALL_C) ; \
	do if (test -r $(RUNTIME_DIR)/$$FILE) \
	   then cp $(RUNTIME_DIR)/$$FILE $(BACKUP_DIR) ; \
	   fi ; \
	done
	@for FILE in $(ALL_H) ; \
	do if (test -r $(RUNTIME_DIR)/$$FILE)  \
	   then  cp $(RUNTIME_DIR)/$$FILE $(BACKUP_DIR) ; \
	   fi ; \
	done
	@for FILE in $(ALL_OTHER) ; \
	do if (test -r $(RUNTIME_DIR)/$$FILE)  \
	   then  cp $(RUNTIME_DIR)/$$FILE $(BACKUP_DIR) ; \
	   fi ; \
	done

###############################################################################
clean:	
	@echo Removing all generated files in $(RUNTIME_DIR)
	@for FILE in $(ALL_O) ; \
	do if (test -r $(RUNTIME_DIR)/$$FILE) then rm $(RUNTIME_DIR)/$$FILE ; \
	   fi ; \
	done
