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