You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

304 lines
7.6 KiB

  1. #!/bin/make
  2. #
  3. # hash - makefile for FNV hash tools
  4. #
  5. # @(#) $Revision: 5.2 $
  6. # @(#) $Id: Makefile,v 5.2 2012/03/21 01:42:15 chongo Exp $
  7. # @(#) $Source: /usr/local/src/cmd/fnv/RCS/Makefile,v $
  8. #
  9. # See:
  10. # http://www.isthe.com/chongo/tech/comp/fnv/index.html
  11. #
  12. # for the most up to date copy of this code and the FNV hash home page.
  13. #
  14. # Please do not copyright this code. This code is in the public domain.
  15. #
  16. # LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
  17. # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
  18. # EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
  19. # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
  20. # USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
  21. # OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  22. # PERFORMANCE OF THIS SOFTWARE.
  23. #
  24. # By:
  25. # chongo <Landon Curt Noll> /\oo/\
  26. # http://www.isthe.com/chongo/
  27. #
  28. # Share and Enjoy! :-)
  29. # make tools
  30. #
  31. SHELL= /bin/sh
  32. CFLAGS= -O3 -g3
  33. #CFLAGS= -O2 -g3
  34. #CC= cc
  35. AR= ar
  36. TAR= tar
  37. EGREP= egrep
  38. GZIP_BIN= gzip
  39. INSTALL= install
  40. # If your system needs ranlib use:
  41. # RANLIB= ranlib
  42. # otherwise use:
  43. # RANLIB= :
  44. #
  45. #RANLIB= ranlib
  46. RANLIB= :
  47. # where to install things
  48. #
  49. DESTBIN= /usr/local/bin
  50. DESTLIB= /usr/local/lib
  51. DESTINC= /usr/local/include
  52. # what to build
  53. #
  54. SRC= hash_32.c hash_32a.c hash_64.c hash_64a.c \
  55. fnv32.c fnv64.c \
  56. have_ulong64.c test_fnv.c
  57. NO64BIT_SRC= no64bit_fnv64.c no64bit_hash_64.c \
  58. no64bit_hash_64a.c no64bit_test_fnv.c
  59. HSRC= fnv.h \
  60. longlong.h
  61. ALL= ${SRC} ${HSRC} \
  62. README Makefile
  63. PROGS= fnv032 fnv064 fnv132 fnv164 fnv1a32 fnv1a64
  64. OBSOLETE_PROGS= fnv0_32 fnv0_64 fnv1_32 fnv1_64 fnv1a_32 fnv1a_64
  65. NO64BIT_PROGS= no64bit_fnv064 no64bit_fnv164 no64bit_fnv1a64
  66. LIBS= libfnv.a
  67. LIBOBJ= hash_32.o hash_64.o hash_32a.o hash_64a.o test_fnv.o
  68. NO64BIT_OBJ= no64bit_fnv64.o no64bit_hash_64.o \
  69. no64bit_hash_64a.o no64bit_test_fnv.o
  70. OTHEROBJ= fnv32.o fnv64.o
  71. TARGETS= ${LIBOBJ} ${LIBS} ${PROGS}
  72. # default rule
  73. #
  74. all: ${TARGETS}
  75. # things to build
  76. #
  77. hash_32.o: hash_32.c longlong.h fnv.h
  78. ${CC} ${CFLAGS} hash_32.c -c
  79. hash_64.o: hash_64.c longlong.h fnv.h
  80. ${CC} ${CFLAGS} hash_64.c -c
  81. hash_32a.o: hash_32a.c longlong.h fnv.h
  82. ${CC} ${CFLAGS} hash_32a.c -c
  83. hash_64a.o: hash_64a.c longlong.h fnv.h
  84. ${CC} ${CFLAGS} hash_64a.c -c
  85. test_fnv.o: test_fnv.c longlong.h fnv.h
  86. ${CC} ${CFLAGS} test_fnv.c -c
  87. fnv32.o: fnv32.c longlong.h fnv.h
  88. ${CC} ${CFLAGS} fnv32.c -c
  89. fnv032: fnv32.o libfnv.a
  90. ${CC} fnv32.o libfnv.a -o fnv032
  91. fnv64.o: fnv64.c longlong.h fnv.h
  92. ${CC} ${CFLAGS} fnv64.c -c
  93. fnv064: fnv64.o libfnv.a
  94. ${CC} fnv64.o libfnv.a -o fnv064
  95. libfnv.a: ${LIBOBJ}
  96. rm -f $@
  97. ${AR} rv $@ ${LIBOBJ}
  98. ${RANLIB} $@
  99. fnv132: fnv032
  100. -rm -f $@
  101. -cp -f $? $@
  102. fnv1a32: fnv032
  103. -rm -f $@
  104. -cp -f $? $@
  105. fnv164: fnv064
  106. -rm -f $@
  107. -cp -f $? $@
  108. fnv1a64: fnv064
  109. -rm -f $@
  110. -cp -f $? $@
  111. longlong.h: have_ulong64.c Makefile
  112. -@rm -f have_ulong64 have_ulong64.o ll_tmp longlong.h
  113. @echo 'forming longlong.h'
  114. @echo '/*' > longlong.h
  115. @echo ' * DO NOT EDIT -- generated by the Makefile' >> longlong.h
  116. @echo ' */' >> longlong.h
  117. @echo '' >> longlong.h
  118. @echo '#if !defined(__LONGLONG_H__)' >> longlong.h
  119. @echo '#define __LONGLONG_H__' >> longlong.h
  120. @echo '' >> longlong.h
  121. @echo '/* do we have/want to use a long long type? */' >> longlong.h
  122. -@rm -f have_ulong64.o have_ulong64
  123. -@${CC} ${CFLAGS} have_ulong64.c -c 2>/dev/null; true
  124. -@${CC} ${CFLAGS} have_ulong64.o -o have_ulong64 2>/dev/null; true
  125. -@${SHELL} -c "./have_ulong64 > ll_tmp 2>/dev/null" \
  126. >/dev/null 2>&1; true
  127. -@if [ -s ll_tmp ]; then \
  128. cat ll_tmp >> longlong.h; \
  129. else \
  130. echo '#undef HAVE_64BIT_LONG_LONG /* no */' >> longlong.h; \
  131. fi
  132. @echo '' >> longlong.h
  133. @echo '/*' >> longlong.h
  134. @echo ' * NO64BIT_LONG_LONG undef HAVE_64BIT_LONG_LONG' >> longlong.h
  135. @echo ' */' >> longlong.h
  136. @echo '#if defined(NO64BIT_LONG_LONG)' >> longlong.h
  137. @echo '#undef HAVE_64BIT_LONG_LONG' >> longlong.h
  138. @echo '#endif /* NO64BIT_LONG_LONG */' >> longlong.h
  139. @echo '' >> longlong.h
  140. @echo '#endif /* !__LONGLONG_H__ */' >> longlong.h
  141. -@rm -f have_ulong64 have_ulong64.o ll_tmp
  142. @echo 'longlong.h formed'
  143. # utilities
  144. #
  145. install: all
  146. -@if [ -d "${DESTBIN}" ]; then \
  147. echo " mkdir -p ${DESTBIN}"; \
  148. mkdir -p ${DESTBIN}; \
  149. fi
  150. -@if [ -d "${DESTLIB}" ]; then \
  151. echo " mkdir -p ${DESTLIB}"; \
  152. mkdir -p ${DESTLIB}; \
  153. fi
  154. -@if [ -d "${DESTINC}" ]; then \
  155. echo " mkdir -p ${DESTINC}"; \
  156. mkdir -p ${DESTINC}; \
  157. fi
  158. ${INSTALL} -m 0755 ${PROGS} ${DESTBIN}
  159. ${INSTALL} -m 0644 ${LIBS} ${DESTLIB}
  160. ${RANLIB} ${DESTLIB}/libfnv.a
  161. ${INSTALL} -m 0644 ${HSRC} ${DESTINC}
  162. @# remove osolete programs
  163. for i in ${OBSOLETE_PROGS}; do \
  164. if [ -f "${DESTBIN}/$$i" ]; then \
  165. echo "rm -f ${DESTBIN}/$$i"; \
  166. rm -f "${DESTBIN}/$$i"; \
  167. fi; \
  168. done
  169. clean:
  170. -rm -f have_ulong64 have_ulong64.o ll_tmp ll_tmp2 longlong.h
  171. -rm -f ${LIBOBJ}
  172. -rm -f ${OTHEROBJ}
  173. clobber: clean
  174. -rm -f ${TARGETS}
  175. -rm -f ${OBSOLETE_PROGS} lltmp lltmp2 ll_tmp
  176. -rm -f ${NO64BIT_SRC}
  177. -rm -f ${NO64BIT_OBJ}
  178. -rm -f ${NO64BIT_PROGS}
  179. -rm -f vector.c
  180. check: ${PROGS}
  181. @echo -n "FNV-0 32 bit tests: "
  182. @./fnv032 -t 1 -v
  183. @echo -n "FNV-1 32 bit tests: "
  184. @./fnv132 -t 1 -v
  185. @echo -n "FNV-1a 32 bit tests: "
  186. @./fnv1a32 -t 1 -v
  187. @echo -n "FNV-0 64 bit tests: "
  188. @./fnv064 -t 1 -v
  189. @echo -n "FNV-1 64 bit tests: "
  190. @./fnv164 -t 1 -v
  191. @echo -n "FNV-1a 64 bit tests: "
  192. @./fnv1a64 -t 1 -v
  193. ###############################
  194. # generate test vector source #
  195. ###############################
  196. no64bit_fnv64.c: fnv64.c
  197. -rm -f $@
  198. -cp -f $? $@
  199. no64bit_hash_64.c: hash_64.c
  200. -rm -f $@
  201. -cp -f $? $@
  202. no64bit_hash_64a.c: hash_64a.c
  203. -rm -f $@
  204. -cp -f $? $@
  205. no64bit_test_fnv.c: test_fnv.c
  206. -rm -f $@
  207. -cp -f $? $@
  208. no64bit_fnv64.o: no64bit_fnv64.c longlong.h fnv.h
  209. ${CC} ${CFLAGS} -DNO64BIT_LONG_LONG no64bit_fnv64.c -c
  210. no64bit_hash_64.o: no64bit_hash_64.c longlong.h fnv.h
  211. ${CC} ${CFLAGS} -DNO64BIT_LONG_LONG no64bit_hash_64.c -c
  212. no64bit_hash_64a.o: no64bit_hash_64a.c longlong.h fnv.h
  213. ${CC} ${CFLAGS} -DNO64BIT_LONG_LONG no64bit_hash_64a.c -c
  214. no64bit_test_fnv.o: no64bit_test_fnv.c longlong.h fnv.h
  215. ${CC} ${CFLAGS} -DNO64BIT_LONG_LONG no64bit_test_fnv.c -c
  216. no64bit_fnv064: no64bit_fnv64.o no64bit_hash_64.o \
  217. no64bit_hash_64a.o no64bit_test_fnv.o
  218. ${CC} ${CFLAGS} no64bit_fnv64.o no64bit_hash_64.o \
  219. no64bit_hash_64a.o no64bit_test_fnv.o -o $@
  220. no64bit_fnv164: no64bit_fnv064
  221. -rm -f $@
  222. -cp -f $? $@
  223. no64bit_fnv1a64: no64bit_fnv064
  224. -rm -f $@
  225. -cp -f $? $@
  226. vector.c: ${PROGS} ${NO64BIT_PROGS}
  227. -rm -f $@
  228. echo '/* start of output generated by make $@ */' >> $@
  229. echo '' >> $@
  230. #@
  231. echo '/* FNV-0 32 bit test vectors */' >> $@
  232. ./fnv032 -t 0 >> $@
  233. echo '' >> $@
  234. #@
  235. echo '/* FNV-1 32 bit test vectors */' >> $@
  236. ./fnv132 -t 0 >> $@
  237. echo '' >> $@
  238. #@
  239. echo '/* FNV-1a 32 bit test vectors */' >> $@
  240. ./fnv1a32 -t 0 >> $@
  241. echo '' >> $@
  242. #@
  243. echo '/* FNV-0 64 bit test vectors */' >> $@
  244. echo '#if defined(HAVE_64BIT_LONG_LONG)' >> $@
  245. ./fnv064 -t 0 >> $@
  246. echo '#else /* HAVE_64BIT_LONG_LONG */' >> $@
  247. ./no64bit_fnv064 -t 0 >> $@
  248. echo '#endif /* HAVE_64BIT_LONG_LONG */' >> $@
  249. echo '' >> $@
  250. #@
  251. echo '/* FNV-1 64 bit test vectors */' >> $@
  252. echo '#if defined(HAVE_64BIT_LONG_LONG)' >> $@
  253. ./fnv164 -t 0 >> $@
  254. echo '#else /* HAVE_64BIT_LONG_LONG */' >> $@
  255. ./no64bit_fnv164 -t 0 >> $@
  256. echo '#endif /* HAVE_64BIT_LONG_LONG */' >> $@
  257. echo '' >> $@
  258. #@
  259. echo '/* FNV-1a 64 bit test vectors */' >> $@
  260. echo '#if defined(HAVE_64BIT_LONG_LONG)' >> $@
  261. ./fnv1a64 -t 0 >> $@
  262. echo '#else /* HAVE_64BIT_LONG_LONG */' >> $@
  263. ./no64bit_fnv1a64 -t 0 >> $@
  264. echo '#endif /* HAVE_64BIT_LONG_LONG */' >> $@
  265. echo '' >> $@
  266. #@
  267. echo '/* end of output generated by make $@ */' >> $@