1# To compile on SunOS: add "-lsocket -lnsl" to LDFLAGS 2 3ifndef MBEDTLS_PATH 4MBEDTLS_PATH := .. 5endif 6 7ifeq (,$(wildcard $(MBEDTLS_PATH)/framework/exported.make)) 8 # Use the define keyword to get a multi-line message. 9 # GNU make appends ". Stop.", so tweak the ending of our message accordingly. 10 define error_message 11$(MBEDTLS_PATH)/framework/exported.make not found. 12Run `git submodule update --init` to fetch the submodule contents. 13This is a fatal error 14 endef 15 $(error $(error_message)) 16endif 17include $(MBEDTLS_PATH)/framework/exported.make 18 19CFLAGS ?= -O2 20WARNING_CFLAGS ?= -Wall -Wextra -Wformat=2 -Wno-format-nonliteral 21WARNING_CXXFLAGS ?= -Wall -Wextra -Wformat=2 -Wno-format-nonliteral 22LDFLAGS ?= 23 24LOCAL_CFLAGS = $(WARNING_CFLAGS) -I$(MBEDTLS_TEST_PATH)/include -I$(MBEDTLS_PATH)/include -D_FILE_OFFSET_BITS=64 25LOCAL_CXXFLAGS = $(WARNING_CXXFLAGS) -I$(MBEDTLS_PATH)/include -I$(MBEDTLS_PATH)/tests/include -D_FILE_OFFSET_BITS=64 26LOCAL_LDFLAGS = ${MBEDTLS_TEST_OBJS} \ 27 -L$(MBEDTLS_PATH)/library \ 28 -lmbedtls$(SHARED_SUFFIX) \ 29 -lmbedx509$(SHARED_SUFFIX) \ 30 -lmbedcrypto$(SHARED_SUFFIX) 31 32include $(MBEDTLS_PATH)/3rdparty/Makefile.inc 33LOCAL_CFLAGS+=$(THIRDPARTY_INCLUDES) 34 35ifndef SHARED 36MBEDLIBS=$(MBEDTLS_PATH)/library/libmbedcrypto.a $(MBEDTLS_PATH)/library/libmbedx509.a $(MBEDTLS_PATH)/library/libmbedtls.a 37else 38MBEDLIBS=$(MBEDTLS_PATH)/library/libmbedcrypto.$(DLEXT) $(MBEDTLS_PATH)/library/libmbedx509.$(DLEXT) $(MBEDTLS_PATH)/library/libmbedtls.$(DLEXT) 39endif 40 41ifdef DEBUG 42LOCAL_CFLAGS += -g3 43endif 44 45# if we're running on Windows, build for Windows 46ifdef WINDOWS 47WINDOWS_BUILD=1 48endif 49 50## Usage: $(call remove_enabled_options,PREPROCESSOR_INPUT) 51## Remove the preprocessor symbols that are set in the current configuration 52## from PREPROCESSOR_INPUT. Also normalize whitespace. 53## Example: 54## $(call remove_enabled_options,MBEDTLS_FOO MBEDTLS_BAR) 55## This expands to an empty string "" if MBEDTLS_FOO and MBEDTLS_BAR are both 56## enabled, to "MBEDTLS_FOO" if MBEDTLS_BAR is enabled but MBEDTLS_FOO is 57## disabled, etc. 58## 59## This only works with a Unix-like shell environment (Bourne/POSIX-style shell 60## and standard commands) and a Unix-like compiler (supporting -E). In 61## other environments, the output is likely to be empty. 62define remove_enabled_options 63$(strip $(shell 64 exec 2>/dev/null; 65 { echo '#include <mbedtls/build_info.h>'; echo $(1); } | 66 $(CC) $(LOCAL_CFLAGS) $(CFLAGS) -E - | 67 tail -n 1 68)) 69endef 70 71ifdef WINDOWS_BUILD 72 DLEXT=dll 73 EXEXT=.exe 74 LOCAL_LDFLAGS += -lws2_32 -lbcrypt 75 ifdef SHARED 76 SHARED_SUFFIX=.$(DLEXT) 77 endif 78 79else # Not building for Windows 80 DLEXT ?= so 81 EXEXT= 82 SHARED_SUFFIX= 83 ifndef THREADING 84 # Auto-detect configurations with pthread. 85 # If the call to remove_enabled_options returns "control", the symbols 86 # are confirmed set and we link with pthread. 87 # If the auto-detection fails, the result of the call is empty and 88 # we keep THREADING undefined. 89 ifeq (control,$(call remove_enabled_options,control MBEDTLS_THREADING_C MBEDTLS_THREADING_PTHREAD)) 90 THREADING := pthread 91 endif 92 endif 93 94 ifeq ($(THREADING),pthread) 95 LOCAL_LDFLAGS += -lpthread 96 endif 97endif 98 99ifdef WINDOWS 100PYTHON ?= python 101else 102PYTHON ?= $(shell if type python3 >/dev/null 2>/dev/null; then echo python3; else echo python; fi) 103endif 104 105# See root Makefile 106GEN_FILES ?= yes 107ifdef GEN_FILES 108gen_file_dep = 109else 110gen_file_dep = | 111endif 112 113default: all 114 115$(MBEDLIBS): 116 $(MAKE) -C $(MBEDTLS_PATH)/library 117 118neat: clean 119ifndef WINDOWS 120 rm -f $(GENERATED_FILES) 121else 122 for %f in ($(subst /,\,$(GENERATED_FILES))) if exist %f del /Q /F %f 123endif 124 125# Auxiliary modules used by tests and some sample programs 126MBEDTLS_CORE_TEST_OBJS = $(patsubst %.c,%.o,$(wildcard \ 127 ${MBEDTLS_TEST_PATH}/src/*.c \ 128 ${MBEDTLS_TEST_PATH}/src/drivers/*.c \ 129 )) 130# Additional auxiliary modules for TLS testing 131MBEDTLS_TLS_TEST_OBJS = $(patsubst %.c,%.o,$(wildcard \ 132 ${MBEDTLS_TEST_PATH}/src/test_helpers/*.c \ 133 )) 134 135MBEDTLS_TEST_OBJS = $(MBEDTLS_CORE_TEST_OBJS) $(MBEDTLS_TLS_TEST_OBJS) 136