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