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