CCC		=gcc
FLAGS		=-DLINUX32
FLAGS		+=-DHASHCOM_BASIC_API
#FLAGS		+=-DHASHCOM_SMALL
FLAGS		+=-DHASHCOM_REASONABLE
#FLAGS		+=-DHASHCOM_LARGE
WARNINGS	=-Wall -Werror -ansi
OPTS		=-O3 -s
INCLUDE		=
HASH_OBJS	=hashcom.o hasher.o md5.o sha1.o sha256.o sha384.o sha512.o ripemd160.o
HASH_APPS	=md5_test sha1_test sha256_test sha384_test sha512_test ripemd160_test hasher_test

all: default
default:
	make $(HASH_OBJS)
	make $(HASH_APPS)
apps:
	make $(HASH_APPS)
docs:
	doxygen
clean:
	rm -f *.o core $(HASH_APPS)

$(sort $(HASH_OBJS)): %.o : %.c
	$(CCC) $(INCLUDE) -o $@ -c $< $(WARNINGS) $(FLAGS) $(OPTS)

md5_test:
	$(CCC) $(INCLUDE) -o $@.o -c $@.c $(WARNINGS) $(FLAGS) $(OPTS)
	$(CCC) $(HASH_OBJS) $@.o -o $@

sha1_test:
	$(CCC) $(INCLUDE) -o $@.o -c $@.c $(WARNINGS) $(FLAGS) $(OPTS)
	$(CCC) $(HASH_OBJS) $@.o -o $@

sha256_test:
	$(CCC) $(INCLUDE) -o $@.o -c $@.c $(WARNINGS) $(FLAGS) $(OPTS)
	$(CCC) $(HASH_OBJS) $@.o -o $@

sha384_test:
	$(CCC) $(INCLUDE) -o $@.o -c $@.c $(WARNINGS) $(FLAGS) $(OPTS)
	$(CCC) $(HASH_OBJS) $@.o -o $@

sha512_test:
	$(CCC) $(INCLUDE) -o $@.o -c $@.c $(WARNINGS) $(FLAGS) $(OPTS)
	$(CCC) $(HASH_OBJS) $@.o -o $@

ripemd160_test:
	$(CCC) $(INCLUDE) -o $@.o -c $@.c $(WARNINGS) $(FLAGS) $(OPTS)
	$(CCC) $(HASH_OBJS) $@.o -o $@

hasher_test:
	$(CCC) $(INCLUDE) -o $@.o -c $@.c $(WARNINGS) $(FLAGS) $(OPTS)
	$(CCC) $(HASH_OBJS) $@.o -o $@
