You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
199 lines
5.2 KiB
199 lines
5.2 KiB
##### |
|
# Local unit test Makefile |
|
# |
|
# This makefile builds and runs the trusty_keymaster unit tests locally on the development |
|
# machine, not on an Android device. |
|
# |
|
# To build and run these tests, one pre-requisite must be manually installed: BoringSSL. |
|
# This Makefile expects to find BoringSSL in a directory adjacent to $ANDROID_BUILD_TOP. |
|
# To get and build it, first install the Ninja build tool (e.g. apt-get install |
|
# ninja-build), then do: |
|
# |
|
# cd $ANDROID_BUILD_TOP/.. |
|
# git clone https://boringssl.googlesource.com/boringssl |
|
# cd boringssl |
|
# mdkir build |
|
# cd build |
|
# cmake -GNinja .. |
|
# ninja |
|
# |
|
# Then return to $ANDROID_BUILD_TOP/system/keymaster and run "make". |
|
##### |
|
|
|
BASE=../../../.. |
|
SUBS=system/core \ |
|
system/keymaster \ |
|
hardware/libhardware \ |
|
external/gtest |
|
GTEST=$(BASE)/external/gtest |
|
KM=$(BASE)/system/keymaster |
|
|
|
INCLUDES=$(foreach dir,$(SUBS),-I $(BASE)/$(dir)/include) \ |
|
-I $(BASE)/libnativehelper/include/nativehelper \ |
|
-I ../tipc/include \ |
|
-I $(BASE)/system/keymaster \ |
|
-I $(GTEST) \ |
|
-I$(BASE)/../boringssl/include |
|
|
|
ifdef USE_CLANG |
|
CC=/usr/bin/clang |
|
CXX=/usr/bin/clang |
|
CLANG_TEST_DEFINE=-DKEYMASTER_CLANG_TEST_BUILD |
|
COMPILER_SPECIFIC_ARGS=-std=c++11 $(CLANG_TEST_DEFINE) |
|
else |
|
COMPILER_SPECIFIC_ARGS=-std=c++0x -fprofile-arcs |
|
endif |
|
|
|
CPPFLAGS=$(INCLUDES) -g -O0 -MD |
|
CXXFLAGS=-Wall -Werror -Wno-unused -Winit-self -Wpointer-arith -Wunused-parameter \ |
|
-Wmissing-declarations -ftest-coverage \ |
|
-Wno-deprecated-declarations -fno-exceptions -DKEYMASTER_NAME_TAGS \ |
|
$(COMPILER_SPECIFIC_ARGS) |
|
LDLIBS=-L$(BASE)/../boringssl/build/crypto -lcrypto -lpthread -lstdc++ |
|
|
|
CPPSRCS=\ |
|
$(KM)/aead_mode_operation.cpp \ |
|
$(KM)/aes_key.cpp \ |
|
$(KM)/aes_operation.cpp \ |
|
$(KM)/android_keymaster.cpp \ |
|
$(KM)/android_keymaster_messages.cpp \ |
|
$(KM)/android_keymaster_messages_test.cpp \ |
|
$(KM)/android_keymaster_test.cpp \ |
|
$(KM)/android_keymaster_test_utils.cpp \ |
|
$(KM)/android_keymaster_utils.cpp \ |
|
$(KM)/asymmetric_key.cpp \ |
|
$(KM)/auth_encrypted_key_blob.cpp \ |
|
$(KM)/auth_encrypted_key_blob.cpp \ |
|
$(KM)/authorization_set.cpp \ |
|
$(KM)/authorization_set_test.cpp \ |
|
$(KM)/ec_key.cpp \ |
|
$(KM)/ec_keymaster0_key.cpp \ |
|
$(KM)/ecdsa_operation.cpp \ |
|
$(KM)/hmac_key.cpp \ |
|
$(KM)/hmac_operation.cpp \ |
|
$(KM)/integrity_assured_key_blob.cpp \ |
|
$(KM)/key.cpp \ |
|
$(KM)/key_blob_test.cpp \ |
|
$(KM)/keymaster0_engine.cpp \ |
|
$(KM)/logger.cpp \ |
|
$(KM)/ocb_utils.cpp \ |
|
$(KM)/openssl_err.cpp \ |
|
$(KM)/openssl_utils.cpp \ |
|
$(KM)/operation.cpp \ |
|
$(KM)/operation_table.cpp \ |
|
$(KM)/rsa_key.cpp \ |
|
$(KM)/rsa_keymaster0_key.cpp \ |
|
$(KM)/rsa_operation.cpp \ |
|
$(KM)/serializable.cpp \ |
|
$(KM)/soft_keymaster_context.cpp \ |
|
$(KM)/symmetric_key.cpp \ |
|
$(KM)/unencrypted_key_blob.cpp \ |
|
trusty_keymaster_device.cpp \ |
|
trusty_keymaster_device_test.cpp |
|
CCSRCS=$(GTEST)/src/gtest-all.cc |
|
CSRCS=ocb.c |
|
|
|
OBJS=$(CPPSRCS:.cpp=.o) $(CCSRCS:.cc=.o) $(CSRCS:.c=.o) |
|
DEPS=$(CPPSRCS:.cpp=.d) $(CCSRCS:.cc=.d) $(CSRCS:.c=.d) |
|
GCDA=$(CPPSRCS:.cpp=.gcda) $(CCSRCS:.cc=.gcda) $(CSRCS:.c=.gcda) |
|
GCNO=$(CPPSRCS:.cpp=.gcno) $(CCSRCS:.cc=.gcno) $(CSRCS:.c=.gcno) |
|
|
|
LINK.o=$(LINK.cc) |
|
|
|
BINARIES=trusty_keymaster_device_test |
|
|
|
ifdef TRUSTY |
|
BINARIES += trusty_keymaster_device_test |
|
endif # TRUSTY |
|
|
|
.PHONY: coverage memcheck massif clean run |
|
|
|
%.run: % |
|
./$< |
|
touch $@ |
|
|
|
run: $(BINARIES:=.run) |
|
|
|
coverage: coverage.info |
|
genhtml coverage.info --output-directory coverage |
|
|
|
coverage.info: run |
|
lcov --capture --directory=. --output-file coverage.info |
|
|
|
%.coverage : % |
|
$(MAKE) clean && $(MAKE) $< |
|
./$< |
|
lcov --capture --directory=. --output-file coverage.info |
|
genhtml coverage.info --output-directory coverage |
|
|
|
#UNINIT_OPTS=--track-origins=yes |
|
UNINIT_OPTS=--undef-value-errors=no |
|
|
|
MEMCHECK_OPTS=--leak-check=full \ |
|
--show-reachable=yes \ |
|
--vgdb=full \ |
|
$(UNINIT_OPTS) \ |
|
--error-exitcode=1 |
|
|
|
MASSIF_OPTS=--tool=massif \ |
|
--stacks=yes |
|
|
|
%.memcheck : % |
|
valgrind $(MEMCHECK_OPTS) ./$< && \ |
|
touch $@ |
|
|
|
%.massif : % |
|
valgrind $(MASSIF_OPTS) --massif-out-file=$@ ./$< |
|
|
|
memcheck: $(BINARIES:=.memcheck) |
|
|
|
massif: $(BINARIES:=.massif) |
|
|
|
trusty_keymaster_device_test: trusty_keymaster_device_test.o \ |
|
trusty_keymaster_device.o \ |
|
$(KM)/aead_mode_operation.o \ |
|
$(KM)/aes_key.o \ |
|
$(KM)/aes_operation.o \ |
|
$(KM)/android_keymaster.o \ |
|
$(KM)/android_keymaster_messages.o \ |
|
$(KM)/android_keymaster_test_utils.o \ |
|
$(KM)/android_keymaster_utils.o \ |
|
$(KM)/asymmetric_key.o \ |
|
$(KM)/auth_encrypted_key_blob.o \ |
|
$(KM)/auth_encrypted_key_blob.o \ |
|
$(KM)/authorization_set.o \ |
|
$(KM)/ec_key.o \ |
|
$(KM)/ec_keymaster0_key.cpp \ |
|
$(KM)/ecdsa_operation.o \ |
|
$(KM)/hmac_key.o \ |
|
$(KM)/hmac_operation.o \ |
|
$(KM)/integrity_assured_key_blob.o \ |
|
$(KM)/key.o \ |
|
$(KM)/keymaster0_engine.o \ |
|
$(KM)/logger.o \ |
|
$(KM)/ocb.o \ |
|
$(KM)/ocb_utils.o \ |
|
$(KM)/openssl_err.o \ |
|
$(KM)/openssl_utils.o \ |
|
$(KM)/operation.o \ |
|
$(KM)/operation_table.o \ |
|
$(KM)/rsa_key.o \ |
|
$(KM)/rsa_keymaster0_key.o \ |
|
$(KM)/rsa_operation.o \ |
|
$(KM)/serializable.o \ |
|
$(KM)/soft_keymaster_context.o \ |
|
$(KM)/symmetric_key.o \ |
|
$(GTEST)/src/gtest-all.o |
|
|
|
$(GTEST)/src/gtest-all.o: CXXFLAGS:=$(subst -Wmissing-declarations,,$(CXXFLAGS)) |
|
ocb.o: CFLAGS=$(CLANG_TEST_DEFINE) |
|
|
|
clean: |
|
rm -f $(OBJS) $(DEPS) $(GCDA) $(GCNO) $(BINARIES) \ |
|
$(BINARIES:=.run) $(BINARIES:=.memcheck) $(BINARIES:=.massif) \ |
|
coverage.info |
|
rm -rf coverage |
|
|
|
-include $(CPPSRCS:.cpp=.d) |
|
-include $(CCSRCS:.cc=.d) |
|
|
|
|