blob: 685261a11b3cc414afbbd8904a3347a8559e3d39 [file] [edit]
# Copyright 2026 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Firmware library
FWLIB = ${BUILD}/vboot_fw.a
# Separate TPM lightweight command library (TLCL)
TLCL = ${BUILD}/tlcl.a
FWLIB_SRCS = \
firmware/2lib/2api.c \
firmware/2lib/2auxfw_sync.c \
firmware/2lib/2common.c \
firmware/2lib/2context.c \
firmware/2lib/2crc8.c \
firmware/2lib/2crypto.c \
firmware/2lib/2ec_sync.c \
firmware/2lib/2firmware.c \
firmware/2lib/2gbb.c \
firmware/2lib/2hmac.c \
firmware/2lib/2kernel.c \
firmware/2lib/2load_kernel.c \
firmware/2lib/2misc.c \
firmware/2lib/2nvstorage.c \
firmware/2lib/2packed_key.c \
firmware/2lib/2recovery_reasons.c \
firmware/2lib/2rsa.c \
firmware/2lib/2secdata_firmware.c \
firmware/2lib/2secdata_fwmp.c \
firmware/2lib/2secdata_kernel.c \
firmware/2lib/2sha1.c \
firmware/2lib/2sha256.c \
firmware/2lib/2sha512.c \
firmware/2lib/2sha_utility.c \
firmware/2lib/2struct.c \
firmware/2lib/2stub_hwcrypto.c \
firmware/2lib/2tpm_bootmode.c \
firmware/lib/cgptlib/cgptlib.c \
firmware/lib/cgptlib/cgptlib_internal.c \
firmware/lib/cgptlib/crc32.c \
firmware/lib/gpt_misc.c \
firmware/lib20/api_kernel.c
# TPM lightweight command library
ifeq ($(filter-out 0,${TPM2_MODE}),)
TLCL_SRCS = \
firmware/lib/tpm_lite/tlcl.c
else
TLCL_SRCS = \
firmware/lib/tpm2_lite/tlcl.c \
firmware/lib/tpm2_lite/marshaling.c
endif
# Support real TPM unless MOCK_TPM is set
ifneq ($(filter-out 0,${MOCK_TPM}),)
FWLIB_SRCS += \
firmware/lib/tpm_lite/mocked_tlcl.c
endif
ifneq ($(filter-out 0,${X86_SHA_EXT}),)
CFLAGS += -DX86_SHA_EXT
FWLIB_SRCS += \
firmware/2lib/2hwcrypto.c \
firmware/2lib/2sha256_x86.c
endif
ifneq ($(filter-out 0,${ARMV8_CRYPTO_EXT}),)
CFLAGS += -DARMV8_CRYPTO_EXT
FWLIB_SRCS += \
firmware/2lib/2hwcrypto.c \
firmware/2lib/2sha256_arm.c
FWLIB_ASMS += \
firmware/2lib/sha256_armv8a_ce_a64.S
endif
ifneq ($(filter-out 0,${ARM64_RSA_ACCELERATION}),)
CFLAGS += -DARM64_RSA_ACCELERATION
FWLIB_SRCS += \
firmware/2lib/2modpow_neon.c
endif
ifneq ($(filter-out 0,${VB2_X86_RSA_ACCELERATION}),)
CFLAGS += -DVB2_X86_RSA_ACCELERATION
FWLIB_SRCS += \
firmware/2lib/2modpow_sse2.c
endif
ifneq (,$(filter arm64 x86 x86_64,${ARCH}))
ENABLE_HWCRYPTO_RSA_TESTS := 1
endif
ifeq (${ENABLE_HWCRYPTO_RSA_TESTS},1)
define enable_hwcrypto_rsa_tests
${BUILD}/$(1): CFLAGS += -DENABLE_HWCRYPTO_RSA_TESTS
ifeq (${ARCH},arm64)
${BUILD}/$(1): CFLAGS += -DARM64_RSA_ACCELERATION
${BUILD}/$(1): ${BUILD}/firmware/2lib/2modpow_neon.o
${BUILD}/$(1): LIBS += ${BUILD}/firmware/2lib/2modpow_neon.o
else
${BUILD}/$(1): CFLAGS += -DVB2_X86_RSA_ACCELERATION
${BUILD}/$(1): ${BUILD}/firmware/2lib/2modpow_sse2.o
${BUILD}/$(1): LIBS += ${BUILD}/firmware/2lib/2modpow_sse2.o
endif
endef
$(foreach test, ${HWCRYPTO_RSA_TESTS}, \
$(eval $(call enable_hwcrypto_rsa_tests,${test})))
endif
# Even if X86_SHA_EXT is 0 we need cflags since this will be compiled for tests
${BUILD}/firmware/2lib/2sha256_x86.o: CFLAGS += -mssse3 -mno-avx -msha
${BUILD}/firmware/2lib/2modpow_sse2.o: CFLAGS += -msse2 -mno-avx
ifneq (${FIRMWARE_STUB},)
FWLIB_SRCS += \
firmware/stub/tpm_lite_stub.c \
firmware/stub/vboot_api_stub_disk.c \
firmware/stub/vboot_api_stub_stream.c \
firmware/2lib/2stub.c
endif
FWLIB_OBJS = ${FWLIB_SRCS:%.c=${BUILD}/%.o} ${FWLIB_ASMS:%.S=${BUILD}/%.o}
TLCL_OBJS = ${TLCL_SRCS:%.c=${BUILD}/%.o}
ifneq ($(filter-out 0,${USE_AVB}),)
include firmware/avb/Makefile
FWLIB_SRCS += \
firmware/2lib/2load_android_kernel.c
endif
ALL_OBJS += ${FWLIB_OBJS} ${TLCL_OBJS}
# Firmware rules
${FWLIB}: ${FWLIB_OBJS}
@${PRINTF} " RM $(subst ${BUILD}/,,$@)\n"
${Q}rm -f $@
@${PRINTF} " AR $(subst ${BUILD}/,,$@)\n"
${Q}ar qcT $@ $^
.PHONY: tlcl
tlcl: ${TLCL}
${TLCL}: ${TLCL_OBJS}
@${PRINTF} " RM $(subst ${BUILD}/,,$@)\n"
${Q}rm -f $@
@${PRINTF} " AR $(subst ${BUILD}/,,$@)\n"
${Q}ar qcT $@ $^