1 # Makefile for libcryptomodule.a 2 # 3 # David A. McGrew 4 # Cisco Systems, Inc. 5 6 srcdir = . 7 top_srcdir = .. 8 top_builddir = ../ 9 10 11 CC = gcc 12 INCDIR = -Iinclude -I$(srcdir)/include 13 DEFS = -DHAVE_CONFIG_H 14 CPPFLAGS= 15 CFLAGS = -Wall -O4 -fexpensive-optimizations -funroll-loops 16 LIBS = 17 LDFLAGS = -L. 18 COMPILE = $(CC) $(DEFS) $(INCDIR) $(CPPFLAGS) $(CFLAGS) 19 CRYPTOLIB = -lcryptomodule 20 21 RANLIB = ranlib 22 23 # EXE defines the suffix on executables - it's .exe for cygwin, and 24 # null on linux, bsd, and OS X and other OSes. we define this so that 25 # `make clean` will work on the cygwin platform 26 EXE = 27 # Random source. 28 RNG_OBJS = rand_source.o 29 30 ifdef ARCH 31 DEFS += -D$(ARCH)=1 32 endif 33 34 ifdef sysname 35 DEFS += -D$(sysname)=1 36 endif 37 38 .PHONY: dummy all runtest clean superclean 39 40 dummy : all runtest 41 42 # test applications 43 44 testapp = test/cipher_driver$(EXE) test/datatypes_driver$(EXE) \ 45 test/stat_driver$(EXE) test/sha1_driver$(EXE) \ 46 test/kernel_driver$(EXE) test/aes_calc$(EXE) test/rand_gen$(EXE) \ 47 test/env$(EXE) 48 49 # data values used to test the aes_calc application for AES-128 50 k128=000102030405060708090a0b0c0d0e0f 51 p128=00112233445566778899aabbccddeeff 52 c128=69c4e0d86a7b0430d8cdb78070b4c55a 53 54 55 # data values used to test the aes_calc application for AES-256 56 k256=000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f 57 p256=00112233445566778899aabbccddeeff 58 c256=8ea2b7ca516745bfeafc49904b496089 59 60 61 runtest: libcryptomodule.a $(testapp) 62 test/env$(EXE) # print out information on the build environment 63 @echo "running libcryptomodule test applications..." 64 test `test/aes_calc $(k128) $(p128)` = $(c128) 65 test `test/aes_calc $(k256) $(p256)` = $(c256) 66 test/cipher_driver$(EXE) -v >/dev/null 67 test/datatypes_driver$(EXE) -v >/dev/null 68 test/stat_driver$(EXE) >/dev/null 69 test/sha1_driver$(EXE) -v >/dev/null 70 test/kernel_driver$(EXE) -v >/dev/null 71 test/rand_gen$(EXE) -n 256 >/dev/null 72 @echo "libcryptomodule test applications passed." 73 74 # libcryptomodule.a (the crypto engine) 75 76 ciphers = cipher/cipher.o cipher/null_cipher.o \ 77 cipher/aes.o cipher/aes_icm.o \ 78 cipher/aes_cbc.o 79 80 hashes = hash/null_auth.o hash/sha1.o \ 81 hash/hmac.o hash/auth.o 82 83 math = math/datatypes.o math/stat.o 84 85 rng = rng/$(RNG_OBJS) rng/rand_source.o rng/prng.o rng/ctr_prng.o 86 87 err = kernel/err.o 88 89 kernel = kernel/crypto_kernel.o kernel/alloc.o \ 90 kernel/key.o $(rng) $(err) 91 92 xfm = ae_xfm/xfm.o 93 94 cryptobj = $(ciphers) $(hashes) $(math) $(stat) $(kernel) $(xfm) 95 96 # the rule for making object files and test apps 97 98 %.o: %.c 99 $(COMPILE) -c $< -o $@ 100 101 %$(EXE): %.c libcryptomodule.a 102 $(COMPILE) $(LDFLAGS) $< -o $@ $(CRYPTOLIB) $(LIBS) 103 104 ifndef AR 105 AR=ar 106 endif 107 108 # and the crypto module library itself 109 110 libcryptomodule.a: $(cryptobj) 111 $(AR) cr libcryptomodule.a $(cryptobj) 112 $(RANLIB) libcryptomodule.a 113 114 all: libcryptomodule.a $(testapp) 115 116 # housekeeping functions 117 118 clean: 119 rm -f libcryptomodule.a 120 rm -f $(testapp) *.o */*.o 121 for a in * .* */*; do if [ -f "$$a~" ] ; then rm $$a~; fi; done; 122 rm -f `find . -name "*.[ch]~*~"` 123 rm -rf latex 124 125 superclean: clean 126 rm -f *core TAGS ktrace.out 127 128 129 # the target 'package' builds a compressed tar archive of the source code 130 131 distname = crypto-$(shell cat VERSION) 132 133 package: superclean 134 cd ..; tar cvzf $(distname).tgz crypto/ 135 136 137 # EOF 138