1#CC=clang 2HASHDIR = ../src 3UTILS = emit_keys 4PROGS = test1 test2 test3 test4 test5 test6 test7 test8 test9 \ 5 test10 test11 test12 test13 test14 test15 test16 test17 \ 6 test18 test19 test20 test21 test22 test23 test24 test25 \ 7 test26 test27 test28 test29 test30 test31 test32 test33 \ 8 test34 test35 test36 test37 test38 test39 test40 test41 \ 9 test42 test43 test44 test45 test46 test47 test48 test49 \ 10 test50 test51 test52 test53 test54 test55 test56 test57 \ 11 test58 test59 test60 test61 test62 test63 test64 test65 \ 12 test66 test67 test68 test69 test70 test71 test72 test73 \ 13 test74 test75 test76 test77 test78 test79 test80 test81 \ 14 test82 test83 test84 test85 test86 test87 test88 test89 \ 15 test90 test91 test92 test93 16CFLAGS += -I$(HASHDIR) 17#CFLAGS += -DHASH_BLOOM=16 18#CFLAGS += -O2 19CFLAGS += -g 20#CFLAGS += -Wstrict-aliasing=2 21CFLAGS += -Wall 22#CFLAGS += -Wextra 23#CFLAGS += -std=c89 24CFLAGS += ${EXTRA_CFLAGS} 25 26ifeq ($(HASH_DEBUG),1) 27CFLAGS += -DHASH_DEBUG=1 28endif 29 30ifeq ($(HASH_PEDANTIC),1) 31CFLAGS += -pedantic 32endif 33 34TEST_TARGET=run_tests 35TESTS=./do_tests 36 37# These flags are required in order to build with -DHASH_FUNCTION=HASH_MUR. 38MUR_CFLAGS = -DHASH_USING_NO_STRICT_ALIASING -fno-strict-aliasing 39 40# detect Cygwin 41ifneq ($(strip $(shell $(CC) -v 2>&1 |grep "cygwin")),) 42 TESTS=./do_tests.cygwin 43endif 44 45# detect MinGW 46ifneq ($(strip $(shell $(CC) -v 2>&1 |grep "mingw")),) 47 TEST_TARGET=run_tests_mingw 48 TESTS=./do_tests.mingw 49endif 50 51#detect Linux (platform specific utilities) 52ifneq ($(strip $(shell $(CC) -v 2>&1 |grep "linux")),) 53 PLAT_UTILS = hashscan sleep_test 54endif 55 56#detect FreeBSD (platform specific utilities) 57ifeq ($(strip $(shell uname -s)), FreeBSD) 58 ifeq ($(shell if [ `sysctl -n kern.osreldate` -ge 0801000 ]; then echo "ok"; fi), ok) 59 PLAT_UTILS = hashscan sleep_test 60 endif 61endif 62 63all: $(PROGS) $(UTILS) $(PLAT_UTILS) keystat $(TEST_TARGET) 64 65tests_only: $(PROGS) $(TEST_TARGET) 66 67GITIGN = .gitignore 68MKGITIGN = [ -f "$(GITIGN)" ] || echo "$(GITIGN)" > $(GITIGN); grep -q '^\$@$$' $(GITIGN) || echo "$@" >> $(GITIGN) 69 70debug: 71 $(MAKE) all HASH_DEBUG=1 72 73pedantic: 74 $(MAKE) all HASH_PEDANTIC=1 75 76cplusplus: 77 CC=$(CXX) $(MAKE) all 78 79thorough: 80 $(MAKE) clean && $(MAKE) all EXTRA_CFLAGS='-pedantic' 81 $(MAKE) clean && $(MAKE) all EXTRA_CFLAGS='-pedantic -DHASH_BLOOM=16' 82 $(MAKE) clean && $(MAKE) tests_only EXTRA_CFLAGS='-pedantic -DHASH_BLOOM=16 -DHASH_DEBUG -DNO_DECLTYPE' 83 $(MAKE) clean && $(MAKE) tests_only EXTRA_CFLAGS='-pedantic -DHASH_USING_NO_STRICT_ALIASING -fno-strict-aliasing -DHASH_FUNCTION=HASH_MUR' 84 $(MAKE) clean && CC=$(CXX) $(MAKE) all EXTRA_CFLAGS='-pedantic' 85 $(MAKE) clean && CC=$(CXX) $(MAKE) all EXTRA_CFLAGS='-pedantic -DHASH_BLOOM=16' 86 $(MAKE) clean && CC=$(CXX) $(MAKE) tests_only EXTRA_CFLAGS='-pedantic -DHASH_BLOOM=16 -DHASH_DEBUG -DNO_DECLTYPE' 87 $(MAKE) clean && CC=$(CXX) $(MAKE) tests_only EXTRA_CFLAGS='-pedantic -DHASH_USING_NO_STRICT_ALIASING -fno-strict-aliasing -DHASH_FUNCTION=HASH_MUR' 88 89example: example.c $(HASHDIR)/uthash.h 90 $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(@).c 91 92$(PROGS) $(UTILS) : $(HASHDIR)/uthash.h 93 $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(@).c 94 @$(MKGITIGN) 95 96hashscan : $(HASHDIR)/uthash.h 97 $(CC) $(CPPFLAGS) $(CFLAGS) $(MUR_CFLAGS) $(LDFLAGS) -o $@ $(@).c 98 @$(MKGITIGN) 99 100sleep_test : $(HASHDIR)/uthash.h 101 $(CC) $(CPPFLAGS) $(CFLAGS) -DHASH_BLOOM=16 $(LDFLAGS) -o $@ $(@).c 102 @$(MKGITIGN) 103 104keystat : $(HASHDIR)/uthash.h 105 $(CC) $(CPPFLAGS) $(CFLAGS) -DHASH_FUNCTION=HASH_BER $(LDFLAGS) -o keystat.BER keystat.c 106 $(CC) $(CPPFLAGS) $(CFLAGS) -DHASH_FUNCTION=HASH_FNV $(LDFLAGS) -o keystat.FNV keystat.c 107 $(CC) $(CPPFLAGS) $(CFLAGS) -DHASH_FUNCTION=HASH_JEN $(LDFLAGS) -o keystat.JEN keystat.c 108 $(CC) $(CPPFLAGS) $(CFLAGS) -DHASH_FUNCTION=HASH_OAT $(LDFLAGS) -o keystat.OAT keystat.c 109 $(CC) $(CPPFLAGS) $(CFLAGS) -DHASH_FUNCTION=HASH_SAX $(LDFLAGS) -o keystat.SAX keystat.c 110 $(CC) $(CPPFLAGS) $(CFLAGS) -DHASH_FUNCTION=HASH_SFH $(LDFLAGS) -o keystat.SFH keystat.c 111 $(CC) $(CPPFLAGS) $(CFLAGS) $(MUR_CFLAGS) -DHASH_FUNCTION=HASH_MUR $(LDFLAGS) -o keystat.MUR keystat.c 112 113run_tests: $(PROGS) 114 perl $(TESTS) 115 116run_tests_mingw: $(PROGS) 117 /bin/bash do_tests.mingw 118 119astyle: 120 astyle -n --style=kr --indent-switches --add-brackets *.c 121 122.PHONY: clean astyle 123 124clean: 125 rm -f $(UTILS) $(PLAT_UTILS) $(PROGS) test*.out keystat.??? example hashscan sleep_test *.exe $(GITIGN) 126 rm -rf *.dSYM 127