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