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