1# 2# Copyright (c) 2020-2025, Arm Limited. All rights reserved. 3# 4# SPDX-License-Identifier: BSD-3-Clause 5# 6 7LIBEVLOG_PATH ?= contrib/libeventlog 8LIBEVLOG_NAME := eventlog 9 10LIBEVLOG_BUILD_DIR := $(BUILD_PLAT)/lib$(LIBEVLOG_NAME) 11LIBEVLOG_INSTALL_DIR := $(BUILD_PLAT)/$(LIBEVLOG_NAME)-install 12LIBEVLOG_TARGET := $(LIBEVLOG_INSTALL_DIR)/lib/lib$(LIBEVLOG_NAME).a 13 14ifeq ($(DEBUG),1) 15LIBEVLOG_BUILD_TYPE := Debug 16else 17LIBEVLOG_BUILD_TYPE := Release 18endif 19 20LIBEVLOG_LIBS := $(LIBEVLOG_TARGET) 21LIBEVLOG_INCLUDE_DIRS := $(LIBEVLOG_INSTALL_DIR)/include 22 23LIBEVLOG_DIRS_TO_CHECK += $(LIBEVLOG_INSTALL_DIR)/include 24 25# When using a TPM, adopt the TPM's hash algorithm for 26# measurements through the Event Log mechanism, ensuring 27# the TPM uses the same algorithm for measurements and 28# extends the PCR accordingly, allowing for comparison 29# between PCR value and Event Log measurements required 30# for attestation. 31ifdef MBOOT_TPM_HASH_ALG 32 MBOOT_EL_HASH_ALG := ${MBOOT_TPM_HASH_ALG} 33else 34 MBOOT_EL_HASH_ALG := sha256 35endif 36 37# Measured Boot hash algorithm. 38# SHA-256 (or stronger) is required for all devices that are TPM 2.0 compliant. 39ifeq (${MBOOT_EL_HASH_ALG}, sha512) 40 TPM_ALG_ID := TPM_ALG_SHA512 41 TCG_DIGEST_SIZE := 64U 42 CRYPTO_MD_ID := CRYPTO_MD_SHA512 43else ifeq (${MBOOT_EL_HASH_ALG}, sha384) 44 TPM_ALG_ID := TPM_ALG_SHA384 45 TCG_DIGEST_SIZE := 48U 46 CRYPTO_MD_ID := CRYPTO_MD_SHA384 47else 48 TPM_ALG_ID := TPM_ALG_SHA256 49 TCG_DIGEST_SIZE := 32U 50 CRYPTO_MD_ID := CRYPTO_MD_SHA256 51endif #MBOOT_EL_HASH_ALG 52 53# Set definitions for Measured Boot driver. 54$(eval $(call add_defines,\ 55 $(sort \ 56 TPM_ALG_ID \ 57 TCG_DIGEST_SIZE \ 58 EVENT_LOG_LEVEL \ 59 CRYPTO_MD_ID \ 60))) 61 62LIBEVLOG_CFLAGS ?= $(filter-out -I%,$(TF_CFLAGS)) 63LIBEVLOG_CFLAGS += $(patsubst %,-I%,$(call include-dirs,$(TF_CFLAGS))) 64 65$(LIBEVLOG_INSTALL_DIR)/% $(LIBEVLOG_INSTALL_DIR)/%/: $(LIBEVLOG_TARGET) ; 66$(LIBEVLOG_TARGET) $(LIBEVLOG_INSTALL_DIR)/ &: $(LIB_DIR)/libc.a 67 $(s)echo " CM $@" 68 $(q)cmake -S $(LIBEVLOG_PATH) -B $(LIBEVLOG_BUILD_DIR) \ 69 -DHASH_ALGORITHM=$(call uppercase,$(MBOOT_EL_HASH_ALG)) \ 70 -DCMAKE_BUILD_TYPE=$(LIBEVLOG_BUILD_TYPE) \ 71 -DCMAKE_SYSTEM_NAME=Generic \ 72 -DCMAKE_SYSTEM_VERSION= \ 73 -DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY \ 74 -DCMAKE_C_COMPILER=$(call shell-quote,$(call shell-join,$($(ARCH)-cc-program),;)) \ 75 -DCMAKE_C_COMPILER_LAUNCHER=$(call shell-quote,$(call shell-join,$($(ARCH)-cc-wrapper),;)) \ 76 -DCMAKE_C_FLAGS=$(call escape-shell,$(LIBEVLOG_CFLAGS)) \ 77 -DDEBUG_BACKEND_HEADER="log_backend_tf.h" \ 78 $(if $(V),, --log-level=ERROR) > /dev/null 79 $(q)cmake --build $(LIBEVLOG_BUILD_DIR) -- $(if $(V),,-s) > /dev/null 80 $(q)cmake --install $(LIBEVLOG_BUILD_DIR) \ 81 --prefix $(LIBEVLOG_INSTALL_DIR) \ 82 --config $(LIBEVLOG_BUILD_TYPE) > /dev/null 83