| # Normally this makefile shouldn't be called directly and we expect the output |
| # path to be on a certain location to fit together with the other OP-TEE |
| # gits and helper scripts. |
| |
| include ../../scripts/common.mk |
| out-dir := $(call strip-trailing-slashes-and-dots,$(O)) |
| ifeq ($(out-dir),) |
| $(error invalid output directory (O=$(O))) |
| endif |
| |
| include $(TA_DEV_KIT_DIR)/host_include/conf.mk |
| |
| # By default we expect optee_client exported folder to be on a certain relative |
| # path, but if the client specifies the OPTEE_CLIENT_EXPORT then that path will |
| # be used instead. |
| OPTEE_CLIENT_EXPORT ?= ../../../optee_client/out/export |
| |
| CC ?= $(CROSS_COMPILE)gcc |
| CPP ?= $(CROSS_COMPILE)cpp |
| LD ?= $(CROSS_COMPILE)ld |
| AR ?= $(CROSS_COMPILE)ar |
| NM ?= $(CROSS_COMPILE)nm |
| OBJCOPY ?= $(CROSS_COMPILE)objcopy |
| OBJDUMP ?= $(CROSS_COMPILE)objdump |
| READELF ?= $(CROSS_COMPILE)readelf |
| |
| # Macros to detect the targeted architecture (e.g., arm-linux-gnueabihf or |
| # aarch64-linux-gnu) and the corresponding bit size (32 or 64). |
| define cc-arch |
| $(shell $(1) -v 2>&1 | grep Target | sed 's/Target: \([^-]*\).*/\1/') |
| endef |
| define cc-bits |
| $(if $(filter arm, $(1)),32,$(if $(filter aarch64, $(1)),64,unknown-arch)) |
| endef |
| |
| # OpenSSL is used by: |
| # - GP tests series 8500 |
| # - Mbed TLS test 8103 |
| # - User/group login tests 1027 and 1028 |
| WITH_OPENSSL ?= y |
| ifeq ($(WITH_OPENSSL),y) |
| CFLAGS += -DOPENSSL_FOUND=1 -DOPENSSL_API_COMPAT=10100 |
| ifneq ($(OPENSSL_INSTALL_PATH),) |
| CFLAGS += -I$(OPENSSL_INSTALL_PATH)/include |
| LDFLAGS += -L$(OPENSSL_INSTALL_PATH)/lib |
| endif |
| LDFLAGS += -lcrypto |
| endif #require OpenSSL |
| |
| srcs := regression_1000.c |
| |
| ifeq ($(CFG_GP_SOCKETS),y) |
| srcs += regression_2000.c \ |
| sock_server.c \ |
| rand_stream.c |
| endif |
| |
| srcs += adbg/src/adbg_case.c \ |
| adbg/src/adbg_enum.c \ |
| adbg/src/adbg_expect.c \ |
| adbg/src/adbg_log.c \ |
| adbg/src/adbg_run.c \ |
| adbg/src/security_utils_hex.c \ |
| asym_perf.c \ |
| benchmark_1000.c \ |
| benchmark_2000.c \ |
| clear_storage.c \ |
| regression_4000.c \ |
| regression_4100.c \ |
| regression_5000.c \ |
| regression_6000.c \ |
| regression_8000.c \ |
| regression_8100.c \ |
| hash_perf.c \ |
| install_ta.c \ |
| stats.c \ |
| symm_cipher_perf.c \ |
| xtest_helpers.c \ |
| xtest_main.c \ |
| xtest_test.c \ |
| xtest_uuid_helpers.c |
| |
| ifeq ($(CFG_SECURE_PARTITION)-$(CFG_SPMC_TESTS),y-y) |
| srcs += ffa_spmc_1000.c |
| endif |
| |
| ifeq ($(CFG_SECURE_DATA_PATH),y) |
| srcs += sdp_basic.c |
| endif |
| |
| ifeq ($(CFG_PKCS11_TA),y) |
| srcs += pkcs11_1000.c |
| endif |
| |
| objs := $(patsubst %.c,$(out-dir)/xtest/%.o, $(srcs)) |
| |
| ifeq ($(CFG_PKCS11_TA),y) |
| CFLAGS += -DCFG_PKCS11_TA |
| endif |
| |
| ifeq ($(CFG_CRYPTO_SE05X),y) |
| CFLAGS += -DCFG_CRYPTO_SE05X |
| endif |
| |
| CFLAGS += -I./ |
| CFLAGS += -I./adbg/include |
| CFLAGS += -I./include/uapi |
| CFLAGS += -I../supp_plugin/include |
| CFLAGS += -I$(out-dir)/xtest |
| |
| CFLAGS += -I$(OPTEE_CLIENT_EXPORT)/include |
| CFLAGS += -I$(TA_DEV_KIT_DIR)/host_include |
| |
| CFLAGS += -I../../ta/include |
| CFLAGS += -I../../ta/create_fail_test/include |
| CFLAGS += -I../../ta/crypt/include |
| CFLAGS += -I../../ta/enc_fs/include |
| CFLAGS += -I../../ta/os_test/include |
| CFLAGS += -I../../ta/rpc_test/include |
| CFLAGS += -I../../ta/sims/include |
| CFLAGS += -I../../ta/miss/include |
| CFLAGS += -I../../ta/sims_keepalive/include |
| CFLAGS += -I../../ta/storage_benchmark/include |
| CFLAGS += -I../../ta/concurrent/include |
| CFLAGS += -I../../ta/concurrent_large/include |
| CFLAGS += -I../../ta/crypto_perf/include |
| CFLAGS += -I../../ta/socket/include |
| CFLAGS += -I../../ta/sdp_basic/include |
| CFLAGS += -I../../ta/tpm_log_test/include |
| CFLAGS += -I../../ta/large/include |
| CFLAGS += -I../../ta/supp_plugin/include |
| CFLAGS += -I../../ta/bti_test/include |
| CFLAGS += -I../../ta/subkey1/include |
| CFLAGS += -I../../ta/subkey2/include |
| |
| TA_DIR ?= /lib/optee_armtz |
| CFLAGS += -DTA_DIR=\"$(TA_DIR)\" |
| |
| # Include configuration file generated by OP-TEE OS (CFG_* macros) |
| CFLAGS += -include conf.h |
| |
| CFLAGS += -Wall -Wcast-align \ |
| -Werror-implicit-function-declaration -Wextra -Wfloat-equal \ |
| -Wformat-nonliteral -Wformat-security -Wformat=2 -Winit-self \ |
| -Wmissing-declarations -Wmissing-format-attribute \ |
| -Wmissing-include-dirs \ |
| -Wmissing-prototypes -Wnested-externs -Wpointer-arith \ |
| -Wshadow -Wstrict-prototypes -Wswitch-default \ |
| -Wwrite-strings -Wno-unused-parameter \ |
| -Wno-declaration-after-statement \ |
| -Wno-missing-field-initializers -Wno-format-zero-length \ |
| -Wno-alloc-size |
| |
| ifeq ($(CFG_WERROR),y) |
| CFLAGS += -Werror |
| endif |
| |
| CFLAGS += -g3 |
| |
| LDFLAGS += -L$(OPTEE_CLIENT_EXPORT)/lib -lteec |
| ifeq ($(CFG_PKCS11_TA),y) |
| LDFLAGS += -lckteec |
| endif |
| LDFLAGS += -lpthread -lm |
| |
| .PHONY: all |
| all: xtest |
| |
| xtest: $(objs) |
| @echo " LD $(out-dir)/xtest/$@" |
| $(q)$(CC) -o $(out-dir)/xtest/$@ $+ $(LDFLAGS) |
| |
| $(out-dir)/xtest/%.o: $(CURDIR)/%.c |
| $(q)mkdir -p $(out-dir)/xtest/adbg/src |
| @echo ' CC $<' |
| $(q)$(CC) $(CFLAGS) -c $< -o $@ |
| |
| RMDIR := rmdir --ignore-fail-on-non-empty |
| define rm-build-dirs |
| $(q)for d in $1; do $(RMDIR) $(out-dir)/xtest/$$d 2> /dev/null; true; done |
| $(q)$(RMDIR) $(out-dir)/xtest 2> /dev/null; true |
| $(q)$(RMDIR) $(out-dir) 2> /dev/null; true |
| endef |
| |
| ifeq ($(CFG_GCM_NIST_VECTORS),y) |
| GCM_NIST_VECTORS_DECRYPT = gcmDecrypt128 gcmDecrypt192 gcmDecrypt256 |
| GCM_NIST_VECTORS_ENCRYPT = gcmEncryptExtIV128 gcmEncryptExtIV192 \ |
| gcmEncryptExtIV256 |
| |
| cleanfiles += $(out-dir)/gcmtestvectors.zip |
| $(out-dir)/gcmtestvectors.zip: |
| @echo ' DL $@' |
| $(q)curl https://csrc.nist.gov/csrc/media/projects/cryptographic-algorithm-validation-program/documents/mac/gcmtestvectors.zip -o $@ |
| |
| define create-nist-gcm-vectors |
| cleanfiles += $(out-dir)/xtest/$(1).h $(out-dir)/$(1).rsp |
| |
| $(out-dir)/$(1).rsp: $(out-dir)/gcmtestvectors.zip |
| @echo ' UNZIP $$@' |
| $(q)unzip -o $$< $$(notdir $$@) -d $$(dir $$@) |
| $(q)touch $$@ |
| |
| |
| $(out-dir)/xtest/$(1).h: $(out-dir)/$(1).rsp |
| @echo ' GEN $$@' |
| $(q)$(PYTHON3) ../../scripts/rsp_to_gcm_test.py --inf $$< --outf $$@ --mode=$(2) \ |
| $(if $(filter y,$(CFG_GCM_NIST_VECTORS_LIMITED)),--limited) |
| |
| $(CURDIR)/regression_4000.c: $(out-dir)/xtest/$(1).h |
| endef |
| |
| $(foreach v, $(GCM_NIST_VECTORS_DECRYPT), $(eval $(call \ |
| create-nist-gcm-vectors,$v,decrypt))) |
| $(foreach v, $(GCM_NIST_VECTORS_ENCRYPT), $(eval $(call \ |
| create-nist-gcm-vectors,$v,encrypt))) |
| endif |
| |
| define embed-file |
| cleanfiles += $(out-dir)/xtest/$(1).h |
| |
| $(out-dir)/xtest/$(1).h: $(2) |
| $(q)mkdir -p $(out-dir)/xtest/ |
| @echo ' GEN $$@' |
| $(q)$(PYTHON3) ../../scripts/file_to_c.py --inf $$< --out $$@ --name $(1) |
| |
| $(CURDIR)/regression_8100.c: $(out-dir)/xtest/$(1).h |
| endef |
| |
| $(eval $(call embed-file,regression_8100_ca_crt,../../cert/ca.crt)) |
| $(eval $(call embed-file,regression_8100_mid_crt,../../cert/mid.crt)) |
| $(eval $(call embed-file,regression_8100_my_crt,../../cert/my.crt)) |
| $(eval $(call embed-file,regression_8100_my_csr,../../cert/my.csr)) |
| |
| .PHONY: clean |
| clean: |
| @echo ' CLEAN $(out-dir)' |
| $(q)rm -f $(out-dir)/xtest/xtest |
| $(q)$(foreach obj,$(objs), rm -f $(obj)) |
| $(q)rm -f $(cleanfiles) |
| $(call rm-build-dirs,adbg/src adbg) |