1489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden########## 2489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden# This makefile builds local unit tests that run locally on the development machine. Note 3489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden# that it may be necessary to install some libraries on the dev maching to make the tests 4489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden# build. 5489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden# 6489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden# The same unit tests are also built by Android.mk to run on the target device. The tests 7489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden# should always build and pass in both places. The on-device test is what really matters, 8489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden# of course, but debugging is often somewhat easier on the dev platform. 9489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden########## 10489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 11489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenBASE=../../../.. 12489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenSUBS=system/core \ 13489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden system/keymaster\ 14489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden hardware/libhardware \ 15489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden external/gtest 16489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenGTEST=$(BASE)/external/gtest 17489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenKEYMASTER=$(BASE)/system/keymaster 18489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 19489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenINCLUDES=$(foreach dir,$(SUBS),-I $(BASE)/$(dir)/include) \ 20489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden -I $(BASE)/libnativehelper/include/nativehelper \ 21489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden -I $(GTEST) -Iinclude 22489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 23489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden# Add USE_CLANG=1 to the make command line to build with clang, which has better error 24489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden# reporting and diagnoses some conditions that GCC doesn't. 25489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willdenifdef USE_CLANG 26489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenCC=/usr/bin/clang 27489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenCXX=/usr/bin/clang 28489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenCLANG_TEST_DEFINE=-DKEYMASTER_CLANG_TEST_BUILD 29489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenCOMPILER_SPECIFIC_ARGS=-std=c++11 $(CLANG_TEST_DEFINE) 30489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willdenelse 31489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenCOMPILER_SPECIFIC_ARGS=-std=c++0x -fprofile-arcs 32489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willdenendif 33489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 3447d2616439c134502d9ee87a3d4bda065e3d5324Shawn WilldenCPPFLAGS=$(INCLUDES) -g -O0 -MD -DHOST_BUILD 35489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenCXXFLAGS=-Wall -Werror -Wno-unused -Winit-self -Wpointer-arith -Wunused-parameter \ 36489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden -Werror=sign-compare -Wmissing-declarations -ftest-coverage -fno-permissive \ 37489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden -Wno-deprecated-declarations -fno-exceptions -DKEYMASTER_NAME_TAGS \ 38489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden $(COMPILER_SPECIFIC_ARGS) 39489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 40489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden# Uncomment to enable debug logging. 41489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden# CXXFLAGS += -DDEBUG 42489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 43489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenLDLIBS=-lpthread -lstdc++ -lgcov 44489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 45489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden# This list of sources is used for dependency generation and cleanup. Add each new source 46489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden# file here (not headers). 47489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenCPPSRCS=\ 48489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden ../auth_token_table.cpp \ 4947d2616439c134502d9ee87a3d4bda065e3d5324Shawn Willden auth_token_table_test.cpp \ 5047d2616439c134502d9ee87a3d4bda065e3d5324Shawn Willden gtest_main.cpp \ 5147d2616439c134502d9ee87a3d4bda065e3d5324Shawn Willden $(KEYMASTER)/authorization_set.cpp \ 5247d2616439c134502d9ee87a3d4bda065e3d5324Shawn Willden $(KEYMASTER)/keymaster_tags.cpp \ 5347d2616439c134502d9ee87a3d4bda065e3d5324Shawn Willden $(KEYMASTER)/logger.cpp \ 5447d2616439c134502d9ee87a3d4bda065e3d5324Shawn Willden $(KEYMASTER)/serializable.cpp 5547d2616439c134502d9ee87a3d4bda065e3d5324Shawn Willden 5647d2616439c134502d9ee87a3d4bda065e3d5324Shawn WilldenCCSRCS=$(GTEST)/src/gtest-all.cc 57489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 58489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden# This list of binaries determes what gets built and run. Add each new test binary here. 59489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenBINARIES=\ 60489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden auth_token_table_test 61489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 62489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden.PHONY: coverage memcheck massif clean run 63489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 64489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden%.run: % 65489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden ./$< 66489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden touch $@ 67489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 68489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willdenrun: $(BINARIES:=.run) 69489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 7047d2616439c134502d9ee87a3d4bda065e3d5324Shawn WilldenGTEST_OBJS = $(GTEST)/src/gtest-all.o gtest_main.o 7147d2616439c134502d9ee87a3d4bda065e3d5324Shawn Willden 72489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willdenauth_token_table_test: auth_token_table_test.o \ 73489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden ../auth_token_table.o \ 7447d2616439c134502d9ee87a3d4bda065e3d5324Shawn Willden $(GTEST_OBJS) \ 75489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden $(KEYMASTER)/authorization_set.o \ 7647d2616439c134502d9ee87a3d4bda065e3d5324Shawn Willden $(KEYMASTER)/keymaster_tags.o \ 77489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden $(KEYMASTER)/logger.o \ 78489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden $(KEYMASTER)/serializable.o 79489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 80489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willdencoverage: coverage.info 81489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden genhtml coverage.info --output-directory coverage 82489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 83489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willdencoverage.info: run 84489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden lcov --capture --directory=. --directory=.. -b . --output-file coverage.info 85489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 86489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden%.coverage : % 87489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden $(MAKE) clean && $(MAKE) $< 88489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden ./$< 89489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden lcov --capture --directory=. --output-file coverage.info 90489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden genhtml coverage.info --output-directory coverage 91489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden#UNINIT_OPTS=--track-origins=yes 92489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenUNINIT_OPTS=--undef-value-errors=no 93489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 94489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenMEMCHECK_OPTS=--leak-check=full \ 95489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden --show-reachable=yes \ 96489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden --vgdb=full \ 97489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden $(UNINIT_OPTS) \ 98489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden --error-exitcode=1 99489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 100489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenMASSIF_OPTS=--tool=massif \ 101489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden --stacks=yes 102489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 103489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden%.memcheck : % 104489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden valgrind $(MEMCHECK_OPTS) ./$< && \ 105489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden touch $@ 106489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 107489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden%.massif : % 108489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden valgrind $(MASSIF_OPTS) --massif-out-file=$@ ./$< 109489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 110489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willdenmemcheck: $(BINARIES:=.memcheck) 111489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 112489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willdenmassif: $(BINARIES:=.massif) 113489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 114489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenOBJS=$(CPPSRCS:.cpp=.o) 115489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenDEPS=$(CPPSRCS:.cpp=.d) 116489dfe1f3dbdb9377debce826e37294d48fe6754Shawn WilldenGCOV=$(CPPSRCS:.cpp=.gcov) $(CPPSRCS:.cpp=.gcda) $(CPPSRCS:.cpp=.gcno) 117489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 118489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willdenclean: 119489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden rm -f $(OBJS) $(DEPS) $(BINARIES) $(GCOV) \ 120489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden $(BINARIES:=.run) $(BINARIES:=.memcheck) $(BINARIES:=.massif) \ 121489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden *gcov *gcno *gcda coverage.info 122489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden rm -rf coverage 123489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 124489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden-include $(CPPSRCS:.cpp=.d) 125489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden-include $(CCSRCS:.cc=.d) 126489dfe1f3dbdb9377debce826e37294d48fe6754Shawn Willden 127