| ##### | |
| # 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) | |