1b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales##### 2b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# Local unit test Makefile 3b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# 4b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# This makefile builds and runs the trusty_keymaster unit tests locally on the development 5b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# machine, not on an Android device. 6b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# 7b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# To build and run these tests, one pre-requisite must be manually installed: BoringSSL. 8b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# This Makefile expects to find BoringSSL in a directory adjacent to $ANDROID_BUILD_TOP. 9b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# To get and build it, first install the Ninja build tool (e.g. apt-get install 10b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# ninja-build), then do: 11b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# 12b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# cd $ANDROID_BUILD_TOP/.. 13b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# git clone https://boringssl.googlesource.com/boringssl 14b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# cd boringssl 15b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# mdkir build 16b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# cd build 17b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# cmake -GNinja .. 18b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# ninja 19b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# 20b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales# Then return to $ANDROID_BUILD_TOP/system/keymaster and run "make". 21b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales##### 22b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 23b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesBASE=../../../.. 24b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesSUBS=system/core \ 25b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales system/keymaster \ 26b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales hardware/libhardware \ 27b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales external/gtest 28b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesGTEST=$(BASE)/external/gtest 29b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesKM=$(BASE)/system/keymaster 30b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 31b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesINCLUDES=$(foreach dir,$(SUBS),-I $(BASE)/$(dir)/include) \ 32b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales -I $(BASE)/libnativehelper/include/nativehelper \ 33b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales -I ../tipc/include \ 34b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales -I $(BASE)/system/keymaster \ 35b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales -I $(GTEST) \ 36b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales -I$(BASE)/../boringssl/include 37b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 38b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Moralesifdef USE_CLANG 39b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesCC=/usr/bin/clang 40b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesCXX=/usr/bin/clang 41b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesCLANG_TEST_DEFINE=-DKEYMASTER_CLANG_TEST_BUILD 42b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesCOMPILER_SPECIFIC_ARGS=-std=c++11 $(CLANG_TEST_DEFINE) 43b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Moraleselse 44b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesCOMPILER_SPECIFIC_ARGS=-std=c++0x -fprofile-arcs 45b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Moralesendif 46b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 47b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesCPPFLAGS=$(INCLUDES) -g -O0 -MD 48b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesCXXFLAGS=-Wall -Werror -Wno-unused -Winit-self -Wpointer-arith -Wunused-parameter \ 49b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales -Wmissing-declarations -ftest-coverage \ 50b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales -Wno-deprecated-declarations -fno-exceptions -DKEYMASTER_NAME_TAGS \ 51b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(COMPILER_SPECIFIC_ARGS) 52b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesLDLIBS=-L$(BASE)/../boringssl/build/crypto -lcrypto -lpthread -lstdc++ 53b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 54b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesCPPSRCS=\ 55b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/aead_mode_operation.cpp \ 56b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/aes_key.cpp \ 57b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/aes_operation.cpp \ 58b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/android_keymaster.cpp \ 59b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/android_keymaster_messages.cpp \ 60b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/android_keymaster_messages_test.cpp \ 61b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/android_keymaster_test.cpp \ 62b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/android_keymaster_test_utils.cpp \ 63b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/android_keymaster_utils.cpp \ 64b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/asymmetric_key.cpp \ 65b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/auth_encrypted_key_blob.cpp \ 66b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/auth_encrypted_key_blob.cpp \ 67b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/authorization_set.cpp \ 68b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/authorization_set_test.cpp \ 69b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/ec_key.cpp \ 70b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/ec_keymaster0_key.cpp \ 71b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/ecdsa_operation.cpp \ 72b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/hmac_key.cpp \ 73b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/hmac_operation.cpp \ 74b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/integrity_assured_key_blob.cpp \ 75b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/key.cpp \ 76b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/key_blob_test.cpp \ 77b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/keymaster0_engine.cpp \ 78b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/logger.cpp \ 79b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/ocb_utils.cpp \ 80b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/openssl_err.cpp \ 81b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/openssl_utils.cpp \ 82b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/operation.cpp \ 83b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/operation_table.cpp \ 84b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/rsa_key.cpp \ 85b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/rsa_keymaster0_key.cpp \ 86b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/rsa_operation.cpp \ 87b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/serializable.cpp \ 88b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/soft_keymaster_context.cpp \ 89b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/symmetric_key.cpp \ 90b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/unencrypted_key_blob.cpp \ 91b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales trusty_keymaster_device.cpp \ 92b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales trusty_keymaster_device_test.cpp 93b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesCCSRCS=$(GTEST)/src/gtest-all.cc 94b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesCSRCS=ocb.c 95b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 96b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesOBJS=$(CPPSRCS:.cpp=.o) $(CCSRCS:.cc=.o) $(CSRCS:.c=.o) 97b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesDEPS=$(CPPSRCS:.cpp=.d) $(CCSRCS:.cc=.d) $(CSRCS:.c=.d) 98b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesGCDA=$(CPPSRCS:.cpp=.gcda) $(CCSRCS:.cc=.gcda) $(CSRCS:.c=.gcda) 99b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesGCNO=$(CPPSRCS:.cpp=.gcno) $(CCSRCS:.cc=.gcno) $(CSRCS:.c=.gcno) 100b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 101b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesLINK.o=$(LINK.cc) 102b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 103b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesBINARIES=trusty_keymaster_device_test 104b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 105b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Moralesifdef TRUSTY 106b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesBINARIES += trusty_keymaster_device_test 107b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Moralesendif # TRUSTY 108b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 109b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales.PHONY: coverage memcheck massif clean run 110b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 111b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales%.run: % 112b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales ./$< 113b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales touch $@ 114b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 115b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Moralesrun: $(BINARIES:=.run) 116b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 117b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Moralescoverage: coverage.info 118b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales genhtml coverage.info --output-directory coverage 119b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 120b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Moralescoverage.info: run 121b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales lcov --capture --directory=. --output-file coverage.info 122b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 123b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales%.coverage : % 124b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(MAKE) clean && $(MAKE) $< 125b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales ./$< 126b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales lcov --capture --directory=. --output-file coverage.info 127b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales genhtml coverage.info --output-directory coverage 128b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 129b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales#UNINIT_OPTS=--track-origins=yes 130b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesUNINIT_OPTS=--undef-value-errors=no 131b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 132b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesMEMCHECK_OPTS=--leak-check=full \ 133b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales --show-reachable=yes \ 134b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales --vgdb=full \ 135b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(UNINIT_OPTS) \ 136b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales --error-exitcode=1 137b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 138b33c9b8ffa5e687a08311eae917c50fd615020d0Andres MoralesMASSIF_OPTS=--tool=massif \ 139b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales --stacks=yes 140b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 141b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales%.memcheck : % 142b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales valgrind $(MEMCHECK_OPTS) ./$< && \ 143b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales touch $@ 144b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 145b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales%.massif : % 146b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales valgrind $(MASSIF_OPTS) --massif-out-file=$@ ./$< 147b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 148b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Moralesmemcheck: $(BINARIES:=.memcheck) 149b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 150b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Moralesmassif: $(BINARIES:=.massif) 151b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 152b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Moralestrusty_keymaster_device_test: trusty_keymaster_device_test.o \ 153b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales trusty_keymaster_device.o \ 154b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/aead_mode_operation.o \ 155b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/aes_key.o \ 156b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/aes_operation.o \ 157b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/android_keymaster.o \ 158b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/android_keymaster_messages.o \ 159b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/android_keymaster_test_utils.o \ 160b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/android_keymaster_utils.o \ 161b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/asymmetric_key.o \ 162b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/auth_encrypted_key_blob.o \ 163b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/auth_encrypted_key_blob.o \ 164b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/authorization_set.o \ 165b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/ec_key.o \ 166b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/ec_keymaster0_key.cpp \ 167b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/ecdsa_operation.o \ 168b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/hmac_key.o \ 169b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/hmac_operation.o \ 170b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/integrity_assured_key_blob.o \ 171b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/key.o \ 172b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/keymaster0_engine.o \ 173b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/logger.o \ 174b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/ocb.o \ 175b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/ocb_utils.o \ 176b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/openssl_err.o \ 177b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/openssl_utils.o \ 178b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/operation.o \ 179b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/operation_table.o \ 180b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/rsa_key.o \ 181b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/rsa_keymaster0_key.o \ 182b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/rsa_operation.o \ 183b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/serializable.o \ 184b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/soft_keymaster_context.o \ 185b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(KM)/symmetric_key.o \ 186b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(GTEST)/src/gtest-all.o 187b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 188b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales$(GTEST)/src/gtest-all.o: CXXFLAGS:=$(subst -Wmissing-declarations,,$(CXXFLAGS)) 189b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Moralesocb.o: CFLAGS=$(CLANG_TEST_DEFINE) 190b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 191b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Moralesclean: 192b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales rm -f $(OBJS) $(DEPS) $(GCDA) $(GCNO) $(BINARIES) \ 193b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales $(BINARIES:=.run) $(BINARIES:=.memcheck) $(BINARIES:=.massif) \ 194b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales coverage.info 195b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales rm -rf coverage 196b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 197b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales-include $(CPPSRCS:.cpp=.d) 198b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales-include $(CCSRCS:.cc=.d) 199b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales 200