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