#!/bin/make # # hash - makefile for FNV hash tools # # @(#) $Revision: 5.2 $ # @(#) $Id: Makefile,v 5.2 2012/03/21 01:42:15 chongo Exp $ # @(#) $Source: /usr/local/src/cmd/fnv/RCS/Makefile,v $ # # See: # http://www.isthe.com/chongo/tech/comp/fnv/index.html # # for the most up to date copy of this code and the FNV hash home page. # # Please do not copyright this code. This code is in the public domain. # # LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO # EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF # USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR # OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # By: # chongo /\oo/\ # http://www.isthe.com/chongo/ # # Share and Enjoy! :-) # make tools # SHELL= /bin/sh CFLAGS= -O3 -g3 #CFLAGS= -O2 -g3 #CC= cc AR= ar TAR= tar EGREP= egrep GZIP_BIN= gzip INSTALL= install # If your system needs ranlib use: # RANLIB= ranlib # otherwise use: # RANLIB= : # #RANLIB= ranlib RANLIB= : # where to install things # DESTBIN= /usr/local/bin DESTLIB= /usr/local/lib DESTINC= /usr/local/include # what to build # SRC= hash_32.c hash_32a.c hash_64.c hash_64a.c \ fnv32.c fnv64.c \ have_ulong64.c test_fnv.c NO64BIT_SRC= no64bit_fnv64.c no64bit_hash_64.c \ no64bit_hash_64a.c no64bit_test_fnv.c HSRC= fnv.h \ longlong.h ALL= ${SRC} ${HSRC} \ README Makefile PROGS= fnv032 fnv064 fnv132 fnv164 fnv1a32 fnv1a64 OBSOLETE_PROGS= fnv0_32 fnv0_64 fnv1_32 fnv1_64 fnv1a_32 fnv1a_64 NO64BIT_PROGS= no64bit_fnv064 no64bit_fnv164 no64bit_fnv1a64 LIBS= libfnv.a LIBOBJ= hash_32.o hash_64.o hash_32a.o hash_64a.o test_fnv.o NO64BIT_OBJ= no64bit_fnv64.o no64bit_hash_64.o \ no64bit_hash_64a.o no64bit_test_fnv.o OTHEROBJ= fnv32.o fnv64.o TARGETS= ${LIBOBJ} ${LIBS} ${PROGS} # default rule # all: ${TARGETS} # things to build # hash_32.o: hash_32.c longlong.h fnv.h ${CC} ${CFLAGS} hash_32.c -c hash_64.o: hash_64.c longlong.h fnv.h ${CC} ${CFLAGS} hash_64.c -c hash_32a.o: hash_32a.c longlong.h fnv.h ${CC} ${CFLAGS} hash_32a.c -c hash_64a.o: hash_64a.c longlong.h fnv.h ${CC} ${CFLAGS} hash_64a.c -c test_fnv.o: test_fnv.c longlong.h fnv.h ${CC} ${CFLAGS} test_fnv.c -c fnv32.o: fnv32.c longlong.h fnv.h ${CC} ${CFLAGS} fnv32.c -c fnv032: fnv32.o libfnv.a ${CC} fnv32.o libfnv.a -o fnv032 fnv64.o: fnv64.c longlong.h fnv.h ${CC} ${CFLAGS} fnv64.c -c fnv064: fnv64.o libfnv.a ${CC} fnv64.o libfnv.a -o fnv064 libfnv.a: ${LIBOBJ} rm -f $@ ${AR} rv $@ ${LIBOBJ} ${RANLIB} $@ fnv132: fnv032 -rm -f $@ -cp -f $? $@ fnv1a32: fnv032 -rm -f $@ -cp -f $? $@ fnv164: fnv064 -rm -f $@ -cp -f $? $@ fnv1a64: fnv064 -rm -f $@ -cp -f $? $@ longlong.h: have_ulong64.c Makefile -@rm -f have_ulong64 have_ulong64.o ll_tmp longlong.h @echo 'forming longlong.h' @echo '/*' > longlong.h @echo ' * DO NOT EDIT -- generated by the Makefile' >> longlong.h @echo ' */' >> longlong.h @echo '' >> longlong.h @echo '#if !defined(__LONGLONG_H__)' >> longlong.h @echo '#define __LONGLONG_H__' >> longlong.h @echo '' >> longlong.h @echo '/* do we have/want to use a long long type? */' >> longlong.h -@rm -f have_ulong64.o have_ulong64 -@${CC} ${CFLAGS} have_ulong64.c -c 2>/dev/null; true -@${CC} ${CFLAGS} have_ulong64.o -o have_ulong64 2>/dev/null; true -@${SHELL} -c "./have_ulong64 > ll_tmp 2>/dev/null" \ >/dev/null 2>&1; true -@if [ -s ll_tmp ]; then \ cat ll_tmp >> longlong.h; \ else \ echo '#undef HAVE_64BIT_LONG_LONG /* no */' >> longlong.h; \ fi @echo '' >> longlong.h @echo '/*' >> longlong.h @echo ' * NO64BIT_LONG_LONG undef HAVE_64BIT_LONG_LONG' >> longlong.h @echo ' */' >> longlong.h @echo '#if defined(NO64BIT_LONG_LONG)' >> longlong.h @echo '#undef HAVE_64BIT_LONG_LONG' >> longlong.h @echo '#endif /* NO64BIT_LONG_LONG */' >> longlong.h @echo '' >> longlong.h @echo '#endif /* !__LONGLONG_H__ */' >> longlong.h -@rm -f have_ulong64 have_ulong64.o ll_tmp @echo 'longlong.h formed' # utilities # install: all -@if [ -d "${DESTBIN}" ]; then \ echo " mkdir -p ${DESTBIN}"; \ mkdir -p ${DESTBIN}; \ fi -@if [ -d "${DESTLIB}" ]; then \ echo " mkdir -p ${DESTLIB}"; \ mkdir -p ${DESTLIB}; \ fi -@if [ -d "${DESTINC}" ]; then \ echo " mkdir -p ${DESTINC}"; \ mkdir -p ${DESTINC}; \ fi ${INSTALL} -m 0755 ${PROGS} ${DESTBIN} ${INSTALL} -m 0644 ${LIBS} ${DESTLIB} ${RANLIB} ${DESTLIB}/libfnv.a ${INSTALL} -m 0644 ${HSRC} ${DESTINC} @# remove osolete programs for i in ${OBSOLETE_PROGS}; do \ if [ -f "${DESTBIN}/$$i" ]; then \ echo "rm -f ${DESTBIN}/$$i"; \ rm -f "${DESTBIN}/$$i"; \ fi; \ done clean: -rm -f have_ulong64 have_ulong64.o ll_tmp ll_tmp2 longlong.h -rm -f ${LIBOBJ} -rm -f ${OTHEROBJ} clobber: clean -rm -f ${TARGETS} -rm -f ${OBSOLETE_PROGS} lltmp lltmp2 ll_tmp -rm -f ${NO64BIT_SRC} -rm -f ${NO64BIT_OBJ} -rm -f ${NO64BIT_PROGS} -rm -f vector.c check: ${PROGS} @echo -n "FNV-0 32 bit tests: " @./fnv032 -t 1 -v @echo -n "FNV-1 32 bit tests: " @./fnv132 -t 1 -v @echo -n "FNV-1a 32 bit tests: " @./fnv1a32 -t 1 -v @echo -n "FNV-0 64 bit tests: " @./fnv064 -t 1 -v @echo -n "FNV-1 64 bit tests: " @./fnv164 -t 1 -v @echo -n "FNV-1a 64 bit tests: " @./fnv1a64 -t 1 -v ############################### # generate test vector source # ############################### no64bit_fnv64.c: fnv64.c -rm -f $@ -cp -f $? $@ no64bit_hash_64.c: hash_64.c -rm -f $@ -cp -f $? $@ no64bit_hash_64a.c: hash_64a.c -rm -f $@ -cp -f $? $@ no64bit_test_fnv.c: test_fnv.c -rm -f $@ -cp -f $? $@ no64bit_fnv64.o: no64bit_fnv64.c longlong.h fnv.h ${CC} ${CFLAGS} -DNO64BIT_LONG_LONG no64bit_fnv64.c -c no64bit_hash_64.o: no64bit_hash_64.c longlong.h fnv.h ${CC} ${CFLAGS} -DNO64BIT_LONG_LONG no64bit_hash_64.c -c no64bit_hash_64a.o: no64bit_hash_64a.c longlong.h fnv.h ${CC} ${CFLAGS} -DNO64BIT_LONG_LONG no64bit_hash_64a.c -c no64bit_test_fnv.o: no64bit_test_fnv.c longlong.h fnv.h ${CC} ${CFLAGS} -DNO64BIT_LONG_LONG no64bit_test_fnv.c -c no64bit_fnv064: no64bit_fnv64.o no64bit_hash_64.o \ no64bit_hash_64a.o no64bit_test_fnv.o ${CC} ${CFLAGS} no64bit_fnv64.o no64bit_hash_64.o \ no64bit_hash_64a.o no64bit_test_fnv.o -o $@ no64bit_fnv164: no64bit_fnv064 -rm -f $@ -cp -f $? $@ no64bit_fnv1a64: no64bit_fnv064 -rm -f $@ -cp -f $? $@ vector.c: ${PROGS} ${NO64BIT_PROGS} -rm -f $@ echo '/* start of output generated by make $@ */' >> $@ echo '' >> $@ #@ echo '/* FNV-0 32 bit test vectors */' >> $@ ./fnv032 -t 0 >> $@ echo '' >> $@ #@ echo '/* FNV-1 32 bit test vectors */' >> $@ ./fnv132 -t 0 >> $@ echo '' >> $@ #@ echo '/* FNV-1a 32 bit test vectors */' >> $@ ./fnv1a32 -t 0 >> $@ echo '' >> $@ #@ echo '/* FNV-0 64 bit test vectors */' >> $@ echo '#if defined(HAVE_64BIT_LONG_LONG)' >> $@ ./fnv064 -t 0 >> $@ echo '#else /* HAVE_64BIT_LONG_LONG */' >> $@ ./no64bit_fnv064 -t 0 >> $@ echo '#endif /* HAVE_64BIT_LONG_LONG */' >> $@ echo '' >> $@ #@ echo '/* FNV-1 64 bit test vectors */' >> $@ echo '#if defined(HAVE_64BIT_LONG_LONG)' >> $@ ./fnv164 -t 0 >> $@ echo '#else /* HAVE_64BIT_LONG_LONG */' >> $@ ./no64bit_fnv164 -t 0 >> $@ echo '#endif /* HAVE_64BIT_LONG_LONG */' >> $@ echo '' >> $@ #@ echo '/* FNV-1a 64 bit test vectors */' >> $@ echo '#if defined(HAVE_64BIT_LONG_LONG)' >> $@ ./fnv1a64 -t 0 >> $@ echo '#else /* HAVE_64BIT_LONG_LONG */' >> $@ ./no64bit_fnv1a64 -t 0 >> $@ echo '#endif /* HAVE_64BIT_LONG_LONG */' >> $@ echo '' >> $@ #@ echo '/* end of output generated by make $@ */' >> $@