Makefile.in 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  1. # Makefile for secure rtp
  2. #
  3. # David A. McGrew
  4. # Cisco Systems, Inc.
  5. # targets:
  6. #
  7. # runtest runs test applications
  8. # runtest-valgrind runs test applications with valgrind
  9. # test builds test applications
  10. # libsrtp2.a static library implementing srtp
  11. # libsrtp2.so shared library implementing srtp
  12. # clean removes objects, libs, and executables
  13. # distribution cleans and builds a .tgz
  14. # tags builds etags file from all .c and .h files
  15. DYNAMIC_PATH_VAR = @DYNAMIC_PATH_VAR@
  16. CRYPTO_LIBDIR = @CRYPTO_LIBDIR@
  17. USE_EXTERNAL_CRYPTO = @USE_EXTERNAL_CRYPTO@
  18. HAVE_PCAP = @HAVE_PCAP@
  19. # Specify how tests should find shared libraries on macOS and Linux
  20. #
  21. # macOS purges DYLD_LIBRARY_PATH when spawning subprocesses, so it's
  22. # not possible to pass this in from the outside; we have to specify
  23. # it for any subprocesses we call. No support for dynamic linked
  24. # tests on Windows.
  25. ifneq ($(strip $(CRYPTO_LIBDIR)),)
  26. ifneq ($(OS),Windows_NT)
  27. UNAME_S = $(shell uname -s)
  28. ifeq ($(UNAME_S),Linux)
  29. FIND_LIBRARIES = LD_LIBRARY_PATH=$(CRYPTO_LIBDIR)
  30. endif
  31. ifeq ($(UNAME_S),Darwin)
  32. FIND_LIBRARIES = DYLD_LIBRARY_PATH=$(CRYPTO_LIBDIR)
  33. endif
  34. CRYPTO_LIBDIR_FORWARD = CRYPTO_LIBDIR=$(CRYPTO_LIBDIR)
  35. endif
  36. endif
  37. .PHONY: all shared_library test
  38. all: test
  39. runtest: test
  40. @echo "running libsrtp2 test applications..."
  41. $(FIND_LIBRARIES) crypto/test/cipher_driver$(EXE) -v >/dev/null
  42. $(FIND_LIBRARIES) crypto/test/kernel_driver$(EXE) -v >/dev/null
  43. $(FIND_LIBRARIES) test/test_srtp$(EXE) >/dev/null
  44. $(FIND_LIBRARIES) test/rdbx_driver$(EXE) -v >/dev/null
  45. $(FIND_LIBRARIES) test/srtp_driver$(EXE) -v >/dev/null
  46. $(FIND_LIBRARIES) test/roc_driver$(EXE) -v >/dev/null
  47. $(FIND_LIBRARIES) test/replay_driver$(EXE) -v >/dev/null
  48. cd test; $(CRYPTO_LIBDIR_FORWARD) $(abspath $(srcdir))/test/rtpw_test.sh -w $(abspath $(srcdir))/test/words.txt >/dev/null
  49. ifeq (1, $(USE_EXTERNAL_CRYPTO))
  50. cd test; $(CRYPTO_LIBDIR_FORWARD) $(abspath $(srcdir))/test/rtpw_test_gcm.sh -w $(abspath $(srcdir))/test/words.txt >/dev/null
  51. endif
  52. @echo "libsrtp2 test applications passed."
  53. $(MAKE) -C crypto runtest
  54. runtest-valgrind: test
  55. @echo "running libsrtp2 test applications... (valgrind)"
  56. valgrind --error-exitcode=1 --leak-check=full test/test_srtp$(EXE) -v >/dev/null
  57. valgrind --error-exitcode=1 --leak-check=full test/srtp_driver$(EXE) -v >/dev/null
  58. @echo "libsrtp2 test applications passed. (valgrind)"
  59. # makefile variables
  60. CC = @CC@
  61. CXX = @CXX@
  62. INCDIR = -Icrypto/include -I$(srcdir)/include -I$(srcdir)/crypto/include
  63. DEFS = @DEFS@
  64. CPPFLAGS= @CPPFLAGS@
  65. CFLAGS = @CFLAGS@
  66. CXXFLAGS= @CXXFLAGS@
  67. srtp-fuzzer: CFLAGS += -g
  68. srtp-fuzzer: CXXFLAGS += -g
  69. LIBS = @LIBS@
  70. LDFLAGS = -L. @LDFLAGS@
  71. COMPILE = $(CC) $(DEFS) $(INCDIR) $(CPPFLAGS) $(CFLAGS)
  72. SRTPLIB = -lsrtp2
  73. PCAP_LIB = @PCAP_LIB@
  74. AR = @AR@
  75. RANLIB = @RANLIB@
  76. INSTALL = @INSTALL@
  77. # EXE defines the suffix on executables - it's .exe for Windows, and
  78. # null on linux, bsd, and OS X and other OSes.
  79. EXE = @EXE@
  80. HMAC_OBJS = @HMAC_OBJS@
  81. AES_ICM_OBJS = @AES_ICM_OBJS@
  82. srcdir = @srcdir@
  83. top_srcdir = @top_srcdir@
  84. top_builddir = @top_builddir@
  85. VPATH = @srcdir@
  86. prefix = @prefix@
  87. exec_prefix = @exec_prefix@
  88. includedir = @includedir@
  89. libdir = @libdir@
  90. bindir = @bindir@
  91. pkgconfigdir = $(libdir)/pkgconfig
  92. pkgconfig_DATA = libsrtp2.pc
  93. SHAREDLIBVERSION = 1
  94. ifneq (,$(or $(findstring linux,@host@), $(findstring gnu,@host@)))
  95. SHAREDLIB_DIR = $(libdir)
  96. SHAREDLIB_LDFLAGS = -shared -Wl,-soname,$@
  97. SHAREDLIBSUFFIXNOVER = so
  98. SHAREDLIBSUFFIX = $(SHAREDLIBSUFFIXNOVER).$(SHAREDLIBVERSION)
  99. else ifneq (,$(or $(findstring cygwin,@host@), $(findstring mingw,@host@)))
  100. SHAREDLIB_DIR = $(bindir)
  101. SHAREDLIB_LDFLAGS = -shared -Wl,--out-implib,libsrtp2.dll.a
  102. SHAREDLIBVERSION =
  103. SHAREDLIBSUFFIXNOVER = dll
  104. SHAREDLIBSUFFIX = $(SHAREDLIBSUFFIXNOVER)
  105. else ifeq (darwin,$(findstring darwin,@host@))
  106. SHAREDLIB_DIR = $(libdir)
  107. SHAREDLIB_LDFLAGS = -dynamiclib -twolevel_namespace \
  108. -fno-common -headerpad_max_install_names -install_name $(libdir)/$@
  109. SHAREDLIBSUFFIXNOVER = dylib
  110. SHAREDLIBSUFFIX = $(SHAREDLIBVERSION).$(SHAREDLIBSUFFIXNOVER)
  111. endif
  112. # implicit rules for object files and test apps
  113. %.o: %.c
  114. $(COMPILE) -c $< -o $@
  115. %$(EXE): %.c
  116. $(COMPILE) $(LDFLAGS) $< -o $@ $(SRTPLIB) $(LIBS)
  117. ciphers = crypto/cipher/cipher.o crypto/cipher/null_cipher.o \
  118. crypto/cipher/cipher_test_cases.o \
  119. $(AES_ICM_OBJS)
  120. hashes = crypto/hash/null_auth.o crypto/hash/auth.o \
  121. crypto/hash/auth_test_cases.o \
  122. $(HMAC_OBJS)
  123. replay = crypto/replay/rdb.o crypto/replay/rdbx.o
  124. math = crypto/math/datatypes.o
  125. ust = crypto/ust/ust.o
  126. err = crypto/kernel/err.o
  127. kernel = crypto/kernel/crypto_kernel.o crypto/kernel/alloc.o \
  128. crypto/kernel/key.o $(err) # $(ust)
  129. cryptobj = $(ciphers) $(hashes) $(math) $(kernel) $(replay)
  130. # libsrtp2.a (implements srtp processing)
  131. srtpobj = srtp/srtp.o
  132. libsrtp2.a: $(srtpobj) $(cryptobj) $(gdoi)
  133. $(AR) cr libsrtp2.a $^
  134. $(RANLIB) libsrtp2.a
  135. libsrtp2.$(SHAREDLIBSUFFIX): $(srtpobj) $(cryptobj) $(gdoi)
  136. $(CC) -shared -o $@ $(SHAREDLIB_LDFLAGS) \
  137. $^ $(LDFLAGS) $(LIBS)
  138. if [ -n "$(SHAREDLIBVERSION)" ]; then \
  139. ln -sfn $@ libsrtp2.$(SHAREDLIBSUFFIXNOVER); \
  140. fi
  141. shared_library: libsrtp2.$(SHAREDLIBSUFFIX)
  142. libsrtp2.so: $(srtpobj) $(cryptobj)
  143. $(CC) -shared -Wl,-soname,libsrtp2.so \
  144. -o libsrtp2.so $^ $(LDFLAGS)
  145. # test applications
  146. ifneq (1, $(USE_EXTERNAL_CRYPTO))
  147. AES_CALC = crypto/test/aes_calc$(EXE)
  148. SHA1_DRIVER = crypto/test/sha1_driver$(EXE)
  149. endif
  150. crypto_testapp = $(AES_CALC) crypto/test/cipher_driver$(EXE) \
  151. crypto/test/datatypes_driver$(EXE) crypto/test/kernel_driver$(EXE) \
  152. $(SHA1_DRIVER) crypto/test/env$(EXE)
  153. testapp = $(crypto_testapp) test/srtp_driver$(EXE) test/replay_driver$(EXE) \
  154. test/roc_driver$(EXE) test/rdbx_driver$(EXE) test/rtpw$(EXE) \
  155. test/test_srtp$(EXE)
  156. ifeq (1, $(HAVE_PCAP))
  157. testapp += test/rtp_decoder$(EXE)
  158. endif
  159. $(testapp): libsrtp2.a
  160. test/rtpw$(EXE): test/rtpw.c test/rtp.c test/util.c test/getopt_s.c \
  161. crypto/math/datatypes.c
  162. $(COMPILE) $(LDFLAGS) -o $@ $^ $(LIBS) $(SRTPLIB)
  163. ifeq (1, $(HAVE_PCAP))
  164. test/rtp_decoder$(EXE): test/rtp_decoder.c test/rtp.c test/util.c test/getopt_s.c \
  165. crypto/math/datatypes.c
  166. $(COMPILE) $(LDFLAGS) -o $@ $^ $(PCAP_LIB) $(LIBS) $(SRTPLIB)
  167. endif
  168. crypto/test/aes_calc$(EXE): crypto/test/aes_calc.c test/util.c
  169. $(COMPILE) -I$(srcdir)/test $(LDFLAGS) -o $@ $^ $(LIBS) $(SRTPLIB)
  170. test/test_srtp$(EXE): test/test_srtp.c
  171. $(COMPILE) -I$(srcdir)/test $(LDFLAGS) -o $@ $^ $(LIBS) $(SRTPLIB)
  172. crypto/test/datatypes_driver$(EXE): crypto/test/datatypes_driver.c test/util.c
  173. $(COMPILE) -I$(srcdir)/test $(LDFLAGS) -o $@ $^ $(LIBS) $(SRTPLIB)
  174. crypto/test/sha1_driver$(EXE): crypto/test/sha1_driver.c test/util.c
  175. $(COMPILE) -I$(srcdir)/test $(LDFLAGS) -o $@ $^ $(LIBS) $(SRTPLIB)
  176. test/srtp_driver$(EXE): test/srtp_driver.c test/util.c test/getopt_s.c
  177. $(COMPILE) -I$(srcdir)/test $(LDFLAGS) -o $@ $^ $(LIBS) $(SRTPLIB)
  178. test/rdbx_driver$(EXE): test/rdbx_driver.c test/getopt_s.c test/ut_sim.c
  179. $(COMPILE) -I$(srcdir)/test $(LDFLAGS) -o $@ $^ $(LIBS) $(SRTPLIB)
  180. test/roc_driver$(EXE): test/roc_driver.c test/ut_sim.c
  181. $(COMPILE) -I$(srcdir)/test $(LDFLAGS) -o $@ $^ $(LIBS) $(SRTPLIB)
  182. test/replay_driver$(EXE): test/replay_driver.c test/ut_sim.c
  183. $(COMPILE) -I$(srcdir)/test $(LDFLAGS) -o $@ $^ $(LIBS) $(SRTPLIB)
  184. crypto/test/cipher_driver$(EXE): crypto/test/cipher_driver.c test/getopt_s.c
  185. $(COMPILE) -I$(srcdir)/test $(LDFLAGS) -o $@ $^ $(LIBS) $(SRTPLIB)
  186. crypto/test/kernel_driver$(EXE): crypto/test/kernel_driver.c test/getopt_s.c
  187. $(COMPILE) -I$(srcdir)/test $(LDFLAGS) -o $@ $^ $(LIBS) $(SRTPLIB)
  188. crypto/test/env$(EXE): crypto/test/env.c test/getopt_s.c
  189. $(COMPILE) -I$(srcdir)/test $(LDFLAGS) -o $@ $^ $(LIBS) $(SRTPLIB)
  190. test: $(testapp)
  191. @echo "Build done. Please run '$(MAKE) runtest' to run self tests."
  192. memtest: test/srtp_driver
  193. @test/srtp_driver -v -d "alloc" > tmp
  194. @grep freed tmp | wc -l > freed
  195. @grep allocated tmp | wc -l > allocated
  196. @echo "checking for memory leaks (only works with --enable-stdout)"
  197. cmp -s allocated freed
  198. @echo "passed (same number of alloc() and dealloc() calls found)"
  199. @rm freed allocated tmp
  200. # the target 'plot' runs the timing test (test/srtp_driver -t) then
  201. # uses gnuplot to produce plots of the results - see the script file
  202. # 'timing'
  203. plot: test/srtp_driver
  204. test/srtp_driver -t > timing.dat
  205. # bookkeeping: tags, clean, and distribution
  206. tags:
  207. etags */*.[ch] */*/*.[ch]
  208. # documentation - the target libsrtp2doc builds html documentation
  209. libsrtp2doc:
  210. $(MAKE) -C doc
  211. # fuzzer
  212. srtp-fuzzer: libsrtp2.a
  213. $(MAKE) -C fuzzer
  214. .PHONY: clean superclean distclean install
  215. install:
  216. $(INSTALL) -d $(DESTDIR)$(includedir)/srtp2
  217. $(INSTALL) -d $(DESTDIR)$(libdir)
  218. cp $(srcdir)/include/srtp.h $(DESTDIR)$(includedir)/srtp2
  219. cp $(srcdir)/crypto/include/cipher.h $(DESTDIR)$(includedir)/srtp2
  220. cp $(srcdir)/crypto/include/auth.h $(DESTDIR)$(includedir)/srtp2
  221. cp $(srcdir)/crypto/include/crypto_types.h $(DESTDIR)$(includedir)/srtp2
  222. if [ -f libsrtp2.a ]; then cp libsrtp2.a $(DESTDIR)$(libdir)/; fi
  223. if [ -f libsrtp2.dll.a ]; then cp libsrtp2.dll.a $(DESTDIR)$(libdir)/; fi
  224. if [ -f libsrtp2.$(SHAREDLIBSUFFIX) ]; then \
  225. $(INSTALL) -d $(DESTDIR)$(SHAREDLIB_DIR); \
  226. cp libsrtp2.$(SHAREDLIBSUFFIX) $(DESTDIR)$(SHAREDLIB_DIR)/; \
  227. cp libsrtp2.$(SHAREDLIBSUFFIXNOVER) $(DESTDIR)$(SHAREDLIB_DIR)/; \
  228. if [ -n "$(SHAREDLIBVERSION)" ]; then \
  229. ln -sfn libsrtp2.$(SHAREDLIBSUFFIX) $(DESTDIR)$(SHAREDLIB_DIR)/libsrtp2.$(SHAREDLIBSUFFIXNOVER); \
  230. fi; \
  231. fi
  232. $(INSTALL) -d $(DESTDIR)$(pkgconfigdir)
  233. cp $(top_builddir)/$(pkgconfig_DATA) $(DESTDIR)$(pkgconfigdir)/
  234. uninstall:
  235. rm -f $(DESTDIR)$(includedir)/srtp2/*.h
  236. rm -f $(DESTDIR)$(libdir)/libsrtp2.*
  237. -rmdir $(DESTDIR)$(includedir)/srtp2
  238. rm -f $(DESTDIR)$(pkgconfigdir)/$(pkgconfig_DATA)
  239. clean:
  240. rm -rf $(cryptobj) $(srtpobj) TAGS \
  241. libsrtp2.a libsrtp2.so libsrtp2.dll.a core *.core test/core
  242. for a in * */* */*/*; do \
  243. if [ -f "$$a~" ] ; then rm -f $$a~; fi; \
  244. done;
  245. for a in $(testapp); do rm -rf $$a$(EXE); done
  246. rm -rf *.pict *.jpg *.dat
  247. rm -rf freed allocated tmp
  248. $(MAKE) -C doc clean
  249. $(MAKE) -C fuzzer clean
  250. superclean: clean
  251. rm -rf crypto/include/config.h config.log config.cache config.status \
  252. Makefile crypto/Makefile doc/Makefile \
  253. .gdb_history test/.gdb_history .DS_Store
  254. rm -rf autom4te.cache
  255. distclean: superclean
  256. distversion = $(shell cat VERSION)
  257. distname = libsrtp-$(distversion)
  258. mesonprojver = $(shell sed -n -e "s/project.*version\s*:\s'\([0-9.]\+\)'.*/\1/p" meson.build)
  259. distribution: runtest superclean
  260. if ! [ -f VERSION ]; then exit 1; fi
  261. @# Check that the project version set in meson matches the release version
  262. @if [ $(distversion) != $(mesonprojver) ]; then \
  263. echo "==================================================="; \
  264. echo "Meson project version is $(mesonprojver) which is incorrect."; \
  265. echo "Please edit meson.build and change the 'version:'"; \
  266. echo "field in the project() call to $(distversion)"; \
  267. echo "==================================================="; \
  268. exit 1; \
  269. fi
  270. if [ -f ../$(distname).tgz ]; then \
  271. mv ../$(distname).tgz ../$(distname).tgz.bak; \
  272. fi
  273. cd ..; tar cvzf $(distname).tgz libsrtp
  274. # EOF