1# Copyright (C) 2022 Huawei Technologies Co., Ltd. 2# Licensed under the Mulan PSL v2. 3# You can use this software according to the terms and conditions of the Mulan PSL v2. 4# You may obtain a copy of Mulan PSL v2 at: 5# http://license.coscl.org.cn/MulanPSL2 6# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 7# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 8# PURPOSE. 9# See the Mulan PSL v2 for more details. 10include flags.mk 11 12# common flags 13COMMON_INCLUDES := ${CURDIR}/../../interfaces/inner_api \ 14 ${CURDIR}/../../frameworks/include/standard/teec_vendor \ 15 ${CURDIR}/../../frameworks/include/standard \ 16 ${CURDIR}/../../frameworks/include \ 17 ${CURDIR}/../../frameworks/libteec_vendor \ 18 ${CURDIR}/../../services/teecd/include/standard \ 19 ${CURDIR}/../../services/teecd/include \ 20 ${CURDIR}/../../services/authentication \ 21 ${CURDIR}/../../../../../vendor/huawei/chipset_common/modules/libc_sec/include 22 23 24COMMON_CFLAGS := $(addprefix -I, $(COMMON_INCLUDES)) $(CFLAGS) -D_GNU_SOURCE \ 25 -DTEE_LOG_PATH_BASE=\"/data/vendor/log\" -DTEE_LOG_SUBFOLDER=\"hisi_logs/tee\" \ 26 -DDYNAMIC_SRV_FEIMA_DIR=\"/vendor/etc/passthrough/teeos/dynamic_srv\" \ 27 -DDYNAMIC_DRV_FEIMA_DIR=\"/vendor/etc/passthrough/teeos/dynamic_drv\" \ 28 -DLIB_TEEC_VENDOR 29 30S_CFLAGS := -Wextra -fstack-protector-all -s -Wl,-z,relro,-z,now,-z,noexecstack \ 31 -fPIE -D_FORTIFY_SOURCE=2 -O2 32 33# compile libteec.so 34MAJOR_VERSION := 1 35MINOR_VERSION := 0 36PATCH_VERSION := 0 37TARGET_LIB := libteec.so 38LIB_MAJOR := $(TARGET_LIB).$(MAJOR_VERSION) 39LIB_MAJ_MIN := $(TARGET_LIB).$(MAJOR_VERSION).$(MINOR_VERSION) 40LIB_MAJ_MIN_P := $(TARGET_LIB).$(MAJOR_VERSION).$(MINOR_VERSION).$(PATCH_VERSION) 41LIBTEEC_OUT_DIR := $(CURDIR)/out/libteec 42 43TEEC_SRCS := frameworks/libteec_vendor/tee_client_api.c \ 44 frameworks/libteec_vendor/tee_client_app_load.c \ 45 frameworks/libteec_vendor/tee_client_socket.c \ 46 frameworks/libteec_vendor/load_sec_file.c \ 47 frameworks/tee_file/tee_file.c 48 49TEEC_SRC_DIR := ${CURDIR}/../../ 50TEEC_OBJ_DIR := $(LIBTEEC_OUT_DIR) 51 52TEEC_OBJS := $(patsubst %.c,$(TEEC_OBJ_DIR)/%.o, $(TEEC_SRCS)) 53TEEC_CFLAGS := -lpthread 54TEEC_CFLAGS += -DCONFIG_ARMPC_PLATFORM -DCONFIG_AGENT_FS -DCONFIG_LOG_NO_PUBLIC 55TEEC_LIBRARY := $(LIBTEEC_OUT_DIR)/$(LIB_MAJ_MIN_P) 56TEEC_LIBRARY_LDFLAGS := $(CURDIR)/out/libsecurec/libsecurec.aarch64.a 57ifneq ($(wildcard $(TOOLCHAIN_ROOT)/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin),) 58TEEC_LIBRARY_LDFLAGS += -Wl,-z,max-page-size=0x1000 59TEEC_LIBRARY_LDFLAGS += -Wl,-z,separate-code 60endif 61 62# compile teecd 63TARGET_APP := teecd 64TEECD_OUT_DIR := $(CURDIR)/out/teecd 65 66TEECD_SRCS := services/teecd/src/tee_agent.c \ 67 services/teecd/src/tee_ca_daemon.c \ 68 services/teecd/src/late_init_agent.c \ 69 services/teecd/src/misc_work_agent.c \ 70 services/teecd/src/fs_work_agent.c \ 71 services/teecd/src/secfile_load_agent.c \ 72 services/teecd/src/tee_load_dynamic.c \ 73 services/teecd/src/tee_ca_auth.c \ 74 services/authentication/tee_get_native_cert.c \ 75 services/authentication/tcu_authentication.c \ 76 services/authentication/tee_auth_common.c \ 77 frameworks/tee_file/tee_file.c 78 79TEECD_SRC_DIR := ${CURDIR}/../../ 80TEECD_OBJ_DIR := $(TEECD_OUT_DIR) 81TEECD_OBJS := $(patsubst %.c,$(TEECD_OBJ_DIR)/%.o, $(TEECD_SRCS)) 82 83TEECD_CFLAGS += -D_GNU_SOURCE 84TEECD_CFLAGS += -DCONFIG_ARMPC_PLATFORM -DCONFIG_AGENT_FS -DCONFIG_LOG_NO_PUBLIC -DCONFIG_LATE_INIT 85 86TEECD_FILE := $(TEECD_OUT_DIR)/$(TARGET_APP) 87TEECD_LDFLAGS := -L$(TEECD_OUT_DIR)/../../libteec 88TEECD_LDFLAGS += -lpthread 89TEECD_LDFLAGS += -lrt 90TEECD_LDFLAGS += $(CURDIR)/out/libsecurec/libsecurec.aarch64.a 91 92# compile tlogcat 93TARGET_TLOGCAT := tlogcat 94TLOGCAT_OUT_DIR := $(CURDIR)/out/tlogcat/ 95TLOGCAT_FILES := services/tlogcat/src/tlogcat.c \ 96 services/tlogcat/src/sys_syslog_cfg.c \ 97 frameworks/tee_file/tee_file.c 98 99TLOGCAT_SRC_DIR := ${CURDIR}/../../ 100TLOGCAT_OBJ_DIR := $(TLOGCAT_OUT_DIR) 101TLOGCAT_OBJS := $(patsubst %.c,$(TLOGCAT_OBJ_DIR)/%.o, $(TLOGCAT_FILES)) 102TLOGCAT_FILE := $(TLOGCAT_OUT_DIR)/$(TARGET_TLOGCAT) 103 104TLOGCAT_CFLAGS += -DCONFIG_ARMPC_PLATFORM -DCONFIG_LOG_NO_PUBLIC 105TLOGCAT_CFLAGS += -DTLOGCAT_SYS_LOG 106TLOGCAT_CFLAGS += -DLOG_PATH_TEE=\"/var/log/tee/\" 107TLOGCAT_CFLAGS += -DLOG_PATH_BASE=\"/var/log/\" 108TLOGCAT_CFLAGS += -DLOG_TMPPATH_TEE=\"/var/log/tee/_tmp/\" 109TLOGCAT_CFLAGS += -DAID_SYSTEM=0 110TLOGCAT_CFLAGS += -lrt 111TLOGCAT_CFLAGS += -I$(CURDIR)/../../services/tlogcat/include 112 113TLOGCAT_LDFLAGS += $(CURDIR)/out/libsecurec/libsecurec.aarch64.a 114 115# compile libsecurec.aarch64.a 116LIBC_OUT_DIR := $(CURDIR)/out/libsecurec 117LIBC_SEC := $(LIBC_OUT_DIR)/libsecurec.aarch64.a 118 119LIBC_FILE:= \ 120 vsprintf_s.c \ 121 wmemmove_s.c \ 122 strncat_s.c \ 123 vsnprintf_s.c \ 124 fwscanf_s.c \ 125 scanf_s.c \ 126 strcat_s.c \ 127 sscanf_s.c \ 128 secureprintoutput_w.c \ 129 wmemcpy_s.c \ 130 wcsncat_s.c \ 131 secureprintoutput_a.c \ 132 secureinput_w.c \ 133 memcpy_s.c \ 134 fscanf_s.c \ 135 vswscanf_s.c \ 136 secureinput_a.c \ 137 sprintf_s.c \ 138 memmove_s.c \ 139 swscanf_s.c \ 140 snprintf_s.c \ 141 vscanf_s.c \ 142 vswprintf_s.c \ 143 wcscpy_s.c \ 144 vfwscanf_s.c \ 145 memset_s.c \ 146 wscanf_s.c \ 147 vwscanf_s.c \ 148 strtok_s.c \ 149 wcsncpy_s.c \ 150 vfscanf_s.c \ 151 vsscanf_s.c \ 152 wcstok_s.c \ 153 securecutil.c \ 154 gets_s.c \ 155 swprintf_s.c \ 156 strcpy_s.c \ 157 wcscat_s.c \ 158 strncpy_s.c 159 160LIBC_SRC_DIR := $(CURDIR)/../../../../../vendor/huawei/chipset_common/modules/libc_sec/src 161LIBC_OBJ_DIR := $(LIBC_OUT_DIR) 162 163LIBC_OBJS := $(patsubst %.c, $(LIBC_OBJ_DIR)/%.o, $(LIBC_FILE)) 164 165LIBC_INCLUDES := -I${LIBC_SRC_DIR}/../include 166 167LIBC_CFLAGS += -D_GNU_SOURCE 168LIBC_LIBRARY := $(LIBC_OUT_DIR)/libsecurec.aarch64.a 169 170LIBC_LDFLAGS += -lpthread 171LIBC_LDFLAGS += -lrt 172 173$(LIBC_SEC): $(LIBC_OBJS) 174 @echo " AR $@" 175 $(VPREFIX)$(AR) rcs $@ $^ 176 177$(LIBC_OBJ_DIR)/%.o: $(LIBC_SRC_DIR)/%.c 178 $(VPREFIX)mkdir -p $(dir $@) 179 @echo " CC $<" 180 $(VPREFIX)$(CC) $(S_CFLAGS) $(LIBC_INCLUDES) $(LIBC_LDFLAGS) -c $< -o $@ 181 182.PHONY: all clean 183 184all: $(LIBC_SEC) $(TARGET_LIB) $(TARGET_APP) $(TARGET_TLOGCAT) 185$(TARGET_APP): $(LIBC_SEC) 186$(TARGET_TLOGCAT): $(LIBC_SEC) 187 188clean: out_clean 189 190$(TARGET_LIB): $(LIBC_SEC) $(TEEC_LIBRARY) $(LIBTEEC_OUT_DIR)/libteec.a 191 $(VPREFIX)ln -sf $(LIB_MAJ_MIN_P) $(LIBTEEC_OUT_DIR)/$(LIB_MAJOR) 192 $(VPREFIX)ln -sf $(LIB_MAJ_MIN_P) $(LIBTEEC_OUT_DIR)/$(LIB_MAJ_MIN) 193 $(VPREFIX)ln -sf $(LIB_MAJOR) $(LIBTEEC_OUT_DIR)/$(TARGET_LIB) 194 195$(TEEC_LIBRARY): $(TEEC_OBJS) 196 @echo " LINK $@" 197 $(VPREFIX)$(CC) $(S_CFLAGS) -shared -Wl, -soname,$(LIB_MAJOR) $(TEEC_CFLAGS) -o $@ $+ $(TEEC_LIBRARY_LDFLAGS) 198 @echo "" 199 200$(LIBTEEC_OUT_DIR)/libteec.a: $(TEEC_OBJS) 201 @echo " AR $@" 202 $(VPREFIX)$(AR) rcs $@ $+ 203 204$(TEEC_OBJ_DIR)/%.o: ${TEEC_SRC_DIR}/%.c 205 $(VPREFIX)mkdir -p $(dir $@) 206 @echo " CC $<" 207 $(VPREFIX)$(CC) $(S_CFLAGS) $(COMMON_CFLAGS) $(TEEC_CFLAGS) -c $< -o $@ 208 209$(TARGET_APP): $(TEECD_FILE) 210 211$(TEECD_FILE): $(TEECD_OBJS) 212 @echo " LINK $@" 213 $(VPREFIX)$(CC) $(S_CFLAGS) $(TEECD_CFLAGS) -o $@ $+ $(TEECD_LDFLAGS) 214 215$(TEECD_OBJ_DIR)/%.o: $(TEECD_SRC_DIR)/%.c 216 $(VPREFIX)mkdir -p $(dir $@) 217 @echo " CC $<" 218 $(VPREFIX)$(CC) $(S_CFLAGS) $(COMMON_CFLAGS) $(COMMON_INCLUDES) $(TEECD_CFLAGS) -c $< -o $@ $(TEECD_LDFLAGS) 219 220# make tlogcat 221$(TARGET_TLOGCAT): $(TLOGCAT_FILE) 222 223$(TLOGCAT_FILE): $(TLOGCAT_OBJS) 224 @echo " LINK $@" 225 $(VPREFIX)$(CC) $(S_CFLAGS) $(TLOGCAT_CFLAGS) -o $@ $+ $(TLOGCAT_LDFLAGS) 226 227$(TLOGCAT_OBJ_DIR)/%.o: $(TLOGCAT_SRC_DIR)/%.c 228 $(VPREFIX)mkdir -p $(dir $@) 229 @echo " CC $<" 230 $(VPREFIX)$(CC) $(S_CFLAGS) $(COMMON_CFLAGS) $(COMMON_INCLUDES) $(TLOGCAT_CFLAGS) -c $< -o $@ $(TLOGCAT_LDFLAGS) 231 232# make clean 233out_clean: 234 $(RM) -rf $(CURDIR)/out