# Helper code for the make build system in Mbed TLS: define some variables # providing information such as file paths. # This file is only meant to exist for a short transition period. # It may change or be removed without notice. # Do not use it if you are not Mbed TLS! # Assume that this makefile is located in a first-level subdirectory of the # Mbed TLS root, and is accessed directly (not via VPATH or such). # If this is not the case, TF_PSA_CRYPTO_PATH or MBEDTLS_PATH must be defined # before including this file. ifneq ($(origin TF_PSA_CRYPTO_PATH), undefined) # TF_PSA_CRYPTO_PATH was defined before including this file, good. else ifneq ($(origin MBEDTLS_PATH), undefined) TF_PSA_CRYPTO_PATH := $(MBEDTLS_PATH)/tf-psa-crypto else # $(dir $(lastword $(MAKEFILE_LIST))) is the path to this file, possibly # a relative path, with a trailing slash. Strip off another directory # from that. TF_PSA_CRYPTO_PATH := $(patsubst %/,%,$(dir $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST))))))/tf-psa-crypto endif ifeq (,$(wildcard $(TF_PSA_CRYPTO_PATH)/core/psa_crypto.c)) $(error $$(TF_PSA_CRYPTO_PATH)/core/psa_crypto.c not found) endif TF_PSA_CRYPTO_CORE_PATH = $(TF_PSA_CRYPTO_PATH)/core TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_PATH = $(TF_PSA_CRYPTO_PATH)/drivers/builtin/src # Gather information about crypto drivers that are separate from the main # "builtin" driver (historically located in /3rdparty in Mbed TLS 2.x/3.x). THIRDPARTY_DIR := $(TF_PSA_CRYPTO_PATH)/drivers THIRDPARTY_INCLUDES = include $(TF_PSA_CRYPTO_PATH)/drivers/everest/Makefile.inc include $(TF_PSA_CRYPTO_PATH)/drivers/p256-m/Makefile.inc # Directories with headers of public interfaces of TF-PSA-Crypto TF_PSA_CRYPTO_LIBRARY_PUBLIC_INCLUDE = \ -I$(TF_PSA_CRYPTO_PATH)/include \ -I$(TF_PSA_CRYPTO_PATH)/drivers/builtin/include \ $(THIRDPARTY_INCLUDES) # Directories with headers of internal interfaces of TF-PSA-Crypto # (currently consumed by Mbed TLS, eventually not so when we've finished # cleaning up) TF_PSA_CRYPTO_LIBRARY_PRIVATE_INCLUDE = \ -I$(TF_PSA_CRYPTO_CORE_PATH) \ -I$(TF_PSA_CRYPTO_DRIVERS_BUILTIN_SRC_PATH) # Extra linker flags required by the crypto library or the platform TF_PSA_CRYPTO_EXTRA_LDFLAGS = ## Usage: $(call remove_enabled_options_crypto,PREPROCESSOR_INPUT) ## Remove the preprocessor symbols that are set in the current configuration ## from PREPROCESSOR_INPUT. Also normalize whitespace. ## Example: ## $(call remove_enabled_options_crypto,MBEDTLS_FOO MBEDTLS_BAR) ## This expands to an empty string "" if MBEDTLS_FOO and MBEDTLS_BAR are both ## enabled in the TF-PSA-Crypto configuration, to "MBEDTLS_FOO" if ## MBEDTLS_BAR is enabled but MBEDTLS_FOO is disabled, etc. ## ## This only works with a Unix-like shell environment (Bourne/POSIX-style shell ## and standard commands) and a Unix-like compiler (supporting -E). In ## other environments, the output is likely to be empty. define remove_enabled_options_crypto $(strip $(shell exec 2>/dev/null; { echo '#include '; echo $(1); } | $(CC) $(TF_PSA_CRYPTO_LIBRARY_PUBLIC_INCLUDE) $(CFLAGS) -E - | tail -n 1 )) endef # Ensure that `THREADING` is always defined. This lets us get a clean run # with `make --warn-undefined-variables` without making the conditionals # below more complex than they already are. At this stage, if `$(THREADING)` # is empty, it means we don't know yet whether the threading implementation # requires extra `LDFLAGS`. Once we've done the analysis, if `$(THREADING)` # is empty, it will mean that no extra `LDFLAGS` are required, either # because threading is disabled or because the threading implementation # doesn't require any extra `LDFLAGS`. THREADING ?= ifndef WINDOWS_BUILD ifeq ($(THREADING),) # Auto-detect configurations with pthread. # If the call to remove_enabled_options returns "control", the symbols # are confirmed set and we link with pthread. # If the auto-detection fails, the result of the call is empty and # we keep THREADING undefined. ifeq (control,$(call remove_enabled_options_crypto,control MBEDTLS_THREADING_C MBEDTLS_THREADING_PTHREAD)) THREADING := pthread endif endif #$(info THREADING = $(THREADING)) ifeq ($(THREADING),pthread) TF_PSA_CRYPTO_EXTRA_LDFLAGS += -lpthread endif endif