summaryrefslogtreecommitdiff
path: root/srtp/Makefile.in
blob: 97f5cb8223c2150ea0a2f70196cab6350dd3052f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
# Makefile for secure rtp 
#
# David A. McGrew
# Cisco Systems, Inc.

# targets:
#
# runtest       runs test applications 
# test		builds test applications
# libcrypt.a	static library implementing crypto engine
# libsrtp.a	static library implementing srtp
# clean		removes objects, libs, and executables
# distribution  cleans and builds a .tgz
# tags          builds etags file from all .c and .h files

.PHONY: all test build_table_apps

all: test 

runtest: build_table_apps test
	@echo "running libsrtp test applications..."
	crypto/test/cipher_driver$(EXE) -v >/dev/null
	crypto/test/kernel_driver$(EXE) -v >/dev/null
	test/rdbx_driver$(EXE) -v >/dev/null
	test/srtp_driver$(EXE) -v >/dev/null
	test/roc_driver$(EXE) -v >/dev/null
	test/replay_driver$(EXE) -v >/dev/null
	test/dtls_srtp_driver$(EXE) >/dev/null
	cd test; ./rtpw_test.sh >/dev/null	
	@echo "libsrtp test applications passed."
	$(MAKE) -C crypto runtest

# makefile variables

CC	= @CC@
INCDIR	= -Icrypto/include -I$(srcdir)/include -I$(srcdir)/crypto/include
DEFS	= @DEFS@
CPPFLAGS= @CPPFLAGS@
CFLAGS	= @CFLAGS@
LIBS	= @LIBS@
LDFLAGS	= @LDFLAGS@ -L.
COMPILE = $(CC) $(DEFS) $(INCDIR) $(CPPFLAGS) $(CFLAGS)
SRTPLIB	= -lsrtp

RANLIB	= @RANLIB@
INSTALL	= @INSTALL@

# EXE defines the suffix on executables - it's .exe for Windows, and
# null on linux, bsd, and OS X and other OSes.
EXE	= @EXE@
# gdoi is the group domain of interpretation for isakmp, a group key
# management system which can provide keys for srtp
gdoi	= @GDOI_OBJS@
# Random source.
RNG_OBJS = @RNG_OBJS@

srcdir = @srcdir@
top_srcdir = @top_srcdir@
top_builddir = @top_builddir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
includedir = @includedir@
libdir = @libdir@


# implicit rules for object files and test apps

%.o: %.c
	$(COMPILE) -c $< -o $@

%$(EXE): %.c
	$(COMPILE) $(LDFLAGS) $< -o $@ $(SRTPLIB) $(LIBS)


# libcrypt.a (the crypto engine) 
ciphers = crypto/cipher/cipher.o crypto/cipher/null_cipher.o      \
          crypto/cipher/aes.o crypto/cipher/aes_icm.o             \
          crypto/cipher/aes_cbc.o

hashes  = crypto/hash/null_auth.o crypto/hash/sha1.o \
          crypto/hash/hmac.o crypto/hash/auth.o # crypto/hash/tmmhv2.o 

replay  = crypto/replay/rdb.o crypto/replay/rdbx.o               \
          crypto/replay/ut_sim.o 

math    = crypto/math/datatypes.o crypto/math/stat.o

ust     = crypto/ust/ust.o 

rng     = crypto/rng/$(RNG_OBJS) crypto/rng/prng.o crypto/rng/ctr_prng.o

err     = crypto/kernel/err.o

kernel  = crypto/kernel/crypto_kernel.o  crypto/kernel/alloc.o   \
          crypto/kernel/key.o $(rng) $(err) # $(ust) 

cryptobj =  $(ciphers) $(hashes) $(math) $(stat) $(kernel) $(replay)

# libsrtp.a (implements srtp processing)

srtpobj = srtp/srtp.o 

libsrtp.a: $(srtpobj) $(cryptobj) $(gdoi)
	ar cr libsrtp.a $^
	$(RANLIB) libsrtp.a

# libcryptomath.a contains general-purpose routines that are used to
# generate tables and verify cryptoalgorithm implementations - this
# library is not meant to be included in production code

cryptomath = crypto/math/math.o crypto/math/gf2_8.o 

libcryptomath.a: $(cryptomath)
	ar cr libcryptomath.a $(cryptomath)
	$(RANLIB) libcryptomath.a


# test applications 

crypto_testapp = crypto/test/aes_calc$(EXE) crypto/test/cipher_driver$(EXE) \
	crypto/test/datatypes_driver$(EXE) crypto/test/kernel_driver$(EXE) \
	crypto/test/rand_gen$(EXE) crypto/test/sha1_driver$(EXE) \
	crypto/test/stat_driver$(EXE)

