summaryrefslogtreecommitdiff
path: root/library/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'library/Makefile')
-rw-r--r--library/Makefile403
1 files changed, 403 insertions, 0 deletions
diff --git a/library/Makefile b/library/Makefile
new file mode 100644
index 00000000000..a5e023e1782
--- /dev/null
+++ b/library/Makefile
@@ -0,0 +1,403 @@
+ifndef MBEDTLS_PATH
+MBEDTLS_PATH := ..
+endif
+
+GENERATED_FILES := \
+ error.c version_features.c \
+ ssl_debug_helpers_generated.c \
+ psa_crypto_driver_wrappers.h \
+ psa_crypto_driver_wrappers_no_static.c
+
+ifneq ($(GENERATED_FILES),$(wildcard $(GENERATED_FILES)))
+ ifeq (,$(wildcard $(MBEDTLS_PATH)/framework/exported.make))
+ # Use the define keyword to get a multi-line message.
+ # GNU make appends ". Stop.", so tweak the ending of our message accordingly.
+ define error_message
+$(MBEDTLS_PATH)/framework/exported.make not found.
+Run `git submodule update --init` to fetch the submodule contents.
+This is a fatal error
+ endef
+ $(error $(error_message))
+ endif
+ include $(MBEDTLS_PATH)/framework/exported.make
+endif
+
+# Also see "include/mbedtls/mbedtls_config.h"
+
+CFLAGS ?= -O2
+WARNING_CFLAGS ?= -Wall -Wextra -Wformat=2 -Wno-format-nonliteral
+LDFLAGS ?=
+
+# Include ../include for public headers and . for private headers.
+# Note that . needs to be included explicitly for the sake of library
+# files that are not in the /library directory (which currently means
+# under /3rdparty).
+LOCAL_CFLAGS = $(WARNING_CFLAGS) -I. -I../include -D_FILE_OFFSET_BITS=64
+LOCAL_LDFLAGS =
+
+ifdef DEBUG
+LOCAL_CFLAGS += -g3
+endif
+
+# MicroBlaze specific options:
+# CFLAGS += -mno-xl-soft-mul -mxl-barrel-shift
+
+# To compile on Plan9:
+# CFLAGS += -D_BSD_EXTENSION
+
+PERL ?= perl
+
+ifdef WINDOWS
+PYTHON ?= python
+else
+PYTHON ?= $(shell if type python3 >/dev/null 2>/dev/null; then echo python3; else echo python; fi)
+endif
+
+# if were running on Windows build for Windows
+ifdef WINDOWS
+WINDOWS_BUILD=1
+else ifeq ($(shell uname -s),Darwin)
+ifeq ($(AR),ar)
+APPLE_BUILD ?= 1
+endif
+endif
+
+ifdef WINDOWS_BUILD
+LOCAL_LDFLAGS += -lbcrypt
+endif
+
+# To compile as a shared library:
+ifdef SHARED
+# all code is position-indep with mingw, avoid warning about useless flag
+ifndef WINDOWS_BUILD
+LOCAL_CFLAGS += -fPIC -fpic
+endif
+endif
+
+SOEXT_TLS?=so.21
+SOEXT_X509?=so.7
+SOEXT_CRYPTO?=so.16
+
+# Set AR_DASH= (empty string) to use an ar implementation that does not accept
+# the - prefix for command line options (e.g. llvm-ar)
+AR_DASH ?= -
+
+ARFLAGS = $(AR_DASH)src
+ifdef APPLE_BUILD
+ifneq ($(APPLE_BUILD),0)
+ARFLAGS = $(AR_DASH)Src
+RLFLAGS = -no_warning_for_no_symbols -c
+RL ?= ranlib
+endif
+endif
+
+DLEXT ?= so
+ifdef WINDOWS_BUILD
+# Windows shared library extension:
+DLEXT = dll
+else ifdef APPLE_BUILD
+ifneq ($(APPLE_BUILD),0)
+# Mac OS X shared library extension:
+DLEXT = dylib
+endif
+endif
+
+OBJS_CRYPTO= \
+ aes.o \
+ aesni.o \
+ aesce.o \
+ aria.o \
+ asn1parse.o \
+ asn1write.o \
+ base64.o \
+ bignum.o \
+ bignum_core.o \
+ bignum_mod.o \
+ bignum_mod_raw.o \
+ block_cipher.o \
+ camellia.o \
+ ccm.o \
+ chacha20.o \
+ chachapoly.o \
+ cipher.o \
+ cipher_wrap.o \
+ cmac.o \
+ constant_time.o \
+ ctr_drbg.o \
+ des.o \
+ dhm.o \
+ ecdh.o \
+ ecdsa.o \
+ ecjpake.o \
+ ecp.o \
+ ecp_curves.o \
+ ecp_curves_new.o \
+ entropy.o \
+ entropy_poll.o \
+ error.o \
+ gcm.o \
+ hkdf.o \
+ hmac_drbg.o \
+ lmots.o \
+ lms.o \
+ md.o \
+ md5.o \
+ memory_buffer_alloc.o \
+ nist_kw.o \
+ oid.o \
+ padlock.o \
+ pem.o \
+ pk.o \
+ pk_ecc.o \
+ pk_wrap.o \
+ pkcs12.o \
+ pkcs5.o \
+ pkparse.o \
+ pkwrite.o \
+ platform.o \
+ platform_util.o \
+ poly1305.o \
+ psa_crypto.o \
+ psa_crypto_aead.o \
+ psa_crypto_cipher.o \
+ psa_crypto_client.o \
+ psa_crypto_driver_wrappers_no_static.o \
+ psa_crypto_ecp.o \
+ psa_crypto_ffdh.o \
+ psa_crypto_hash.o \
+ psa_crypto_mac.o \
+ psa_crypto_pake.o \
+ psa_crypto_rsa.o \
+ psa_crypto_se.o \
+ psa_crypto_slot_management.o \
+ psa_crypto_storage.o \
+ psa_its_file.o \
+ psa_util.o \
+ ripemd160.o \
+ rsa.o \
+ rsa_alt_helpers.o \
+ sha1.o \
+ sha256.o \
+ sha512.o \
+ sha3.o \
+ threading.o \
+ timing.o \
+ version.o \
+ version_features.o \
+ # This line is intentionally left blank
+
+include ../3rdparty/Makefile.inc
+LOCAL_CFLAGS+=$(THIRDPARTY_INCLUDES)
+OBJS_CRYPTO+=$(THIRDPARTY_CRYPTO_OBJECTS)
+
+OBJS_X509= \
+ x509.o \
+ x509_create.o \
+ x509_crl.o \
+ x509_crt.o \
+ x509_csr.o \
+ x509write.o \
+ x509write_crt.o \
+ x509write_csr.o \
+ pkcs7.o \
+ # This line is intentionally left blank
+
+OBJS_TLS= \
+ debug.o \
+ mps_reader.o \
+ mps_trace.o \
+ net_sockets.o \
+ ssl_cache.o \
+ ssl_ciphersuites.o \
+ ssl_client.o \
+ ssl_cookie.o \
+ ssl_debug_helpers_generated.o \
+ ssl_msg.o \
+ ssl_ticket.o \
+ ssl_tls.o \
+ ssl_tls12_client.o \
+ ssl_tls12_server.o \
+ ssl_tls13_keys.o \
+ ssl_tls13_client.o \
+ ssl_tls13_server.o \
+ ssl_tls13_generic.o \
+ # This line is intentionally left blank
+
+.SILENT:
+
+.PHONY: all static shared clean
+
+ifndef SHARED
+all: static
+else
+all: shared static
+endif
+
+static: libmbedcrypto.a libmbedx509.a libmbedtls.a
+ cd ../tests && echo "This is a seedfile that contains 64 bytes (65 on Windows)......" > seedfile
+
+shared: libmbedcrypto.$(DLEXT) libmbedx509.$(DLEXT) libmbedtls.$(DLEXT)
+
+# Windows builds under Mingw can fail if make tries to create archives in the same
+# directory at the same time - see https://bugs.launchpad.net/gcc-arm-embedded/+bug/1848002.
+# This forces builds of the .a files to be serialised.
+ifdef WINDOWS
+libmbedtls.a: | libmbedx509.a
+libmbedx509.a: | libmbedcrypto.a
+endif
+
+# tls
+libmbedtls.a: $(OBJS_TLS)
+ echo " AR $@"
+ $(AR) $(ARFLAGS) $@ $(OBJS_TLS)
+ifdef APPLE_BUILD
+ifneq ($(APPLE_BUILD),0)
+ echo " RL $@"
+ $(RL) $(RLFLAGS) $@
+endif
+endif
+
+libmbedtls.$(SOEXT_TLS): $(OBJS_TLS) libmbedx509.so
+ echo " LD $@"
+ $(CC) -shared -Wl,-soname,$@ -o $@ $(OBJS_TLS) -L. -lmbedx509 -lmbedcrypto $(LOCAL_LDFLAGS) $(LDFLAGS)
+
+ifneq ($(SOEXT_TLS),so)
+libmbedtls.so: libmbedtls.$(SOEXT_TLS)
+ echo " LN $@ -> $<"
+ ln -sf $< $@
+endif
+
+libmbedtls.dylib: $(OBJS_TLS) libmbedx509.dylib
+ echo " LD $@"
+ $(CC) -dynamiclib -o $@ $(OBJS_TLS) -L. -lmbedx509 -lmbedcrypto $(LOCAL_LDFLAGS) $(LDFLAGS)
+
+libmbedtls.dll: $(OBJS_TLS) libmbedx509.dll
+ echo " LD $@"
+ $(CC) -shared -Wl,-soname,$@ -Wl,--out-implib,[email protected] -o $@ $(OBJS_TLS) -lws2_32 -lwinmm -lgdi32 -L. -lmbedx509 -lmbedcrypto -static-libgcc $(LOCAL_LDFLAGS) $(LDFLAGS)
+
+# x509
+libmbedx509.a: $(OBJS_X509)
+ echo " AR $@"
+ $(AR) $(ARFLAGS) $@ $(OBJS_X509)
+ifdef APPLE_BUILD
+ifneq ($(APPLE_BUILD),0)
+ echo " RL $@"
+ $(RL) $(RLFLAGS) $@
+endif
+endif
+
+libmbedx509.$(SOEXT_X509): $(OBJS_X509) libmbedcrypto.so
+ echo " LD $@"
+ $(CC) -shared -Wl,-soname,$@ -o $@ $(OBJS_X509) -L. -lmbedcrypto $(LOCAL_LDFLAGS) $(LDFLAGS)
+
+ifneq ($(SOEXT_X509),so)
+libmbedx509.so: libmbedx509.$(SOEXT_X509)
+ echo " LN $@ -> $<"
+ ln -sf $< $@
+endif
+
+libmbedx509.dylib: $(OBJS_X509) libmbedcrypto.dylib
+ echo " LD $@"
+ $(CC) -dynamiclib -o $@ $(OBJS_X509) -L. -lmbedcrypto $(LOCAL_LDFLAGS) $(LDFLAGS)
+
+libmbedx509.dll: $(OBJS_X509) libmbedcrypto.dll
+ echo " LD $@"
+ $(CC) -shared -Wl,-soname,$@ -Wl,--out-implib,[email protected] -o $@ $(OBJS_X509) -lws2_32 -lwinmm -lgdi32 -L. -lmbedcrypto -static-libgcc $(LOCAL_LDFLAGS) $(LDFLAGS)
+
+# crypto
+libmbedcrypto.a: $(OBJS_CRYPTO)
+ echo " AR $@"
+ $(AR) $(ARFLAGS) $@ $(OBJS_CRYPTO)
+ifdef APPLE_BUILD
+ifneq ($(APPLE_BUILD),0)
+ echo " RL $@"
+ $(RL) $(RLFLAGS) $@
+endif
+endif
+
+libmbedcrypto.$(SOEXT_CRYPTO): $(OBJS_CRYPTO)
+ echo " LD $@"
+ $(CC) -shared -Wl,-soname,$@ -o $@ $(OBJS_CRYPTO) $(LOCAL_LDFLAGS) $(LDFLAGS)
+
+ifneq ($(SOEXT_CRYPTO),so)
+libmbedcrypto.so: libmbedcrypto.$(SOEXT_CRYPTO)
+ echo " LN $@ -> $<"
+ ln -sf $< $@
+endif
+
+libmbedcrypto.dylib: $(OBJS_CRYPTO)
+ echo " LD $@"
+ $(CC) -dynamiclib -o $@ $(OBJS_CRYPTO) $(LOCAL_LDFLAGS) $(LDFLAGS)
+
+libmbedcrypto.dll: $(OBJS_CRYPTO)
+ echo " LD $@"
+ $(CC) -shared -Wl,-soname,$@ -Wl,--out-implib,[email protected] -o $@ $(OBJS_CRYPTO) -lws2_32 -lwinmm -lgdi32 -static-libgcc $(LOCAL_LDFLAGS) $(LDFLAGS)
+
+.c.o:
+ echo " CC $<"
+ $(CC) $(LOCAL_CFLAGS) $(CFLAGS) -o $@ -c $<
+
+.PHONY: generated_files
+generated_files: $(GENERATED_FILES)
+
+# See root Makefile
+GEN_FILES ?=
+ifdef GEN_FILES
+gen_file_dep =
+else
+gen_file_dep = |
+endif
+
+error.c: $(gen_file_dep) ../scripts/generate_errors.pl
+error.c: $(gen_file_dep) ../scripts/data_files/error.fmt
+error.c: $(gen_file_dep) $(filter-out %config%,$(wildcard ../include/mbedtls/*.h))
+error.c:
+ echo " Gen $@"
+ $(PERL) ../scripts/generate_errors.pl
+
+ssl_debug_helpers_generated.c: $(gen_file_dep) ../scripts/generate_ssl_debug_helpers.py
+ssl_debug_helpers_generated.c: $(gen_file_dep) $(filter-out %config%,$(wildcard ../include/mbedtls/*.h))
+ssl_debug_helpers_generated.c:
+ echo " Gen $@"
+ $(PYTHON) ../scripts/generate_ssl_debug_helpers.py --mbedtls-root .. .
+
+version_features.c: $(gen_file_dep) ../scripts/generate_features.pl
+version_features.c: $(gen_file_dep) ../scripts/data_files/version_features.fmt
+## The generated file only depends on the options that are present in mbedtls_config.h,
+## not on which options are set. To avoid regenerating this file all the time
+## when switching between configurations, don't declare mbedtls_config.h as a
+## dependency. Remove this file from your working tree if you've just added or
+## removed an option in mbedtls_config.h.
+#version_features.c: ../include/mbedtls/mbedtls_config.h
+version_features.c:
+ echo " Gen $@"
+ $(PERL) ../scripts/generate_features.pl
+
+GENERATED_WRAPPER_FILES = \
+ psa_crypto_driver_wrappers.h \
+ psa_crypto_driver_wrappers_no_static.c
+$(GENERATED_WRAPPER_FILES): ../scripts/generate_driver_wrappers.py
+$(GENERATED_WRAPPER_FILES): ../scripts/data_files/driver_templates/psa_crypto_driver_wrappers.h.jinja
+$(GENERATED_WRAPPER_FILES): ../scripts/data_files/driver_templates/psa_crypto_driver_wrappers_no_static.c.jinja
+$(GENERATED_WRAPPER_FILES):
+ echo " Gen $(GENERATED_WRAPPER_FILES)"
+ $(PYTHON) ../scripts/generate_driver_wrappers.py
+
+psa_crypto.o:psa_crypto_driver_wrappers.h
+
+clean:
+ifndef WINDOWS
+ rm -f *.o libmbed*
+ rm -f $(THIRDPARTY_CRYPTO_OBJECTS)
+else
+ if exist *.o del /Q /F *.o
+ if exist libmbed* del /Q /F libmbed*
+ del /Q /F del_errors_out_if_the_file_list_is_empty_but_not_if_a_file_does_not_exist $(subst /,\,$(THIRDPARTY_CRYPTO_OBJECTS))
+endif
+
+neat: clean
+ifndef WINDOWS
+ rm -f $(GENERATED_FILES)
+else
+ for %f in ($(subst /,\,$(GENERATED_FILES))) if exist %f del /Q /F %f
+endif