# "../" below is included to simplify compilation for a
# different architectures sharing the same filing system.
# SYS  is the location of m/c independent C.

SYS = ../natbcpl/sys
CINTCODE = ../cintcode
BCPLPROGS = ../bcplprogs
DEMOS = $(BCPLPROGS)/demos
TESTS = $(BCPLPROGS)/tests
COM = $(CINTCODE)/com

AS = as
LIBS =  mlib.o clib.o blib.o kblib.o

# Select the appropriate definition of CC, LIBS ans SYSM
# SYSM gives the location of machine specific code (eg cintasm.s)

#CC = gcc -O9 -DforMAC
#NB = nbmac

#CC = gcc -O9 -DforMIPS
#SYSM = $(SYS)/MIPS
#NB = nbmips

CC = gcc -O9 -DforLINUX
SYSM = $(SYS)/LINUX
NB = nb386

#CC = gcc -O9 -DforSUN4
#SYSM = $(SYS)/SUN4
#NB = nbsun4

#CC = gcc -O9 -DforSPARC
#SYSM = $(SYS)/SPARC
#NB = nbsparc

#CC = gcc -O9 -DforALPHA
#SYSM = $(SYS)/ALPHA
#NB = nbalpha


#CC = gcc -O9 -DforMSDOS
#SYSM = $(SYS)/MSDOS
#NB = nbmsdos

#CC = gcc -O9 -DforOS2
#SYSM = $(SYS)/OS2
#NB = nbos2

run:	prog bench100 cmpltest crdemo natbcpl b2sial
#run:	prog
	stty sane
	./cmpltest
	./crdemo
	echo "$(DEMOS)/queens.b to queens.sial" | ./b2sial
	echo "zzzzz" | ./prog y yyyyy x xxxxx
	echo "$(CINTCODE)/com/bcpl.b to junk" | time ./natbcpl
	time ./bench100

# bench100

bench100:	initbench100.o bench100.o $(LIBS)
	$(CC) -o bench100 initbench100.o bench100.o $(LIBS) 

bench100.o:	bench100.s
	$(AS) -o bench100.o bench100.s

bench100.s:	$(TESTS)/bench100.b Makefile
	echo "c $(NB) $(TESTS) bench100; logout" | cinterp
	echo bench100.b compiled to bench100.s

initbench100.o:	$(SYS)/initbench100.c $(SYS)/bcpl.h
	$(CC) -c $(SYS)/initbench100.c

$(SYS)/initbench100.c:	$(TESTS)/bench100.b $(SYS)/bcpl.h
	echo "makeinit $(TESTS)/bench100.b to $(SYS)/initbench100.c; logout" | \
	cinterp

# prog

prog:	initprog.o prog.o $(LIBS)
	$(CC) -o prog initprog.o prog.o $(LIBS)

prog.o:	prog.s
	$(AS) -o prog.o prog.s

prog.s:	prog.b Makefile
	echo "c $(NB) . prog; logout" | cinterp
	echo prog.b compiled to prog.s

initprog.o:	$(SYS)/initprog.c $(SYS)/bcpl.h
	$(CC) -c $(SYS)/initprog.c

$(SYS)/initprog.c:	prog.b $(SYS)/bcpl.h
	echo "makeinit prog.b to $(SYS)/initprog.c; logout" | cinterp

# cmpltest

cmpltest:	initcmpltest.o cmpltest.o $(LIBS)
	$(CC) -o cmpltest initcmpltest.o cmpltest.o $(LIBS)

cmpltest.o:	cmpltest.s
	$(AS) -o cmpltest.o cmpltest.s

cmpltest.s:	$(TESTS)/cmpltest.b Makefile
	echo "c $(NB) $(TESTS) cmpltest; logout" | cinterp
	echo cmpltest.b compiled to cmpltest.s

initcmpltest.o:	$(SYS)/initcmpltest.c $(SYS)/bcpl.h
	$(CC) -c $(SYS)/initcmpltest.c

$(SYS)/initcmpltest.c:	$(TESTS)/cmpltest.b $(SYS)/bcpl.h
	echo "makeinit $(TESTS)/cmpltest.b to $(SYS)/initcmpltest.c; logout" | \
	cinterp