testapp = $(crypto_testapp) test/srtp_driver$(EXE) test/replay_driver$(EXE) \
	  test/roc_driver$(EXE) test/rdbx_driver$(EXE) test/rtpw$(EXE) \
	  test/dtls_srtp_driver$(EXE)

$(testapp): libsrtp.a

test/rtpw$(EXE): test/rtpw.c test/rtp.c test/getopt_s.c
	$(COMPILE) $(LDFLAGS) -o $@ $^ $(LIBS) $(SRTPLIB)

test/srtp_driver$(EXE): test/srtp_driver.c test/getopt_s.c
	$(COMPILE) $(LDFLAGS) -o $@ $^ $(LIBS) $(SRTPLIB)

test/rdbx_driver$(EXE): test/rdbx_driver.c test/getopt_s.c
	$(COMPILE) $(LDFLAGS) -o $@ $^ $(LIBS) $(SRTPLIB)

test/dtls_srtp_driver$(EXE): test/dtls_srtp_driver.c test/getopt_s.c
	$(COMPILE) $(LDFLAGS) -o $@ $^ $(LIBS) $(SRTPLIB)

test: $(testapp)
	@echo "Build done. Please run '$(MAKE) runtest' to run self tests."

memtest: test/srtp_driver
	@test/srtp_driver -v -d "alloc" > tmp
	@grep freed tmp | wc -l > freed
	@grep allocated tmp | wc -l > allocated
	@echo "checking for memory leaks (only works with --enable-stdout)"
	cmp -s allocated freed
	@echo "passed (same number of alloc() and dealloc() calls found)"
	@rm freed allocated tmp

# tables_apps are used to generate the tables used in the crypto
# implementations; these need only be generated during porting, not
# for building libsrtp or the test applications

table_apps = tables/aes_tables 

build_table_apps: $(table_apps)

# in the tables/ subdirectory, we use libcryptomath instead of libsrtp

tables/%: tables/%.c libcryptomath.a 
	$(COMPILE) $(LDFLAGS) $< -o $@ $(LIBS) libcryptomath.a

# the target 'plot' runs the timing test (test/srtp_driver -t) then
# uses gnuplot to produce plots of the results - see the script file
# 'timing'

plot:	test/srtp_driver
	test/srtp_driver -t > timing.dat


# bookkeeping: tags, clean, and distribution

tags:
	etags */*.[ch] */*/*.[ch] 


# documentation - the target libsrtpdoc builds a PDF file documenting
# libsrtp

libsrtpdoc:
	$(MAKE) -C doc

.PHONY: clean superclean install

install:
	@if [ -d $(DESTDIR)$(includedir)/srtp ]; then \
	   echo "you should run 'make uninstall' first"; exit 1;  \
	fi
	$(INSTALL) -d $(DESTDIR)$(includedir)/srtp
	$(INSTALL) -d $(DESTDIR)$(libdir)
	cp include/*.h $(DESTDIR)$(includedir)/srtp  
	cp crypto/include/*.h $(DESTDIR)$(includedir)/srtp
	if [ -f libsrtp.a ]; then cp libsrtp.a $(DESTDIR)$(libdir)/; fi

uninstall:
	rm -rf $(DESTDIR)$(includedir)/srtp
	rm -rf $(DESTDIR)$(libdir)/libsrtp.a

clean:
	rm -rf $(cryptobj) $(srtpobj) $(cryptomath) TAGS \
        libcryptomath.a libsrtp.a core *.core test/core
	for a in * */* */*/*; do			\
              if [ -f "$$a~" ] ; then rm -f $$a~; fi;	\
        done;
	for a in $(testapp) $(table_apps); do rm -rf $$a$(EXE); done
	rm -rf *.pict *.jpg *.dat 
	rm -rf freed allocated tmp
	$(MAKE) -C doc clean
	$(MAKE) -C crypto clean


superclean: clean
	rm -rf crypto/include/config.h config.log config.cache config.status \
               Makefile .gdb_history test/.gdb_history .DS_Store
	rm -rf autom4te.cache

distname = srtp-$(shell cat VERSION)

distribution: runtest superclean 
	if ! [ -f VERSION ]; then exit 1; fi
	if [ -f ../$(distname).tgz ]; then               \
           mv ../$(distname).tgz ../$(distname).tgz.bak; \
        fi
	cd ..; tar cvzf $(distname).tgz srtp

# EOF