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