blob: 644c44e8f50d7711f2a3f89eb67bfc32f2b98efc [file] [log] [blame]
Gilles Peskinef3d1ae12023-12-22 11:40:58 +01001# To compile on SunOS: add "-lsocket -lnsl" to LDFLAGS
2
Paul Elliott7ed1cf52024-01-05 18:10:44 +00003ifndef MBEDTLS_PATH
4MBEDTLS_PATH := ..
5endif
6
Valerio Setti09172652024-06-27 08:00:54 +02007PSASIM_PATH=$(MBEDTLS_PATH)/tests/psa-client-server/psasim
8
Gilles Peskinef9bbe0d2024-03-04 16:25:14 +01009ifeq (,$(wildcard $(MBEDTLS_PATH)/framework/exported.make))
10 # Use the define keyword to get a multi-line message.
11 # GNU make appends ". Stop.", so tweak the ending of our message accordingly.
12 define error_message
13$(MBEDTLS_PATH)/framework/exported.make not found.
14Run `git submodule update --init` to fetch the submodule contents.
15This is a fatal error
16 endef
17 $(error $(error_message))
18endif
Gilles Peskine469f7812024-02-29 18:19:56 +010019include $(MBEDTLS_PATH)/framework/exported.make
20
Gilles Peskinef3d1ae12023-12-22 11:40:58 +010021CFLAGS ?= -O2
22WARNING_CFLAGS ?= -Wall -Wextra -Wformat=2 -Wno-format-nonliteral
Gilles Peskine62ee8fd2024-06-06 22:12:06 +020023WARNING_CXXFLAGS ?= -Wall -Wextra -Wformat=2 -Wno-format-nonliteral -std=c++11 -pedantic
Gilles Peskinef3d1ae12023-12-22 11:40:58 +010024LDFLAGS ?=
25
Ronald Cron3d817ad2024-06-14 08:43:28 +020026LOCAL_CFLAGS = $(WARNING_CFLAGS) -I$(MBEDTLS_TEST_PATH)/include \
27 -I$(MBEDTLS_PATH)/include -I$(MBEDTLS_PATH)/tf-psa-crypto/include \
28 -I$(MBEDTLS_PATH)/tf-psa-crypto/drivers/builtin/include \
29 -D_FILE_OFFSET_BITS=64
Paul Elliott7ed1cf52024-01-05 18:10:44 +000030LOCAL_CXXFLAGS = $(WARNING_CXXFLAGS) -I$(MBEDTLS_PATH)/include -I$(MBEDTLS_PATH)/tests/include -D_FILE_OFFSET_BITS=64
Valerio Setti09172652024-06-27 08:00:54 +020031
32ifdef PSASIM
33LOCAL_LDFLAGS = ${MBEDTLS_TEST_OBJS} \
34 -L$(PSASIM_PATH)/client_libs \
35 -lpsaclient \
36 -lmbedtls$(SHARED_SUFFIX) \
37 -lmbedx509$(SHARED_SUFFIX) \
38 -lmbedcrypto$(SHARED_SUFFIX)
39else
Gilles Peskinef3d1ae12023-12-22 11:40:58 +010040LOCAL_LDFLAGS = ${MBEDTLS_TEST_OBJS} \
Paul Elliott7ed1cf52024-01-05 18:10:44 +000041 -L$(MBEDTLS_PATH)/library \
Gilles Peskinef3d1ae12023-12-22 11:40:58 +010042 -lmbedtls$(SHARED_SUFFIX) \
43 -lmbedx509$(SHARED_SUFFIX) \
44 -lmbedcrypto$(SHARED_SUFFIX)
Valerio Setti09172652024-06-27 08:00:54 +020045endif
Gilles Peskine076fd252023-12-22 11:45:53 +010046
Ronald Cronaef8cf32024-07-01 18:33:24 +020047THIRDPARTY_DIR = $(MBEDTLS_PATH)/tf-psa-crypto/drivers
Ronald Cronf250cf62024-07-04 09:43:13 +020048include $(THIRDPARTY_DIR)/everest/Makefile.inc
49include $(THIRDPARTY_DIR)/p256-m/Makefile.inc
Gilles Peskine076fd252023-12-22 11:45:53 +010050LOCAL_CFLAGS+=$(THIRDPARTY_INCLUDES)
51
Valerio Setti09172652024-06-27 08:00:54 +020052ifdef PSASIM
53MBEDLIBS=$(PSASIM_PATH)/client_libs/libmbedcrypto.a \
54 $(PSASIM_PATH)/client_libs/libmbedx509.a \
55 $(PSASIM_PATH)/client_libs/libmbedtls.a \
56 $(PSASIM_PATH)/client_libs/libpsaclient.a
57else ifndef SHARED
58MBEDLIBS=$(MBEDTLS_PATH)/library/libmbedcrypto.a \
59 $(MBEDTLS_PATH)/library/libmbedx509.a \
60 $(MBEDTLS_PATH)/library/libmbedtls.a
Gilles Peskine076fd252023-12-22 11:45:53 +010061else
Valerio Setti09172652024-06-27 08:00:54 +020062MBEDLIBS=$(MBEDTLS_PATH)/library/libmbedcrypto.$(DLEXT) \
63 $(MBEDTLS_PATH)/library/libmbedx509.$(DLEXT) \
64 $(MBEDTLS_PATH)/library/libmbedtls.$(DLEXT)
Gilles Peskine076fd252023-12-22 11:45:53 +010065endif
66
67ifdef DEBUG
68LOCAL_CFLAGS += -g3
69endif
70
71# if we're running on Windows, build for Windows
72ifdef WINDOWS
73WINDOWS_BUILD=1
74endif
75
Gilles Peskinef3316f12023-12-22 18:30:37 +010076## Usage: $(call remove_enabled_options,PREPROCESSOR_INPUT)
77## Remove the preprocessor symbols that are set in the current configuration
Gilles Peskine21570cf2023-12-22 11:49:50 +010078## from PREPROCESSOR_INPUT. Also normalize whitespace.
79## Example:
Gilles Peskinecd06a812024-01-02 18:14:40 +010080## $(call remove_enabled_options,MBEDTLS_FOO MBEDTLS_BAR)
Gilles Peskine21570cf2023-12-22 11:49:50 +010081## This expands to an empty string "" if MBEDTLS_FOO and MBEDTLS_BAR are both
Gilles Peskinef3316f12023-12-22 18:30:37 +010082## enabled, to "MBEDTLS_FOO" if MBEDTLS_BAR is enabled but MBEDTLS_FOO is
Gilles Peskine21570cf2023-12-22 11:49:50 +010083## disabled, etc.
84##
85## This only works with a Unix-like shell environment (Bourne/POSIX-style shell
86## and standard commands) and a Unix-like compiler (supporting -E). In
87## other environments, the output is likely to be empty.
Gilles Peskinef3316f12023-12-22 18:30:37 +010088define remove_enabled_options
Gilles Peskine21570cf2023-12-22 11:49:50 +010089$(strip $(shell
90 exec 2>/dev/null;
91 { echo '#include <mbedtls/build_info.h>'; echo $(1); } |
92 $(CC) $(LOCAL_CFLAGS) $(CFLAGS) -E - |
93 tail -n 1
94))
95endef
96
Gilles Peskine076fd252023-12-22 11:45:53 +010097ifdef WINDOWS_BUILD
98 DLEXT=dll
99 EXEXT=.exe
100 LOCAL_LDFLAGS += -lws2_32 -lbcrypt
101 ifdef SHARED
102 SHARED_SUFFIX=.$(DLEXT)
103 endif
104
105else # Not building for Windows
106 DLEXT ?= so
107 EXEXT=
108 SHARED_SUFFIX=
Gilles Peskine21570cf2023-12-22 11:49:50 +0100109 ifndef THREADING
110 # Auto-detect configurations with pthread.
Gilles Peskinef3316f12023-12-22 18:30:37 +0100111 # If the call to remove_enabled_options returns "control", the symbols
Gilles Peskine2337a3b2023-12-22 13:25:18 +0100112 # are confirmed set and we link with pthread.
113 # If the auto-detection fails, the result of the call is empty and
114 # we keep THREADING undefined.
Gilles Peskinef3316f12023-12-22 18:30:37 +0100115 ifeq (control,$(call remove_enabled_options,control MBEDTLS_THREADING_C MBEDTLS_THREADING_PTHREAD))
Gilles Peskine21570cf2023-12-22 11:49:50 +0100116 THREADING := pthread
117 endif
118 endif
Gilles Peskine076fd252023-12-22 11:45:53 +0100119
120 ifeq ($(THREADING),pthread)
121 LOCAL_LDFLAGS += -lpthread
122 endif
123endif
124
125ifdef WINDOWS
126PYTHON ?= python
127else
128PYTHON ?= $(shell if type python3 >/dev/null 2>/dev/null; then echo python3; else echo python; fi)
129endif
130
131# See root Makefile
132GEN_FILES ?= yes
133ifdef GEN_FILES
134gen_file_dep =
135else
136gen_file_dep = |
137endif
Gilles Peskine4392fc12023-12-22 11:49:35 +0100138
139default: all
140
141$(MBEDLIBS):
Paul Elliott7ed1cf52024-01-05 18:10:44 +0000142 $(MAKE) -C $(MBEDTLS_PATH)/library
Gilles Peskine4392fc12023-12-22 11:49:35 +0100143
144neat: clean
145ifndef WINDOWS
146 rm -f $(GENERATED_FILES)
147else
148 for %f in ($(subst /,\,$(GENERATED_FILES))) if exist %f del /Q /F %f
149endif
Gilles Peskine0ae58dd2024-01-02 23:11:24 +0100150
151# Auxiliary modules used by tests and some sample programs
Valerio Setti09172652024-06-27 08:00:54 +0200152MBEDTLS_CORE_TEST_OBJS := $(patsubst %.c,%.o,$(wildcard \
Gilles Peskine0ae58dd2024-01-02 23:11:24 +0100153 ${MBEDTLS_TEST_PATH}/src/*.c \
154 ${MBEDTLS_TEST_PATH}/src/drivers/*.c \
155 ))
Valerio Setti09172652024-06-27 08:00:54 +0200156# Ignore PSA stubs when building for the client side of PSASIM (i.e.
157# CRYPTO_CLIENT && !CRYPTO_C) otherwise there will be functions duplicates.
158ifdef PSASIM
159MBEDTLS_CORE_TEST_OBJS := $(filter-out \
160 ${MBEDTLS_TEST_PATH}/src/psa_crypto_stubs.o, $(MBEDTLS_CORE_TEST_OBJS)\
161 )
162endif
Gilles Peskine0ae58dd2024-01-02 23:11:24 +0100163# Additional auxiliary modules for TLS testing
164MBEDTLS_TLS_TEST_OBJS = $(patsubst %.c,%.o,$(wildcard \
165 ${MBEDTLS_TEST_PATH}/src/test_helpers/*.c \
166 ))
167
168MBEDTLS_TEST_OBJS = $(MBEDTLS_CORE_TEST_OBJS) $(MBEDTLS_TLS_TEST_OBJS)