# $Id: Makefile,v 1.23 1999/04/15 03:01:05 geoffk Exp $
CFLAGS=-O -Wall -ansi -g

all: mc68mu asm

mc68mu : mc68mu.o error.o
mc68mu.o : error.h
asm : asm.o opcodes.o error.o
asm.o : asm.h error.h
opcodes.o : asm.h

opcodes.c : opcodes.gperf
	gperf -j1 -CEITcot -k1-4,$$ -e'	' -LANSI-C -Nopsearch $< > $@

clean:
	rm -f *.o *~ opcodes.c asm.c asm mc68mu [^t]*.s
	rm -f mars-sbox-out.m4
	rm -f C/*.o C/*~ $(patsubst %,C/%,$(ciphers))

%.o : %.s asm
	./asm $< $@ || ( rm -f $@ ; exit 1 )

%.s : %.m4 macros.m4
	m4 -d $< > $@ || ( rm -f $@ ; exit 1 )

mars-sbox-out.m4 : mars-sbox.m4 sha-m4.m4
	m4 -d $< > $@ || ( rm -f $@ ; exit 1 )

des.s : des.m4 des-test.m4 des-sboxes.s
mars.s mars-2.s: mars-sbox-out.m4
serpent.s: serpent.m4 serpent-sboxes.m4

ofiles  = rijndael.o rijndael-d.o sha.o des.o rc6.o crypton.o mars.o
ofiles += serpent.o mars-2.o rc6-2.o

.cvsignore : Makefile
	echo $(ofiles:%.o=%.s) > $@
	echo opcodes.c asm.c asm mc68mu objdump >> $@
	echo mars-sbox-out.m4 code.tar.gz >> $@
	echo '[^t]*.s' >> $@
	echo lr twofish >> $@

check: $(ofiles) mc68mu serpent-sboxes.o
	for i in $(ofiles) ; do echo $$i ; \
		./mc68mu $$i | egrep -v ' (A=|STOP)' ; true ; done
	./mc68mu serpent-sboxes.o | egrep -v ' (mem\[8.\] = 00|STOP)' ; true

ciphers =  cast crypton crypton1 deal dfc e2 frog hpc loki magenta 
ciphers += mars rc6 rijndael safer serpent twofish

$(patsubst %,C/%,$(ciphers)) : C/main.o
$(patsubst %,C/%.o,$(ciphers)) : C/std_defs.h

C/.cvsignore:
	echo $(ciphers) > $@
	echo mars-gentest >> $@

code.tar.gz: opcodes.c asm.c mars-sbox-out.m4 $(wildcard *.h *.c *.m4)
	tar zcf $@ Makefile *.m4 *.h *.c asm.l opcodes.gperf
