aboutsummaryrefslogblamecommitdiffstats
path: root/Makefile
blob: 749e26e65d8d9e98faf7dd0cb4a8f6e50a969375 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
          
 
                                          










                                                               

 
                             
             
             



                                       






                                     
 









                                     
 
       

























































                                                
                   


































                                                                                      
                                            


                                                                               
 

                                
                                            


                                                                                  
 

                               
                                          


                                                                                   
 
 
           


                                                                                   

                                                             


                                                                                 



















                                                                                                               
 
          











                                                                           
      




                                                                                        
 
                                                                       
.NONPOSIX:

# If possible, use CONFIGFILE=optimised.mk
CONFIGFILE = config.mk


# for Linux
LIBEXT = so
LIBFLAGS = -shared -Wl,-soname,libkeccak.$(LIBEXT).$(LIB_MAJOR)
# for Mac OS
#	LIBEXT = dylib
#	LIBFLAGS = -dynamiclib

include $(CONFIGFILE)


# The version of the library.
LIB_MAJOR = 1
LIB_MINOR = 1
LIB_VERSION = $(LIB_MAJOR).$(LIB_MINOR)



OBJ =\
	libkeccak/digest.o\
	libkeccak/files.o\
	libkeccak/generalised-spec.o\
	libkeccak/hex.o\
	libkeccak/state.o\
	libkeccak/mac/hmac.o

HDR =\
	libkeccak.h\
	libkeccak/digest.h\
	libkeccak/files.h\
	libkeccak/generalised-spec.h\
	libkeccak/hex.h\
	libkeccak/spec.h\
	libkeccak/state.h\
	libkeccak/internal.h\
	libkeccak/mac/hmac.h

MAN3 =\
	libkeccak_behex_lower.3\
	libkeccak_behex_upper.3\
	libkeccak_degeneralise_spec.3\
	libkeccak_digest.3\
	libkeccak_fast_digest.3\
	libkeccak_fast_squeeze.3\
	libkeccak_fast_update.3\
	libkeccak_generalised_spec_initialise.3\
	libkeccak_generalised_sum_fd.3\
	libkeccak_hmac_copy.3\
	libkeccak_hmac_create.3\
	libkeccak_hmac_destroy.3\
	libkeccak_hmac_digest.3\
	libkeccak_hmac_duplicate.3\
	libkeccak_hmac_fast_destroy.3\
	libkeccak_hmac_fast_digest.3\
	libkeccak_hmac_fast_free.3\
	libkeccak_hmac_fast_update.3\
	libkeccak_hmac_free.3\
	libkeccak_hmac_initialise.3\
	libkeccak_hmac_marshal.3\
	libkeccak_hmac_marshal_size.3\
	libkeccak_hmac_reset.3\
	libkeccak_hmac_set_key.3\
	libkeccak_hmac_unmarshal.3\
	libkeccak_hmac_unmarshal_skip.3\
	libkeccak_hmac_update.3\
	libkeccak_hmac_wipe.3\
	libkeccak_keccaksum_fd.3\
	libkeccak_rawshakesum_fd.3\
	libkeccak_sha3sum_fd.3\
	libkeccak_shakesum_fd.3\
	libkeccak_simple_squeeze.3\
	libkeccak_spec_check.3\
	libkeccak_spec_rawshake.3\
	libkeccak_spec_sha3.3\
	libkeccak_spec_shake.3\
	libkeccak_squeeze.3\
	libkeccak_state_copy.3\
	libkeccak_state_create.3\
	libkeccak_state_destroy.3\
	libkeccak_state_duplicate.3\
	libkeccak_state_fast_destroy.3\
	libkeccak_state_fast_free.3\
	libkeccak_state_free.3\
	libkeccak_state_initialise.3\
	libkeccak_state_marshal.3\
	libkeccak_state_marshal_size.3\
	libkeccak_state_reset.3\
	libkeccak_state_unmarshal.3\
	libkeccak_state_unmarshal_skip.3\
	libkeccak_state_wipe.3\
	libkeccak_state_wipe_message.3\
	libkeccak_state_wipe_sponge.3\
	libkeccak_unhex.3\
	libkeccak_update.3

MAN7 =\
	libkeccak.7


all: libkeccak.a libkeccak.$(LIBEXT) test benchmark

$(OBJ): $(HDR)
.c.o:
	$(CC) -fPIC -c -o $@ $< $(CFLAGS) $(CPPFLAGS)

libkeccak.$(LIBEXT): $(OBJ)
	$(CC) -shared -Wl,-soname,libkeccak.$(LIBEXT).$(LIB_MAJOR) -o $@ $^ $(LDFLAGS)

libkeccak.a: $(OBJ)
	$(AR) rc $@ $?
	$(AR) -s $@


test: test.o libkeccak.a
	$(CC) $(FLAGS) -o $@ $^ $(LDFLAGS)

test.o: test.c $(HDR)
	$(CC) $(FLAGS) -O3 -c -o $@ test.c $(CFLAGS) $(CPPFLAGS)

benchmark: benchmark.o libkeccak.a
	$(CC) $(FLAGS) -o $@ $^ $(LDFLAGS)

benchmark.o: benchmark.c $(HDR)
	$(CC) $(FLAGS) -O3 -c -o $@ benchmark.c $(CFLAGS) $(CPPFLAGS)


