blob: 240753e2667a4299057e24ded12e570dbb56e4d6 [file] [log] [blame]
# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
PKG_CONFIG ?= pkg-config
BASE_VER ?= 125070
PC_DEPS = libchrome-$(BASE_VER)
PC_CFLAGS := $(shell $(PKG_CONFIG) --cflags $(PC_DEPS))
PC_LIBS := $(shell $(PKG_CONFIG) --libs $(PC_DEPS))
ifeq ($(FIRMWARE_ARCH),)
CFLAGS += -DCHROMEOS_ENVIRONMENT
CXXFLAGS += -DCHROMEOS_ENVIRONMENT
endif
INCLUDES += -I./include \
-I$(FWDIR)/lib/include \
-I$(FWDIR)/lib/cgptlib/include \
-I$(FWDIR)/lib/cryptolib/include \
-I$(FWDIR)/lib/tpm_lite/include \
-I$(HOSTDIR)/include \
$(PC_CFLAGS)
BUILD_ROOT = ${BUILD}/tests
TEST_NAMES = cgptlib_test \
rollback_index2_tests \
rsa_padding_test \
rsa_utility_tests \
rsa_verify_benchmark \
sha_benchmark \
sha_tests \
stateful_util_tests \
utility_string_tests \
utility_tests \
tpm_bootmode_tests \
vboot_api_init_tests \
vboot_api_firmware_tests \
vboot_common_tests \
vboot_common2_tests \
vboot_common3_tests \
vboot_ec_tests \
vboot_firmware_tests \
vboot_nvstorage_test \
vboot_api_devmode_tests \
vboot_audio_tests \
vboot_api_kernel_tests
TEST_BINS = $(addprefix ${BUILD_ROOT}/,$(TEST_NAMES))
TEST_LIB = ${BUILD_ROOT}/test.a
TEST_LIB_SRCS = test_common.c timer_utils.c crc32_test.c
TEST_LIB_OBJS = $(TEST_LIB_SRCS:%.c=${BUILD_ROOT}/%.o)
ALL_DEPS = $(addsuffix .d,${TEST_BINS} ${TEST_LIB_OBJS})
# Allow multiple definitions, so tests can mock functions from other libraries
CFLAGS += -MMD -MF $@.d -Xlinker --allow-multiple-definition
CXXFLAGS += -MMD -MF $@.d -Xlinker --allow-multiple-definition
LDLIBS += $(PC_LIBS) -luuid
LIBS := ${TEST_LIB} $(HOSTLIB)
ifneq (${RUNTESTS},)
EXTRA_TARGET = runtests
endif
all: $(TEST_BINS) ${EXTRA_TARGET}
rbtest: $(BUILD_ROOT)/rollback_index_test
cgptmanager_tests: $(BUILD_ROOT)/CgptManagerTests
${TEST_LIB}: ${TEST_LIB_OBJS}
rm -f $@
$(AR) rc $@ $^
${BUILD_ROOT}/CgptManagerTests.o: CgptManagerTests.cc
$(CXX) -DWITH_UTIL_MAIN $(CXXFLAGS) $(INCLUDES) -c $< -o $@
${BUILD_ROOT}/CgptManagerTests: ${BUILD_ROOT}/CgptManagerTests.o
$(CXX) $(CXXFLAGS) $(INCLUDES) $(LDFLAGS) $^ \
${BUILD}/cgpt/libcgpt-cc.a -lgtest -lgflags $(LDLIBS) -o $@
${BUILD_ROOT}/vboot_audio_for_test.o : $(FWDIR)/lib/vboot_audio.c
$(CC) $(CFLAGS) -DCUSTOM_MUSIC $(INCLUDES) \
-MMD -MF $@.d -c -o $@ $<
${BUILD_ROOT}/vboot_audio_tests: vboot_audio_tests.c \
${BUILD_ROOT}/vboot_audio_for_test.o ${LIBS}
$(CC) $(CFLAGS) $(INCLUDES) $< ${BUILD_ROOT}/vboot_audio_for_test.o \
${LIBS} -o $@ -lcrypto -lrt
${BUILD_ROOT}/rollback_index_test.o : rollback_index_test.c
$(CC) $(CFLAGS) -I/usr/include $(INCLUDES) -MMD -MF $@.d -c -o $@ $<
${BUILD_ROOT}/rollback_index_test: rollback_index_test.c ${HOSTLIB}
$(CC) $(CFLAGS) -I/usr/include $(INCLUDES) $< -o $@ \
-ltlcl ${HOSTLIB} -lcrypto -lrt
# Compile rollback_index.c for unit test, so it uses the same implementation
# as it does in the firmware.
${BUILD_ROOT}/rollback_index_for_test.o : $(FWDIR)/lib/rollback_index.c
$(CC) $(CFLAGS) -DROLLBACK_UNITTEST $(INCLUDES) \
-MMD -MF $@.d -c -o $@ $<
${BUILD_ROOT}/rollback_index2_tests: rollback_index2_tests.c \
${BUILD_ROOT}/rollback_index_for_test.o ${LIBS}
$(CC) $(CFLAGS) $(INCLUDES) $< ${BUILD_ROOT}/rollback_index_for_test.o \
${LIBS} -o $@ -lcrypto -lrt
${BUILD_ROOT}/%.o : %.c
$(CC) $(CFLAGS) $(INCLUDES) -MMD -MF $@.d -c -o $@ $<
${BUILD_ROOT}/%: %.c ${LIBS}
$(CC) $(CFLAGS) $(INCLUDES) $< ${LIBS} -o $@ -lcrypto -lrt
# TODO: port these tests to new API, if not already eqivalent
# functionality in other tests
#
# big_firmware_tests
# firmware_image_tests
# firmware_rollback_tests
# firmware_splicing_tests
# firmware_verify_benchmark
# verify_firmware_fuzz_driver
#
# big_kernel_tests
# kernel_image_tests
# kernel_rollback_tests
# kernel_splicing_tests
# kernel_verify_benchmark
# verify_kernel_fuzz_driver
# Generate test keys
genkeys:
./gen_test_keys.sh
# Run cgpt tests
runcgpttests:
${BUILD_ROOT}/cgptlib_test
./run_cgpt_tests.sh ${BUILD}/cgpt/cgpt
# Run CgptManager tests
runcgptmanagertests:
${BUILD_ROOT}/CgptManagerTests --v=1
# Run crypto tests
runcryptotests:
./run_rsa_tests.sh
${BUILD_ROOT}/rsa_utility_tests
${BUILD_ROOT}/sha_tests
./run_vboot_common_tests.sh
./run_vboot_ec_tests.sh
# Run other misc tests
runmisctests:
./run_vbutil_tests.sh
${BUILD_ROOT}/rollback_index2_tests
${BUILD_ROOT}/stateful_util_tests
${BUILD_ROOT}/tpm_bootmode_tests
${BUILD_ROOT}/utility_string_tests
${BUILD_ROOT}/utility_tests
${BUILD_ROOT}/vboot_api_init_tests
${BUILD_ROOT}/vboot_api_firmware_tests
${BUILD_ROOT}/vboot_firmware_tests
#This will exercise vbutil_kernel and vbutil_firmware
runfuzztests:
./gen_fuzz_test_cases.sh
./run_preamble_tests.sh
./run_vbutil_kernel_arg_tests.sh
# Run bmpblk_utility tests
runbmptests:
$(MAKE) BUILD=$(shell readlink -f ${BUILD}) -C bitmaps runtests
runsoundtests:
${BUILD_ROOT}/vboot_api_devmode_tests
${BUILD_ROOT}/vboot_audio_tests
ALLTESTS=runcgpttests runcryptotests runmisctests runfuzztests \
runbmptests runsoundtests
runtests: genkeys ${ALLTESTS}
# TODO: tests to run when ported to new API
# ./run_image_verification_tests.sh
# # Splicing tests
# ${BUILD_ROOT}/firmware_splicing_tests
# ${BUILD_ROOT}/kernel_splicing_tests
# # Rollback Tests
# ${BUILD_ROOT}/firmware_rollback_tests
# ${BUILD_ROOT}/kernel_rollback_tests
install-rbtest: $(BUILD_ROOT)/rollback_index_test
mkdir -p $(DESTDIR)
cp -f $(BUILD_ROOT)/rollback_index_test $(DESTDIR)
-include ${ALL_DEPS}