1MBEDTLS_TEST_PATH = ../tests
2FRAMEWORK = ${MBEDTLS_PATH}/framework
3include ../scripts/common.make
4
5ifeq ($(shell uname -s),Linux)
6DLOPEN_LDFLAGS ?= -ldl
7else
8DLOPEN_LDFLAGS ?=
9endif
10
11ifdef RECORD_PSA_STATUS_COVERAGE_LOG
12LOCAL_CFLAGS += -Werror -DRECORD_PSA_STATUS_COVERAGE_LOG
13endif
14DEP=${MBEDLIBS} ${MBEDTLS_TEST_OBJS}
15
16# Only build the dlopen test in shared library builds, and not when building
17# for Windows.
18ifdef BUILD_DLOPEN
19# Don't override the value
20else ifdef WINDOWS_BUILD
21BUILD_DLOPEN =
22else ifdef SHARED
23BUILD_DLOPEN = y
24else
25BUILD_DLOPEN =
26endif
27
28LOCAL_CFLAGS += -I$(FRAMEWORK)/tests/programs
29
30## The following assignment is the list of base names of applications that
31## will be built on Windows. Extra Linux/Unix/POSIX-only applications can
32## be declared by appending with `APPS += ...` afterwards.
33## See the get_app_list function in scripts/generate_visualc_files.pl and
34## make sure to check that it still works if you tweak the format here.
35##
36## Note: Variables cannot be used to define an apps path. This cannot be
37## substituted by the script generate_visualc_files.pl.
38APPS = \
39	pkey/gen_key \
40	pkey/pk_sign \
41	pkey/pk_verify \
42	pkey/rsa_sign_pss \
43	pkey/rsa_verify_pss \
44	../tf-psa-crypto/programs/psa/aead_demo \
45	../tf-psa-crypto/programs/psa/crypto_examples \
46	../tf-psa-crypto/programs/psa/hmac_demo \
47	../tf-psa-crypto/programs/psa/key_ladder_demo \
48	../tf-psa-crypto/programs/psa/psa_constant_names \
49	../tf-psa-crypto/programs/psa/psa_hash \
50	../tf-psa-crypto/programs/test/which_aes \
51	ssl/dtls_client \
52	ssl/dtls_server \
53	ssl/mini_client \
54	ssl/ssl_client1 \
55	ssl/ssl_client2 \
56	ssl/ssl_context_info \
57	ssl/ssl_fork_server \
58	ssl/ssl_mail_client \
59	ssl/ssl_server \
60	ssl/ssl_server2 \
61	test/metatest \
62	test/query_compile_time_config \
63	test/query_included_headers \
64	test/selftest \
65	test/udp_proxy \
66	test/zeroize \
67	util/pem2der \
68	util/strerror \
69	x509/cert_app \
70	x509/cert_req \
71	x509/cert_write \
72	x509/crl_app \
73	x509/load_roots \
74	x509/req_app \
75# End of APPS
76
77ifeq ($(THREADING),pthread)
78APPS +=	ssl/ssl_pthread_server
79endif
80
81ifdef BUILD_DLOPEN
82APPS +=	test/dlopen
83endif
84
85ifdef TEST_CPP
86APPS += test/cpp_dummy_build
87endif
88
89EXES = $(patsubst %,%$(EXEXT),$(APPS))
90
91.SILENT:
92
93.PHONY: all clean list fuzz
94
95all: $(EXES)
96ifndef WINDOWS
97# APPS doesn't include the fuzzing programs, which aren't "normal"
98# sample or test programs, and don't build with MSVC which is
99# warning about fopen
100all: fuzz
101endif
102
103SSL_OPT_APPS = $(filter ssl/%,$(APPS))
104SSL_OPT_APPS += test/query_compile_time_config test/udp_proxy
105# Just the programs needed to run ssl-opt.sh (and compat.sh)
106ssl-opt: $(patsubst %,%$(EXEXT),$(SSL_OPT_APPS))
107.PHONY: ssl-opt
108
109fuzz: ${MBEDTLS_TEST_OBJS}
110	$(MAKE) -C fuzz
111
112${MBEDTLS_TEST_OBJS}:
113	$(MAKE) -C ../tests mbedtls_test
114
115.PHONY: generated_files
116GENERATED_FILES = ../tf-psa-crypto/programs/psa/psa_constant_names_generated.c test/query_config.c
117generated_files: $(GENERATED_FILES)
118
119../tf-psa-crypto/programs/psa/psa_constant_names_generated.c: $(gen_file_dep) ../tf-psa-crypto/scripts/generate_psa_constants.py
120../tf-psa-crypto/programs/psa/psa_constant_names_generated.c: $(gen_file_dep) ../tf-psa-crypto/include/psa/crypto_values.h
121../tf-psa-crypto/programs/psa/psa_constant_names_generated.c: $(gen_file_dep) ../tf-psa-crypto/include/psa/crypto_extra.h
122../tf-psa-crypto/programs/psa/psa_constant_names_generated.c: $(gen_file_dep) ../tf-psa-crypto/tests/suites/test_suite_psa_crypto_metadata.data
123../tf-psa-crypto/programs/psa/psa_constant_names_generated.c:
124	echo "  Gen   $@"
125	cd ../tf-psa-crypto; $(PYTHON) ./scripts/generate_psa_constants.py
126
127test/query_config.c: $(gen_file_dep) ../scripts/generate_query_config.pl
128## The generated file only depends on the options that are present in mbedtls_config.h,
129## not on which options are set. To avoid regenerating this file all the time
130## when switching between configurations, don't declare mbedtls_config.h as a
131## dependency. Remove this file from your working tree if you've just added or
132## removed an option in mbedtls_config.h.
133#test/query_config.c: $(gen_file_dep) ../include/mbedtls/mbedtls_config.h
134test/query_config.c: $(gen_file_dep) ../scripts/data_files/query_config.fmt
135test/query_config.c:
136	echo "  Gen   $@"
137	$(PERL) ../scripts/generate_query_config.pl
138
139pkey/gen_key$(EXEXT): pkey/gen_key.c $(DEP)
140	echo "  CC    pkey/gen_key.c"
141	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) pkey/gen_key.c   $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
142
143pkey/pk_sign$(EXEXT): pkey/pk_sign.c $(DEP)
144	echo "  CC    pkey/pk_sign.c"
145	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) pkey/pk_sign.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
146
147pkey/pk_verify$(EXEXT): pkey/pk_verify.c $(DEP)
148	echo "  CC    pkey/pk_verify.c"
149	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) pkey/pk_verify.c  $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
150
151pkey/rsa_sign_pss$(EXEXT): pkey/rsa_sign_pss.c $(DEP)
152	echo "  CC    pkey/rsa_sign_pss.c"
153	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) pkey/rsa_sign_pss.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
154
155pkey/rsa_verify_pss$(EXEXT): pkey/rsa_verify_pss.c $(DEP)
156	echo "  CC    pkey/rsa_verify_pss.c"
157	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) pkey/rsa_verify_pss.c  $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
158
159../tf-psa-crypto/programs/psa/aead_demo$(EXEXT): ../tf-psa-crypto/programs/psa/aead_demo.c $(DEP)
160	echo "  CC    psa/aead_demo.c"
161	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) ../tf-psa-crypto/programs/psa/aead_demo.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
162
163../tf-psa-crypto/programs/psa/crypto_examples$(EXEXT): ../tf-psa-crypto/programs/psa/crypto_examples.c $(DEP)
164	echo "  CC    psa/crypto_examples.c"
165	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) ../tf-psa-crypto/programs/psa/crypto_examples.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
166
167../tf-psa-crypto/programs/psa/hmac_demo$(EXEXT): ../tf-psa-crypto/programs/psa/hmac_demo.c $(DEP)
168	echo "  CC    psa/hmac_demo.c"
169	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) ../tf-psa-crypto/programs/psa/hmac_demo.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
170
171../tf-psa-crypto/programs/psa/key_ladder_demo$(EXEXT): ../tf-psa-crypto/programs/psa/key_ladder_demo.c $(DEP)
172	echo "  CC    psa/key_ladder_demo.c"
173	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) ../tf-psa-crypto/programs/psa/key_ladder_demo.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
174
175../tf-psa-crypto/programs/psa/psa_constant_names$(EXEXT): ../tf-psa-crypto/programs/psa/psa_constant_names.c ../tf-psa-crypto/programs/psa/psa_constant_names_generated.c $(DEP)
176	echo "  CC    psa/psa_constant_names.c"
177	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) ../tf-psa-crypto/programs/psa/psa_constant_names.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
178
179../tf-psa-crypto/programs/psa/psa_hash$(EXEXT): ../tf-psa-crypto/programs/psa/psa_hash.c $(DEP)
180	echo "  CC    psa/psa_hash.c"
181	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) ../tf-psa-crypto/programs/psa/psa_hash.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
182
183../tf-psa-crypto/programs/test/which_aes$(EXEXT): ../tf-psa-crypto/programs/test/which_aes.c $(DEP)
184	echo "  CC    test/which_aes.c"
185	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) ../tf-psa-crypto/programs/test/which_aes.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
186
187ssl/dtls_client$(EXEXT): ssl/dtls_client.c $(DEP)
188	echo "  CC    ssl/dtls_client.c"
189	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) ssl/dtls_client.c  $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
190
191ssl/dtls_server$(EXEXT): ssl/dtls_server.c $(DEP)
192	echo "  CC    ssl/dtls_server.c"
193	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) ssl/dtls_server.c  $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
194
195ssl/ssl_client1$(EXEXT): ssl/ssl_client1.c $(DEP)
196	echo "  CC    ssl/ssl_client1.c"
197	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) ssl/ssl_client1.c  $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
198
199SSL_TEST_OBJECTS = test/query_config.o ssl/ssl_test_lib.o
200SSL_TEST_DEPS = $(SSL_TEST_OBJECTS) \
201		$(FRAMEWORK)/tests/programs/query_config.h \
202		ssl/ssl_test_lib.h \
203		ssl/ssl_test_common_source.c \
204		$(DEP)
205
206ssl/ssl_test_lib.o: ssl/ssl_test_lib.c ssl/ssl_test_lib.h $(DEP)
207	echo "  CC    ssl/ssl_test_lib.c"
208	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) -c ssl/ssl_test_lib.c -o $@
209
210ssl/ssl_client2$(EXEXT): ssl/ssl_client2.c $(SSL_TEST_DEPS)
211	echo "  CC    ssl/ssl_client2.c"
212	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) ssl/ssl_client2.c $(SSL_TEST_OBJECTS) $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
213
214ssl/ssl_server$(EXEXT): ssl/ssl_server.c $(DEP)
215	echo "  CC    ssl/ssl_server.c"
216	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) ssl/ssl_server.c   $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
217
218ssl/ssl_server2$(EXEXT): ssl/ssl_server2.c $(SSL_TEST_DEPS)
219	echo "  CC    ssl/ssl_server2.c"
220	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) ssl/ssl_server2.c $(SSL_TEST_OBJECTS) $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
221
222ssl/ssl_context_info$(EXEXT): ssl/ssl_context_info.c test/query_config.o $(FRAMEWORK)/tests/programs/query_config.h $(DEP)
223	echo "  CC    ssl/ssl_context_info.c"
224	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) ssl/ssl_context_info.c test/query_config.o $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
225
226ssl/ssl_fork_server$(EXEXT): ssl/ssl_fork_server.c $(DEP)
227	echo "  CC    ssl/ssl_fork_server.c"
228	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) ssl/ssl_fork_server.c   $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
229
230ssl/ssl_pthread_server$(EXEXT): ssl/ssl_pthread_server.c $(DEP)
231	echo "  CC    ssl/ssl_pthread_server.c"
232	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) ssl/ssl_pthread_server.c   $(LOCAL_LDFLAGS) -lpthread  $(LDFLAGS) -o $@
233
234ssl/ssl_mail_client$(EXEXT): ssl/ssl_mail_client.c $(DEP)
235	echo "  CC    ssl/ssl_mail_client.c"
236	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) ssl/ssl_mail_client.c   $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
237
238ssl/mini_client$(EXEXT): ssl/mini_client.c $(DEP)
239	echo "  CC    ssl/mini_client.c"
240	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) ssl/mini_client.c   $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
241
242test/cpp_dummy_build.cpp: test/generate_cpp_dummy_build.sh
243	echo "  Gen   test/cpp_dummy_build.cpp"
244	test/generate_cpp_dummy_build.sh
245
246test/cpp_dummy_build$(EXEXT): test/cpp_dummy_build.cpp $(DEP)
247	echo "  CXX   test/cpp_dummy_build.cpp"
248	$(CXX) $(LOCAL_CXXFLAGS) $(CXXFLAGS) test/cpp_dummy_build.cpp   $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
249
250ifdef BUILD_DLOPEN
251test/dlopen$(EXEXT): test/dlopen.c $(DEP)
252	echo "  CC    test/dlopen.c"
253# Do not link any test objects (that would bring in a static dependency on
254# libmbedcrypto at least). Do not link with libmbed* (that would defeat the
255# purpose of testing dynamic loading).
256	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) test/dlopen.c $(LDFLAGS) $(DLOPEN_LDFLAGS) -o $@
257endif
258
259test/metatest$(EXEXT): $(FRAMEWORK)/tests/programs/metatest.c $(DEP)
260	echo "  CC    $(FRAMEWORK)/tests/programs/metatest.c"
261	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) -I../library -I../tf-psa-crypto/core $(FRAMEWORK)/tests/programs/metatest.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
262
263test/query_config.o: test/query_config.c $(FRAMEWORK)/tests/programs/query_config.h $(DEP)
264	echo "  CC    test/query_config.c"
265	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) -c test/query_config.c -o $@
266
267test/query_included_headers$(EXEXT): $(FRAMEWORK)/tests/programs/query_included_headers.c $(DEP)
268	echo "  CC    $(FRAMEWORK)/tests/programs/query_included_headers.c"
269	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) $(FRAMEWORK)/tests/programs/query_included_headers.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
270
271test/selftest$(EXEXT): test/selftest.c $(DEP)
272	echo "  CC    test/selftest.c"
273	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) test/selftest.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
274
275test/udp_proxy$(EXEXT): test/udp_proxy.c $(DEP)
276	echo "  CC    test/udp_proxy.c"
277	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) test/udp_proxy.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
278
279test/zeroize$(EXEXT): $(FRAMEWORK)/tests/programs/zeroize.c $(DEP)
280	echo "  CC    $(FRAMEWORK)/tests/programs/zeroize.c"
281	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) $(FRAMEWORK)/tests/programs/zeroize.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
282
283test/query_compile_time_config$(EXEXT): $(FRAMEWORK)/tests/programs/query_compile_time_config.c test/query_config.o $(FRAMEWORK)/tests/programs/query_config.h $(DEP)
284	echo "  CC    $(FRAMEWORK)/tests/programs/query_compile_time_config.c"
285	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) $(FRAMEWORK)/tests/programs/query_compile_time_config.c test/query_config.o $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
286
287util/pem2der$(EXEXT): util/pem2der.c $(DEP)
288	echo "  CC    util/pem2der.c"
289	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) util/pem2der.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
290
291util/strerror$(EXEXT): util/strerror.c $(DEP)
292	echo "  CC    util/strerror.c"
293	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) util/strerror.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
294
295x509/cert_app$(EXEXT): x509/cert_app.c $(DEP)
296	echo "  CC    x509/cert_app.c"
297	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) x509/cert_app.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
298
299x509/cert_write$(EXEXT): x509/cert_write.c $(DEP)
300	echo "  CC    x509/cert_write.c"
301	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) x509/cert_write.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
302
303x509/crl_app$(EXEXT): x509/crl_app.c $(DEP)
304	echo "  CC    x509/crl_app.c"
305	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) x509/crl_app.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
306
307x509/cert_req$(EXEXT): x509/cert_req.c $(DEP)
308	echo "  CC    x509/cert_req.c"
309	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) x509/cert_req.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
310
311x509/load_roots$(EXEXT): x509/load_roots.c $(DEP)
312	echo "  CC    x509/load_roots.c"
313	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) x509/load_roots.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
314
315x509/req_app$(EXEXT): x509/req_app.c $(DEP)
316	echo "  CC    x509/req_app.c"
317	$(CC) $(LOCAL_CFLAGS) $(CFLAGS) x509/req_app.c    $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@
318
319clean:
320ifndef WINDOWS
321	rm -f $(EXES)
322	rm -f */*.o
323	-rm -f ssl/ssl_pthread_server$(EXEXT)
324	-rm -f test/cpp_dummy_build.cpp test/cpp_dummy_build$(EXEXT)
325	-rm -f test/dlopen$(EXEXT)
326else
327	if exist *.o del /Q /F *.o
328	if exist *.exe del /Q /F *.exe
329	if exist test\cpp_dummy_build.cpp del /Q /F test\cpp_dummy_build.cpp
330endif
331	$(MAKE) -C fuzz clean
332
333list:
334	echo $(EXES)
335