CC=g++
CFLAGS64=-c -Wall -m64 -O2
CFLAGS32=-c -Wall -m32 -O2
CFLAGSSE2=-msse2
CFLAGAVX=-mavx
CFLAGXOP=-mavx -mxop
LFLAGS64=-m64
LFLAGS32=-m32

all: revxsha1-64 revxsha1-32
	

# 64 bit
revxsha1-64: main64.o common64.o getargs64.o xsha164.o xsha1avx64.o xsha1help64.o xsha1xop64.o
	$(CC) $(LFLAGS64) -o revxsha1-64 main64.o common64.o getargs64.o xsha164.o xsha1avx64.o xsha1help64.o xsha1xop64.o

common64.o: common.cpp common.h architecture.h
	$(CC) $(CFLAGS64) -o common64.o common.cpp

getargs64.o: getargs.cpp getargs.h common.h architecture.h
	$(CC) $(CFLAGS64) -o getargs64.o getargs.cpp

main64.o: main.cpp getargs.h xsha1.h common.h architecture.h
	$(CC) $(CFLAGS64) -o main64.o main.cpp

xsha164.o: xsha1.cpp xsha1.h xsha1help.h common.h architecture.h
	$(CC) $(CFLAGS64) $(CFLAGSSE2) -o xsha164.o xsha1.cpp

xsha1avx64.o: xsha1avx.cpp xsha1.h xsha1help.h common.h architecture.h
	$(CC) $(CFLAGS64) $(CFLAGAVX) -o xsha1avx64.o xsha1avx.cpp

xsha1help64.o: xsha1help.cpp xsha1help.h common.h architecture.h
	$(CC) $(CFLAGS64) $(CFLAGSSE2) -o xsha1help64.o xsha1help.cpp

xsha1xop64.o: xsha1xop.cpp xsha1.h xsha1help.h common.h architecture.h
	$(CC) $(CFLAGS64) $(CFLAGXOP) -o xsha1xop64.o xsha1xop.cpp

# 32 bit 
revxsha1-32: main32.o common32.o getargs32.o xsha132.o xsha1avx32.o xsha1help32.o xsha1xop32.o
	$(CC) $(LFLAGS32) -o revxsha1-32 main32.o common32.o getargs32.o xsha132.o xsha1avx32.o xsha1help32.o xsha1xop32.o

common32.o: common.cpp common.h architecture.h
	$(CC) $(CFLAGS32) -o common32.o common.cpp

getargs32.o: getargs.cpp getargs.h common.h architecture.h
	$(CC) $(CFLAGS32) -o getargs32.o getargs.cpp

main32.o: main.cpp getargs.h xsha1.h common.h architecture.h
	$(CC) $(CFLAGS32) -o main32.o main.cpp

xsha132.o: xsha1.cpp xsha1.h xsha1help.h common.h architecture.h
	$(CC) $(CFLAGS32) $(CFLAGSSE2) -o xsha132.o xsha1.cpp

xsha1avx32.o: xsha1avx.cpp xsha1.h xsha1help.h common.h architecture.h
	$(CC) $(CFLAGS32) $(CFLAGAVX) -o xsha1avx32.o xsha1avx.cpp

xsha1help32.o: xsha1help.cpp xsha1help.h common.h architecture.h
	$(CC) $(CFLAGS32) $(CFLAGSSE2) -o xsha1help32.o xsha1help.cpp

xsha1xop32.o: xsha1xop.cpp xsha1.h xsha1help.h common.h architecture.h
	$(CC) $(CFLAGS32) $(CFLAGXOP) -o xsha1xop32.o xsha1xop.cpp

clean:
	-rm *.o revxsha1-64 revxsha1-32
