Makefile 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. # Also see "include/mbedtls/mbedtls_config.h"
  2. CFLAGS ?= -O2
  3. WARNING_CFLAGS ?= -Wall -Wextra -Wformat=2 -Wno-format-nonliteral
  4. LDFLAGS ?=
  5. # Include ../include for public headers and . for private headers.
  6. # Note that . needs to be included explicitly for the sake of library
  7. # files that are not in the /library directory (which currently means
  8. # under /3rdparty).
  9. LOCAL_CFLAGS = $(WARNING_CFLAGS) -I. -I../include -D_FILE_OFFSET_BITS=64
  10. LOCAL_LDFLAGS =
  11. ifdef DEBUG
  12. LOCAL_CFLAGS += -g3
  13. endif
  14. # MicroBlaze specific options:
  15. # CFLAGS += -mno-xl-soft-mul -mxl-barrel-shift
  16. # To compile on Plan9:
  17. # CFLAGS += -D_BSD_EXTENSION
  18. PERL ?= perl
  19. ifdef WINDOWS
  20. PYTHON ?= python
  21. else
  22. PYTHON ?= $(shell if type python3 >/dev/null 2>/dev/null; then echo python3; else echo python; fi)
  23. endif
  24. # if were running on Windows build for Windows
  25. ifdef WINDOWS
  26. WINDOWS_BUILD=1
  27. else ifeq ($(shell uname -s),Darwin)
  28. ifeq ($(AR),ar)
  29. APPLE_BUILD ?= 1
  30. endif
  31. endif
  32. # To compile as a shared library:
  33. ifdef SHARED
  34. # all code is position-indep with mingw, avoid warning about useless flag
  35. ifndef WINDOWS_BUILD
  36. LOCAL_CFLAGS += -fPIC -fpic
  37. endif
  38. endif
  39. SOEXT_TLS?=so.19
  40. SOEXT_X509?=so.5
  41. SOEXT_CRYPTO?=so.14
  42. # Set AR_DASH= (empty string) to use an ar implementation that does not accept
  43. # the - prefix for command line options (e.g. llvm-ar)
  44. AR_DASH ?= -
  45. ARFLAGS = $(AR_DASH)src
  46. ifdef APPLE_BUILD
  47. ifneq ($(APPLE_BUILD),0)
  48. ARFLAGS = $(AR_DASH)Src
  49. RLFLAGS = -no_warning_for_no_symbols -c
  50. RL ?= ranlib
  51. endif
  52. endif
  53. DLEXT ?= so
  54. ifdef WINDOWS_BUILD
  55. # Windows shared library extension:
  56. DLEXT = dll
  57. else ifdef APPLE_BUILD
  58. ifneq ($(APPLE_BUILD),0)
  59. # Mac OS X shared library extension:
  60. DLEXT = dylib
  61. endif
  62. endif
  63. OBJS_CRYPTO= \
  64. aes.o \
  65. aesni.o \
  66. aesce.o \
  67. aria.o \
  68. asn1parse.o \
  69. asn1write.o \
  70. base64.o \
  71. bignum.o \
  72. bignum_core.o \
  73. bignum_mod.o \
  74. bignum_mod_raw.o \
  75. camellia.o \
  76. ccm.o \
  77. chacha20.o \
  78. chachapoly.o \
  79. cipher.o \
  80. cipher_wrap.o \
  81. cmac.o \
  82. constant_time.o \
  83. ctr_drbg.o \
  84. des.o \
  85. dhm.o \
  86. ecdh.o \
  87. ecdsa.o \
  88. ecjpake.o \
  89. ecp.o \
  90. ecp_curves.o \
  91. entropy.o \
  92. entropy_poll.o \
  93. error.o \
  94. gcm.o \
  95. hash_info.o \
  96. hkdf.o \
  97. hmac_drbg.o \
  98. lmots.o \
  99. lms.o \
  100. md.o \
  101. md5.o \
  102. memory_buffer_alloc.o \
  103. nist_kw.o \
  104. oid.o \
  105. padlock.o \
  106. pem.o \
  107. pk.o \
  108. pk_wrap.o \
  109. pkcs12.o \
  110. pkcs5.o \
  111. pkparse.o \
  112. pkwrite.o \
  113. platform.o \
  114. platform_util.o \
  115. poly1305.o \
  116. psa_crypto.o \
  117. psa_crypto_aead.o \
  118. psa_crypto_cipher.o \
  119. psa_crypto_client.o \
  120. psa_crypto_driver_wrappers.o \
  121. psa_crypto_ecp.o \
  122. psa_crypto_hash.o \
  123. psa_crypto_mac.o \
  124. psa_crypto_pake.o \
  125. psa_crypto_rsa.o \
  126. psa_crypto_se.o \
  127. psa_crypto_slot_management.o \
  128. psa_crypto_storage.o \
  129. psa_its_file.o \
  130. psa_util.o \
  131. ripemd160.o \
  132. rsa.o \
  133. rsa_alt_helpers.o \
  134. sha1.o \
  135. sha256.o \
  136. sha512.o \
  137. threading.o \
  138. timing.o \
  139. version.o \
  140. version_features.o \
  141. # This line is intentionally left blank
  142. include ../3rdparty/Makefile.inc
  143. LOCAL_CFLAGS+=$(THIRDPARTY_INCLUDES)
  144. OBJS_CRYPTO+=$(THIRDPARTY_CRYPTO_OBJECTS)
  145. OBJS_X509= \
  146. x509.o \
  147. x509_create.o \
  148. x509_crl.o \
  149. x509_crt.o \
  150. x509_csr.o \
  151. x509write_crt.o \
  152. x509write_csr.o \
  153. pkcs7.o \
  154. # This line is intentionally left blank
  155. OBJS_TLS= \
  156. debug.o \
  157. mps_reader.o \
  158. mps_trace.o \
  159. net_sockets.o \
  160. ssl_cache.o \
  161. ssl_ciphersuites.o \
  162. ssl_client.o \
  163. ssl_cookie.o \
  164. ssl_debug_helpers_generated.o \
  165. ssl_msg.o \
  166. ssl_ticket.o \
  167. ssl_tls.o \
  168. ssl_tls12_client.o \
  169. ssl_tls12_server.o \
  170. ssl_tls13_keys.o \
  171. ssl_tls13_client.o \
  172. ssl_tls13_server.o \
  173. ssl_tls13_generic.o \
  174. # This line is intentionally left blank
  175. .SILENT:
  176. .PHONY: all static shared clean
  177. ifndef SHARED
  178. all: static
  179. else
  180. all: shared static
  181. endif
  182. static: libmbedcrypto.a libmbedx509.a libmbedtls.a
  183. cd ../tests && echo "This is a seedfile that contains 64 bytes (65 on Windows)......" > seedfile
  184. shared: libmbedcrypto.$(DLEXT) libmbedx509.$(DLEXT) libmbedtls.$(DLEXT)
  185. # Windows builds under Mingw can fail if make tries to create archives in the same
  186. # directory at the same time - see https://bugs.launchpad.net/gcc-arm-embedded/+bug/1848002.
  187. # This forces builds of the .a files to be serialised.
  188. ifdef WINDOWS
  189. libmbedtls.a: | libmbedx509.a
  190. libmbedx509.a: | libmbedcrypto.a
  191. endif
  192. # tls
  193. libmbedtls.a: $(OBJS_TLS)
  194. echo " AR $@"
  195. $(AR) $(ARFLAGS) $@ $(OBJS_TLS)
  196. ifdef APPLE_BUILD
  197. ifneq ($(APPLE_BUILD),0)
  198. echo " RL $@"
  199. $(RL) $(RLFLAGS) $@
  200. endif
  201. endif
  202. libmbedtls.$(SOEXT_TLS): $(OBJS_TLS) libmbedx509.so
  203. echo " LD $@"
  204. $(CC) -shared -Wl,-soname,$@ -o $@ $(OBJS_TLS) -L. -lmbedx509 -lmbedcrypto $(LOCAL_LDFLAGS) $(LDFLAGS)
  205. ifneq ($(SOEXT_TLS),so)
  206. libmbedtls.so: libmbedtls.$(SOEXT_TLS)
  207. echo " LN $@ -> $<"
  208. ln -sf $< $@
  209. endif
  210. libmbedtls.dylib: $(OBJS_TLS) libmbedx509.dylib
  211. echo " LD $@"
  212. $(CC) -dynamiclib -o $@ $(OBJS_TLS) -L. -lmbedx509 -lmbedcrypto $(LOCAL_LDFLAGS) $(LDFLAGS)
  213. libmbedtls.dll: $(OBJS_TLS) libmbedx509.dll
  214. echo " LD $@"
  215. $(CC) -shared -Wl,-soname,$@ -Wl,--out-implib,$@.a -o $@ $(OBJS_TLS) -lws2_32 -lwinmm -lgdi32 -L. -lmbedx509 -lmbedcrypto -static-libgcc $(LOCAL_LDFLAGS) $(LDFLAGS)
  216. # x509
  217. libmbedx509.a: $(OBJS_X509)
  218. echo " AR $@"
  219. $(AR) $(ARFLAGS) $@ $(OBJS_X509)
  220. ifdef APPLE_BUILD
  221. ifneq ($(APPLE_BUILD),0)
  222. echo " RL $@"
  223. $(RL) $(RLFLAGS) $@
  224. endif
  225. endif
  226. libmbedx509.$(SOEXT_X509): $(OBJS_X509) libmbedcrypto.so
  227. echo " LD $@"
  228. $(CC) -shared -Wl,-soname,$@ -o $@ $(OBJS_X509) -L. -lmbedcrypto $(LOCAL_LDFLAGS) $(LDFLAGS)
  229. ifneq ($(SOEXT_X509),so)
  230. libmbedx509.so: libmbedx509.$(SOEXT_X509)
  231. echo " LN $@ -> $<"
  232. ln -sf $< $@
  233. endif
  234. libmbedx509.dylib: $(OBJS_X509) libmbedcrypto.dylib
  235. echo " LD $@"
  236. $(CC) -dynamiclib -o $@ $(OBJS_X509) -L. -lmbedcrypto $(LOCAL_LDFLAGS) $(LDFLAGS)
  237. libmbedx509.dll: $(OBJS_X509) libmbedcrypto.dll
  238. echo " LD $@"
  239. $(CC) -shared -Wl,-soname,$@ -Wl,--out-implib,$@.a -o $@ $(OBJS_X509) -lws2_32 -lwinmm -lgdi32 -L. -lmbedcrypto -static-libgcc $(LOCAL_LDFLAGS) $(LDFLAGS)
  240. # crypto
  241. libmbedcrypto.a: $(OBJS_CRYPTO)
  242. echo " AR $@"
  243. $(AR) $(ARFLAGS) $@ $(OBJS_CRYPTO)
  244. ifdef APPLE_BUILD
  245. ifneq ($(APPLE_BUILD),0)
  246. echo " RL $@"
  247. $(RL) $(RLFLAGS) $@
  248. endif
  249. endif
  250. libmbedcrypto.$(SOEXT_CRYPTO): $(OBJS_CRYPTO)
  251. echo " LD $@"
  252. $(CC) -shared -Wl,-soname,$@ -o $@ $(OBJS_CRYPTO) $(LOCAL_LDFLAGS) $(LDFLAGS)
  253. ifneq ($(SOEXT_CRYPTO),so)
  254. libmbedcrypto.so: libmbedcrypto.$(SOEXT_CRYPTO)
  255. echo " LN $@ -> $<"
  256. ln -sf $< $@
  257. endif
  258. libmbedcrypto.dylib: $(OBJS_CRYPTO)
  259. echo " LD $@"
  260. $(CC) -dynamiclib -o $@ $(OBJS_CRYPTO) $(LOCAL_LDFLAGS) $(LDFLAGS)
  261. libmbedcrypto.dll: $(OBJS_CRYPTO)
  262. echo " LD $@"
  263. $(CC) -shared -Wl,-soname,$@ -Wl,--out-implib,$@.a -o $@ $(OBJS_CRYPTO) -lws2_32 -lwinmm -lgdi32 -static-libgcc $(LOCAL_LDFLAGS) $(LDFLAGS)
  264. .c.o:
  265. echo " CC $<"
  266. $(CC) $(LOCAL_CFLAGS) $(CFLAGS) -o $@ -c $<
  267. .PHONY: generated_files
  268. GENERATED_FILES = \
  269. error.c version_features.c \
  270. ssl_debug_helpers_generated.c \
  271. psa_crypto_driver_wrappers.c
  272. generated_files: $(GENERATED_FILES)
  273. error.c: ../scripts/generate_errors.pl
  274. error.c: ../scripts/data_files/error.fmt
  275. error.c: $(filter-out %config%,$(wildcard ../include/mbedtls/*.h))
  276. error.c:
  277. echo " Gen $@"
  278. $(PERL) ../scripts/generate_errors.pl
  279. ssl_debug_helpers_generated.c: ../scripts/generate_ssl_debug_helpers.py
  280. ssl_debug_helpers_generated.c: $(filter-out %config%,$(wildcard ../include/mbedtls/*.h))
  281. ssl_debug_helpers_generated.c:
  282. echo " Gen $@"
  283. $(PYTHON) ../scripts/generate_ssl_debug_helpers.py --mbedtls-root .. .
  284. version_features.c: ../scripts/generate_features.pl
  285. version_features.c: ../scripts/data_files/version_features.fmt
  286. ## The generated file only depends on the options that are present in mbedtls_config.h,
  287. ## not on which options are set. To avoid regenerating this file all the time
  288. ## when switching between configurations, don't declare mbedtls_config.h as a
  289. ## dependency. Remove this file from your working tree if you've just added or
  290. ## removed an option in mbedtls_config.h.
  291. #version_features.c: ../include/mbedtls/mbedtls_config.h
  292. version_features.c:
  293. echo " Gen $@"
  294. $(PERL) ../scripts/generate_features.pl
  295. psa_crypto_driver_wrappers.c: ../scripts/generate_driver_wrappers.py
  296. psa_crypto_driver_wrappers.c: ../scripts/data_files/driver_templates/psa_crypto_driver_wrappers.c.jinja
  297. psa_crypto_driver_wrappers.c:
  298. echo " Gen $@"
  299. $(PYTHON) ../scripts/generate_driver_wrappers.py
  300. clean:
  301. ifndef WINDOWS
  302. rm -f *.o libmbed*
  303. rm -f $(THIRDPARTY_CRYPTO_OBJECTS)
  304. else
  305. if exist *.o del /Q /F *.o
  306. if exist libmbed* del /Q /F libmbed*
  307. del /Q /F del_errors_out_if_the_file_list_is_empty_but_not_if_a_file_does_not_exist $(subst /,\,$(THIRDPARTY_CRYPTO_OBJECTS))
  308. endif
  309. neat: clean
  310. ifndef WINDOWS
  311. rm -f $(GENERATED_FILES)
  312. else
  313. for %f in ($(subst /,\,$(GENERATED_FILES))) if exist %f del /Q /F %f
  314. endif