CC=/usr/bin/gcc
#CC=/opt/bin/gcc

EXECS=cchar cint dna32 dna64-MMX dna128-AltiVec

#CFLAGS=
#CFLAGS= -O2
CFLAGS= -O3

AFLAGS=

#SCCFLAGS= --fe-bvt
#SCCFLAGS=--no-fe-cofold --no-be-cofold --no-be-peep
#SCCFLAGS=--no-be-cofold --no-be-peep
#SCCFLAGS=--no-be-peep
SCCFLAGS=
#SCCFLAGS=--no-fe-cofold --no-be-cofold
#SCCFLAGS=--no-fe-cofold
#SCCFLAGS=--no-be-cofold

all: $(EXECS)


cint: cint.c common.h
	$(CC) -Wall ${CFLAGS} -o cint cint.c

cchar: cchar.c common.h
	$(CC) -Wall ${CFLAGS} -o cchar cchar.c


## dna32 ##################################################################
dna32: dna32.s
	$(CC) -Wall -o dna32 dna32.s

dna32.s: dna32.i
	$(CC) -S -o dna32.s dna32.i

dna32.i: dna32.c dna32.h
	$(CC) -E -o dna32.i dna32.c

dna32.c: dna32.Si
	Scc ${SCCFLAGS} -Sc -k -oc dna32.c -oh dna32.h -O0 -irr -mIA32 dna32.Si >dna32.tree 2>&1


## dna64-MMX ##############################################################
dna64-MMX: dna64-MMX.s
	$(CC) -Wall -o dna64-MMX dna64-MMX.s

dna64-MMX.s: dna64-MMX.i
	$(CC) -S -o dna64-MMX.s dna64-MMX.i

dna64-MMX.i: dna64-MMX.c dna64-MMX.h
	$(CC) -E -o dna64-MMX.i dna64-MMX.c

dna64-MMX.c: dna64.Si
	Scc ${SCCFLAGS} -Sc -k -oc dna64-MMX.c -oh dna64-MMX.h -O0 -irr -mMMX dna64.Si >dna64.tree 2>&1


## dna128-AltiVec ##########################################################
dna128-AltiVec: dna128-AltiVec.s
	/usr/local/bin/as -m7400 -o dna128-AltiVec.o dna128-AltiVec.s 2>make.err
	$(CC) -Wall -o dna128-AltiVec dna128-AltiVec.o

dna128-AltiVec.s: dna128-AltiVec.i
	$(CC) -S -o dna128-AltiVec.s dna128-AltiVec.i

dna128-AltiVec.i: dna128-AltiVec.c dna128-AltiVec.h
	$(CC) -E -o dna128-AltiVec.i dna128-AltiVec.c

dna128-AltiVec.c: dna128.Si
	Scc ${SCCFLAGS} -Sc -k -oc dna128-AltiVec.c -oh dna128-AltiVec.h -O0 -irr -mAltiVec dna128.Si >dna128.tree 2>&1


## dna #####################################################################
dna32.Si: dna.Sc common.h
	Scc ${SCCFLAGS} -DBPF=32 -k -E dna.Sc
	mv dna.Si dna32.Si

dna64.Si: dna.Sc common.h
	Scc ${SCCFLAGS} -DBPF=64 -k -E dna.Sc
	mv dna.Si dna64.Si

dna128.Si: dna.Sc common.h
	Scc ${SCCFLAGS} -DBPF=128 -k -E dna.Sc
	mv dna.Si dna128.Si


###############################################################################
clean:
	rm -f Scout.c Scout.h
	rm -f *.Si
	rm -f dna64.c dna128-AltiVec.c dna32.c
	rm -f dna64.h dna128-AltiVec.h dna32.h
	rm -f *.i
	rm -f *.o
	rm -f *.s
	rm -f *.tree
	rm -f *.err
	rm -f $(EXECS)
	rm -f core

distclean: clean
	rm -f cchar cint dna32 dna64 dna128-AltiVec