# crdemo

crdemo:	initcrdemo.o crdemo.o $(LIBS)
	$(CC) -o crdemo initcrdemo.o crdemo.o $(LIBS)

crdemo.o:	crdemo.s
	$(AS) -o crdemo.o crdemo.s

crdemo.s:	$(DEMOS)/crdemo.b Makefile
	echo "c $(NB) $(DEMOS) crdemo; logout" | cinterp
	echo crdemo.b compiled to crdemo.s

initcrdemo.o:	$(SYS)/initcrdemo.c $(SYS)/bcpl.h
	$(CC) -c $(SYS)/initcrdemo.c

$(SYS)/initcrdemo.c:	$(DEMOS)/crdemo.b $(SYS)/bcpl.h
	echo "makeinit $(DEMOS)/crdemo.b to $(SYS)/initcrdemo.c; logout" | \
	cinterp

#b2sial

b2sial:	initbcpl2sial.o bcpl2sial.o $(LIBS)
	$(CC) -o b2sial initbcpl2sial.o bcpl2sial.o $(LIBS)

bcpl2sial.o:	bcpl2sial.s
	$(AS) -o bcpl2sial.o bcpl2sial.s

bcpl2sial.s:	$(COM)/bcpl2sial.b $(CINTCODE)/sial.h Makefile
	echo "c $(NB) $(COM) bcpl2sial; logout" | cinterp
	echo bcpl.b compiled to bcpl.s

initbcpl2sial.o:	$(SYS)/initbcpl2sial.c $(SYS)/bcpl.h
	$(CC) -c $(SYS)/initbcpl2sial.c

$(SYS)/initbcpl2sial.c:	$(COM)/bcpl2sial.b $(SYS)/bcpl.h
	echo "makeinit $(COM)/bcpl2sial.b to $(SYS)/initbcpl2sial.c; logout" | \
	cinterp

# natbcpl

natbcpl:	initbcpl.o bcpl.o $(LIBS)
	$(CC) -o natbcpl initbcpl.o bcpl.o $(LIBS)

bcpl.o:	bcpl.s
	$(AS) -o bcpl.o bcpl.s

bcpl.s:	$(COM)/bcpl.b Makefile
	echo "c $(NB) $(COM) bcpl; logout" | cinterp
	echo bcpl.b compiled to bcpl.s

initbcpl.o:	$(SYS)/initbcpl.c $(SYS)/bcpl.h
	$(CC) -c $(SYS)/initbcpl.c

$(SYS)/initbcpl.c:	$(COM)/bcpl.b $(SYS)/bcpl.h
	echo "makeinit $(COM)/bcpl.b to $(SYS)/initbcpl.c; logout" | cinterp



# The libraries

blib.o:	blib.s
	$(AS) -o blib.o blib.s

blib.s:	$(SYS)/blib.b Makefile
	echo "c $(NB) $(SYS) blib; logout" | cinterp
	echo blib.b compiled to blib.s

clib.o:	$(SYS)/clib.c $(SYS)/bcpl.h
	$(CC) -c $(SYS)/clib.c

kblib.o:	$(SYS)/kblib.c $(SYS)/bcpl.h
	$(CC) -c $(SYS)/kblib.c

mlib.o:	$(SYSM)/mlib.s
	$(AS) -o mlib.o $(SYSM)/mlib.s

clean:
	rm -f core OCODE SIAL
	rm -f *~ sys/*~ com/*~ doc/*~ sys/*/*~
	rm -f *.cin *.sial

vclean: clean
	rm -f prog *.o junk*
	rm -f blib.s
	rm -f cmpltest.s cmpltest $(SYS)/initcmpltest.c
	rm -f crdemo.s crdemo $(SYS)/initcrdemo.c
	rm -f bcpl2sial.s b2sial $(SYS)/initbcpl2sial.c
	rm -f bcpl.s natbcpl $(SYS)/initbcpl.c
	rm -f bench100.s bench100 $(SYS)/initbench100.c
	rm -f prog.s prog $(SYS)/initprog.c