info: libkeccak.info
libkeccak.info: libkeccak.texinfo
	$(MAKEINFO) $(TEXIFLAGS) libkeccak.texinfo

pdf: libkeccak.pdf
libkeccak.pdf: libkeccak.texinfo
	@! test -d obj/pdf || rm -rf obj/pdf
	@mkdir -p obj/pdf
	cd obj/pdf && texi2pdf $(TEXIFLAGS) ../../libkeccak.texinfo < /dev/null
	mv obj/pdf/$@ $@

dvi: libkeccak.dvi
libkeccak.dvi: libkeccak.texinfo
	@! test -d obj/dvi || rm -rf obj/dvi
	@mkdir -p obj/dvi
	cd obj/dvi && $(TEXI2DVI) $(TEXIFLAGS) ../../libkeccak.texinfo < /dev/null
	mv obj/dvi/$@ $@

ps: libkeccak.ps
libkeccak.ps: libkeccak.texinfo
	@! test -d obj/ps || rm -rf obj/ps
	@mkdir -p obj/ps
	cd obj/ps && texi2pdf $(TEXIFLAGS) --ps ../../libkeccak.texinfo < /dev/null
	mv obj/ps/$@ $@


check: test
	@test $$(sha256sum .testfile | cut -d ' ' -f 1) = \
	      e21d814d21ca269246849cc105faec1a71ac7d1cdb1a86023254f49d51b47231 || \
	      ( echo 'The file .testfile is incorrect, test will fail!' ; false )
	valgrind --leak-check=full ./test
	test $$(valgrind ./test 2>&1 >/dev/null | wc -l) = 14
# Using valgrind 3.10.0, its output to standard error should consist of 14 lines,
# the test itself never prints to standard error.

benchfile:
	dd if=/dev/urandom bs=1000 count=50 > $@

run-benchmark: benchmark benchfile
	for i in $$(seq 7) ; do ./benchmark ; done | median

install: libkeccak.$(LIBEXT) libkeccak.a
	mkdir -p -- "$(DESTDIR)$(PREFIX)/lib"
	cp -- libkeccak.$(LIBEXT) "$(DESTDIR)$(PREFIX)/lib/libkeccak.$(LIBEXT).$(LIB_VERSION)"
	ln -sf -- libkeccak.$(LIBEXT).$(LIB_VERSION) "$(DESTDIR)$(PREFIX)/lib/libkeccak.$(LIBEXT).$(LIB_MAJOR)"
	ln -sf -- libkeccak.$(LIBEXT).$(LIB_VERSION) "$(DESTDIR)$(PREFIX)/lib/libkeccak.$(LIBEXT)"
	cp -- libkeccak.a "$(DESTDIR)$(PREFIX)/lib/libkeccak.a"
	mkdir -p -- "$(DESTDIR)$(PREFIX)/include/libkeccak/mac"
	for f in $(HDR); do cp -- "$$f" "$(DESTDIR)$(PREFIX)/include/$$f" || exit 1; done
	mkdir -p -- "$(DESTDIR)$(MANPREFIX)/man3"
	mkdir -p -- "$(DESTDIR)$(MANPREFIX)/man7"
	cd man && cp -- $(MAN3) "$(DESTDIR)$(MANPREFIX)/man3"
	cd man && cp -- $(MAN7) "$(DESTDIR)$(MANPREFIX)/man7"
	mkdir -p -- "$(DESTDIR)$(PREFIX)/share/licenses/libkeccak"
	cp -- LICENSE "$(DESTDIR)$(PREFIX)/share/licenses/libkeccak/"

uninstall:
	-rm -- "$(DESTDIR)$(PREFIX)/lib/libkeccak.$(LIBEXT).$(LIB_VERSION)"
	-rm -- "$(DESTDIR)$(PREFIX)/lib/libkeccak.$(LIBEXT).$(LIB_MAJOR)"
	-rm -- "$(DESTDIR)$(PREFIX)/lib/libkeccak.$(LIBEXT)"
	-rm -- "$(DESTDIR)$(PREFIX)/lib/libkeccak.a"
	-cd "$(DESTDIR)$(PREFIX)/include" && rm -- $(HDR)
	-rmdir -- "$(DESTDIR)$(PREFIX)/include/libkeccak/mac"
	-rmdir -- "$(DESTDIR)$(PREFIX)/include/libkeccak"
	-cd -- "$(DESTDIR)$(MANPREFIX)/man3" && rm -- $(MAN3)
	-cd -- "$(DESTDIR)$(MANPREFIX)/man7" && rm -- $(MAN7)
	-rm -- "$(DESTDIR)$(PREFIX)/share/licenses/libkeccak/LICENSE"
	-rmdir -- "$(DESTDIR)$(PREFIX)/share/licenses/libkeccak"

clean:
	-rm -r -- *.o libkeccak/*.o libkeccak/mac/*.o
	-rm -r -- *.su libkeccak/*.su libkeccak/mac/*.su
	-rm -- *.info *.pdf *.ps *.dvi *.a libkeccak.$(LIBEXT)* test benchmark benchfile

.SUFFIXES: .c.o

.PHONY: all info pdf ps dvi check run-benchmark install uninstall clean