blob: ff77b1874d088b8d66b00cb742e0d7592aea2496 [file] [log] [blame]
Pascal Brandc639ac82015-07-02 08:53:34 +02001# Normally this makefile shouldn't be called directly and we expect the output
2# path to be on a certain location to fit together with the other OP-TEE
3# gits and helper scripts.
Etienne Carriere3ddc3622017-03-13 15:31:15 +01004
5include ../../scripts/common.mk
6out-dir := $(call strip-trailing-slashes-and-dots,$(O))
7ifeq ($(out-dir),)
8$(error invalid output directory (O=$(O)))
Pascal Brandc639ac82015-07-02 08:53:34 +02009endif
10
Cedric Chaumont1390f3a2015-08-31 13:55:16 +020011include $(TA_DEV_KIT_DIR)/host_include/conf.mk
12
Pascal Brandc639ac82015-07-02 08:53:34 +020013# By default we expect optee_client exported folder to be on a certain relative
14# path, but if the client specifies the OPTEE_CLIENT_EXPORT then that path will
15# be used instead.
16OPTEE_CLIENT_EXPORT ?= ../../../optee_client/out/export
17
Sumit Garg0e009142015-11-04 15:34:07 -050018CC ?= $(CROSS_COMPILE)gcc
19CPP ?= $(CROSS_COMPILE)cpp
20LD ?= $(CROSS_COMPILE)ld
21AR ?= $(CROSS_COMPILE)ar
22NM ?= $(CROSS_COMPILE)nm
23OBJCOPY ?= $(CROSS_COMPILE)objcopy
24OBJDUMP ?= $(CROSS_COMPILE)objdump
25READELF ?= $(CROSS_COMPILE)readelf
Pascal Brandc639ac82015-07-02 08:53:34 +020026
Jerome Forissier227d6f42019-10-09 16:43:22 +020027# Macros to detect the targeted architecture (e.g., arm-linux-gnueabihf or
28# aarch64-linux-gnu) and the corresponding bit size (32 or 64).
29define cc-arch
30$(shell $(1) -v 2>&1 | grep Target | sed 's/Target: \([^-]*\).*/\1/')
31endef
32define cc-bits
33$(if $(filter arm, $(1)),32,$(if $(filter aarch64, $(1)),64,unknown-arch))
34endef
35
Jerome Forissier43d58a52018-05-18 16:40:40 +020036# OpenSSL is used by GP tests series 8500 and Mbed TLS test 8103
Etienne Carriere938702e2018-06-21 16:09:48 +020037ifneq ($(CFG_GP_PACKAGE_PATH)$(filter y,$(CFG_TA_MBEDTLS)),)
Etienne Carrierec0e86782018-06-25 09:20:04 +020038CFLAGS += -DOPENSSL_FOUND=1
39ifneq ($(OPTEE_OPENSSL_EXPORT),)
40LDFLAGS += -lcrypto
41CFLAGS += -I$(OPTEE_OPENSSL_EXPORT)
42else #OPTEE_OPENSSL_EXPORT
43CFLAGS += -I../openssl/include
Jerome Forissier227d6f42019-10-09 16:43:22 +020044ifeq ($(call cc-bits, $(call cc-arch, $(CC))),32)
Jerome Forissier4b0d43d2018-06-05 10:09:31 +020045LDFLAGS += ../openssl/lib/arm/libcrypto.a -ldl
Jerome Forissier43d58a52018-05-18 16:40:40 +020046else
Jerome Forissier4b0d43d2018-06-05 10:09:31 +020047LDFLAGS += ../openssl/lib/aarch64/libcrypto.a -ldl
Jerome Forissier43d58a52018-05-18 16:40:40 +020048endif
Etienne Carrierec0e86782018-06-25 09:20:04 +020049endif #OPTEE_OPENSSL_EXPORT
50endif #require OpenSSL
Jerome Forissier43d58a52018-05-18 16:40:40 +020051
Jerome Forissier213ca8a2017-03-31 11:27:56 +020052srcs := regression_1000.c
Jens Wiklander02389a92016-12-16 11:13:38 +010053
54ifeq ($(CFG_GP_SOCKETS),y)
Jerome Forissier213ca8a2017-03-31 11:27:56 +020055srcs += regression_2000.c \
Jens Wiklander02389a92016-12-16 11:13:38 +010056 sock_server.c \
57 rand_stream.c
58endif
59
Jerome Forissier213ca8a2017-03-31 11:27:56 +020060srcs += adbg/src/adbg_case.c \
Pascal Brandc639ac82015-07-02 08:53:34 +020061 adbg/src/adbg_enum.c \
62 adbg/src/adbg_expect.c \
63 adbg/src/adbg_log.c \
Pascal Brandc639ac82015-07-02 08:53:34 +020064 adbg/src/adbg_run.c \
Jerome Forissier213ca8a2017-03-31 11:27:56 +020065 adbg/src/security_utils_hex.c \
66 aes_perf.c \
67 benchmark_1000.c \
68 benchmark_2000.c \
69 regression_4000.c \
Jens Wiklanderb4c75aa2018-11-15 10:43:29 +010070 regression_4100.c \
Jerome Forissier213ca8a2017-03-31 11:27:56 +020071 regression_5000.c \
72 regression_6000.c \
73 regression_7000.c \
Jens Wiklandercd0186b2017-04-05 11:34:22 +020074 regression_8000.c \
Jens Wiklander29326472018-04-20 11:22:15 +020075 regression_8100.c \
Jerome Forissier213ca8a2017-03-31 11:27:56 +020076 sha_perf.c \
Jens Wiklander254a3e32019-01-31 12:25:08 +010077 stats.c \
Jerome Forissier213ca8a2017-03-31 11:27:56 +020078 xtest_helpers.c \
79 xtest_main.c \
80 xtest_test.c
Pascal Brandc639ac82015-07-02 08:53:34 +020081
Jens Wiklanderf261a6d2017-11-09 16:45:51 +010082ifeq ($(CFG_SECSTOR_TA_MGMT_PTA),y)
83srcs += install_ta.c
84endif
85
Etienne Carriere41343db2017-03-17 15:38:52 +010086ifeq ($(CFG_SECURE_DATA_PATH),y)
87srcs += sdp_basic.c
88endif
89
Etienne Carriere109c1d72019-01-09 11:02:02 +010090ifeq ($(CFG_PKCS11_TA),y)
91srcs += pkcs11_1000.c
92
93OPTEE_PKCS11_TA_HEADERS ?= ../../../optee_client/libckteec/include
94CFLAGS += -DCFG_PKCS11_TA
95CFLAGS += -I$(OPTEE_PKCS11_TA_HEADERS)
96LDFLAGS += -L$(OPTEE_CLIENT_EXPORT)/lib -lckteec
97endif
98
Jerome Forissiere3688342015-09-24 10:45:17 -070099ifdef CFG_GP_PACKAGE_PATH
100CFLAGS += -DWITH_GP_TESTS
Pascal Brand8a74e362015-09-10 12:41:52 +0200101
Jerome Forissier213ca8a2017-03-31 11:27:56 +0200102srcs += gp_7000.c \
103 gp_7500.c \
104 gp_8000.c \
105 gp_8500.c \
106 gp_9000.c
Pascal Brandc639ac82015-07-02 08:53:34 +0200107endif
108
Etienne Carriere3ddc3622017-03-13 15:31:15 +0100109objs := $(patsubst %.c,$(out-dir)/xtest/%.o, $(srcs))
Pascal Brandc639ac82015-07-02 08:53:34 +0200110
111CFLAGS += -I./
112CFLAGS += -I./adbg/include
113CFLAGS += -I./xml/include
Jens Wiklanderf6efe242017-11-06 13:16:43 +0100114CFLAGS += -I$(out-dir)/xtest
Pascal Brandc639ac82015-07-02 08:53:34 +0200115
116CFLAGS += -I$(OPTEE_CLIENT_EXPORT)/include
117CFLAGS += -I$(TA_DEV_KIT_DIR)/host_include
118
Jens Wiklanderff1be9e2018-02-01 14:16:57 +0100119CFLAGS += -I../../ta/include
Pascal Brandc639ac82015-07-02 08:53:34 +0200120CFLAGS += -I../../ta/create_fail_test/include
121CFLAGS += -I../../ta/crypt/include
122CFLAGS += -I../../ta/enc_fs/include
123CFLAGS += -I../../ta/os_test/include
124CFLAGS += -I../../ta/rpc_test/include
125CFLAGS += -I../../ta/sims/include
Ovidiu Mihalachi15cecff2019-04-02 16:36:31 +0300126CFLAGS += -I../../ta/miss/include
127CFLAGS += -I../../ta/sims_keepalive/include
James Kungdf1e6cf2015-09-14 22:42:24 +0800128CFLAGS += -I../../ta/storage_benchmark/include
Jens Wiklanderac27ec12015-07-15 15:23:14 +0200129CFLAGS += -I../../ta/concurrent/include
Jens Wiklander70672972016-04-06 00:01:45 +0200130CFLAGS += -I../../ta/concurrent_large/include
Igor Opaniuk136644a2016-09-13 13:40:56 +0300131CFLAGS += -I../../ta/sha_perf/include
Igor Opaniuk44aff4b2016-09-16 10:18:00 +0300132CFLAGS += -I../../ta/aes_perf/include
Jens Wiklander02389a92016-12-16 11:13:38 +0100133CFLAGS += -I../../ta/socket/include
Etienne Carriere41343db2017-03-17 15:38:52 +0100134CFLAGS += -I../../ta/sdp_basic/include
135
Jerome Forissiere3688342015-09-24 10:45:17 -0700136ifdef CFG_GP_PACKAGE_PATH
Pascal Brandc639ac82015-07-02 08:53:34 +0200137CFLAGS += -I../../ta/GP_TTA_Arithmetical
138CFLAGS += -I../../ta/GP_TTA_Crypto
139CFLAGS += -I../../ta/GP_TTA_DS
140CFLAGS += -I../../ta/GP_TTA_TCF
141CFLAGS += -I../../ta/GP_TTA_TCF_ICA
142CFLAGS += -I../../ta/GP_TTA_TCF_ICA2
143CFLAGS += -I../../ta/GP_TTA_TCF_MultipleInstanceTA
144CFLAGS += -I../../ta/GP_TTA_TCF_SingleInstanceTA
145CFLAGS += -I../../ta/GP_TTA_Time
146CFLAGS += -I../../ta/GP_TTA_answerErrorTo_Invoke
147CFLAGS += -I../../ta/GP_TTA_answerErrorTo_OpenSession
148CFLAGS += -I../../ta/GP_TTA_answerSuccessTo_OpenSession_Invoke
149CFLAGS += -I../../ta/GP_TTA_check_OpenSession_with_4_parameters
150CFLAGS += -I../../ta/GP_TTA_testingClientAPI
151
Pascal Brandc639ac82015-07-02 08:53:34 +0200152
Pascal Brandc639ac82015-07-02 08:53:34 +0200153endif
154
l00176142087f2042017-08-28 20:03:28 +0800155TA_DIR ?= /lib/optee_armtz
156CFLAGS += -DTA_DIR=\"$(TA_DIR)\"
157
Jerome Forissierf9b89252016-08-23 18:30:43 +0200158# Include configuration file generated by OP-TEE OS (CFG_* macros)
159CFLAGS += -include conf.h
Pascal Brandc639ac82015-07-02 08:53:34 +0200160
Jerome Forissiere3688342015-09-24 10:45:17 -0700161ifndef CFG_GP_PACKAGE_PATH
Pascal Brandc639ac82015-07-02 08:53:34 +0200162CFLAGS += -Wall -Wcast-align -Werror \
163 -Werror-implicit-function-declaration -Wextra -Wfloat-equal \
164 -Wformat-nonliteral -Wformat-security -Wformat=2 -Winit-self \
165 -Wmissing-declarations -Wmissing-format-attribute \
166 -Wmissing-include-dirs -Wmissing-noreturn \
167 -Wmissing-prototypes -Wnested-externs -Wpointer-arith \
168 -Wshadow -Wstrict-prototypes -Wswitch-default \
169 -Wwrite-strings \
André Draszikb8739742019-02-07 01:29:08 +0000170 -Wno-declaration-after-statement \
Etienne Carriere5a83a502019-04-25 10:19:05 +0200171 -Wno-unsafe-loop-optimizations \
Pascal Brandc639ac82015-07-02 08:53:34 +0200172 -Wno-missing-field-initializers -Wno-format-zero-length
173endif
174
Jerome Forissiera8b78f12016-08-17 09:40:59 +0200175CFLAGS += -g3
176
Pascal Brandc639ac82015-07-02 08:53:34 +0200177LDFLAGS += -L$(OPTEE_CLIENT_EXPORT)/lib -lteec
Igor Opaniuk136644a2016-09-13 13:40:56 +0300178LDFLAGS += -lpthread -lm
Pascal Brandc639ac82015-07-02 08:53:34 +0200179
180.PHONY: all
181all: xtest
182
183xtest: $(objs)
Etienne Carriere3ddc3622017-03-13 15:31:15 +0100184 @echo " LD $(out-dir)/xtest/$@"
Jerome Forissierc8208582017-11-13 08:46:29 +0100185 $(q)$(CC) -o $(out-dir)/xtest/$@ $+ $(LDFLAGS)
Pascal Brandc639ac82015-07-02 08:53:34 +0200186
Etienne Carriere3ddc3622017-03-13 15:31:15 +0100187$(out-dir)/xtest/%.o: $(CURDIR)/%.c
188 $(q)mkdir -p $(out-dir)/xtest/adbg/src
Pascal Brandc639ac82015-07-02 08:53:34 +0200189 @echo ' CC $<'
190 $(q)$(CC) $(CFLAGS) -c $< -o $@
191
Etienne Carriere3ddc3622017-03-13 15:31:15 +0100192RMDIR := rmdir --ignore-fail-on-non-empty
193define rm-build-dirs
194 $(q)for d in $1; do $(RMDIR) $(out-dir)/xtest/$$d 2> /dev/null; true; done
195 $(q)$(RMDIR) $(out-dir)/xtest 2> /dev/null; true
196 $(q)$(RMDIR) $(out-dir) 2> /dev/null; true
197endef
198
Jens Wiklanderf6efe242017-11-06 13:16:43 +0100199ifeq ($(CFG_GCM_NIST_VECTORS),y)
200GCM_NIST_VECTORS_DECRYPT = gcmDecrypt128 gcmDecrypt192 gcmDecrypt256
201GCM_NIST_VECTORS_ENCRYPT = gcmEncryptExtIV128 gcmEncryptExtIV192 \
202 gcmEncryptExtIV256
203
204cleanfiles += $(out-dir)/gcmtestvectors.zip
205$(out-dir)/gcmtestvectors.zip:
206 @echo ' DL $@'
207 $(q)curl https://csrc.nist.gov/csrc/media/projects/cryptographic-algorithm-validation-program/documents/mac/gcmtestvectors.zip -o $@
208
209define create-nist-gcm-vectors
210cleanfiles += $(out-dir)/xtest/$(1).h $(out-dir)/$(1).rsp
211
212$(out-dir)/$(1).rsp: $(out-dir)/gcmtestvectors.zip
213 @echo ' UNZIP $$@'
214 $(q)unzip -o $$< $$(notdir $$@) -d $$(dir $$@)
215 $(q)touch $$@
216
217
218$(out-dir)/xtest/$(1).h: $(out-dir)/$(1).rsp
219 @echo ' GEN $$@'
220 $(q)../../scripts/rsp_to_gcm_test.py --inf $$< --outf $$@ --mode=$(2) \
221 $(if $(filter y,$(CFG_GCM_NIST_VECTORS_LIMITED)),--limited)
222
223$(CURDIR)/regression_4000.c: $(out-dir)/xtest/$(1).h
224endef
225
226$(foreach v, $(GCM_NIST_VECTORS_DECRYPT), $(eval $(call \
227 create-nist-gcm-vectors,$v,decrypt)))
228$(foreach v, $(GCM_NIST_VECTORS_ENCRYPT), $(eval $(call \
229 create-nist-gcm-vectors,$v,encrypt)))
230endif
231
Jens Wiklander97d6e292018-04-23 13:00:31 +0200232define embed-file
233cleanfiles += $(out-dir)/xtest/$(1).h
234
235$(out-dir)/xtest/$(1).h: $(2)
236 @echo ' GEN $$@'
237 $(q)../../scripts/file_to_c.py --inf $$< --out $$@ --name $(1)
238
239$(CURDIR)/regression_8100.c: $(out-dir)/xtest/$(1).h
240endef
241
242$(eval $(call embed-file,regression_8100_ca_crt,../../cert/ca.crt))
243$(eval $(call embed-file,regression_8100_mid_crt,../../cert/mid.crt))
244$(eval $(call embed-file,regression_8100_my_crt,../../cert/my.crt))
Jens Wiklander950ea1c2018-04-30 15:39:22 +0200245$(eval $(call embed-file,regression_8100_my_csr,../../cert/my.csr))
Jens Wiklanderf6efe242017-11-06 13:16:43 +0100246
Pascal Brandc639ac82015-07-02 08:53:34 +0200247.PHONY: clean
248clean:
Etienne Carriere3ddc3622017-03-13 15:31:15 +0100249 @echo ' CLEAN $(out-dir)'
250 $(q)rm -f $(out-dir)/xtest/xtest
Pascal Brandc639ac82015-07-02 08:53:34 +0200251 $(q)$(foreach obj,$(objs), rm -f $(obj))
Jens Wiklanderf6efe242017-11-06 13:16:43 +0100252 $(q)rm -f $(cleanfiles)
Etienne Carriere3ddc3622017-03-13 15:31:15 +0100253 $(call rm-build-dirs,adbg/src adbg)