* Initial import of wear-leveling algorithm. * Alignment. * Docs tweaks. * Lock/unlock. * Update quantum/wear_leveling/wear_leveling_internal.h Co-authored-by: Stefan Kerkmann <karlk90@pm.me> * More tests, fix issue with consolidation when unlocked. * More tests. * Review comments. * Add plumbing for FNV1a. * Another test checking that checksum mismatch clears the cache. * Check that the write log still gets played back. Co-authored-by: Stefan Kerkmann <karlk90@pm.me>
		
			
				
	
	
		
			305 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			305 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
| #!/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 <Landon Curt Noll> /\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 $@ */' >> $@
 |