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\" -DLIB_TEEC_VENDOR 26 27S_CFLAGS := -Wextra -fstack-protector-all -s -Wl,-z,relro,-z,now,-z,noexecstack \ 28 -fPIE -D_FORTIFY_SOURCE=2 -O2 29 30# compile libteec.so 31MAJOR_VERSION := 1 32MINOR_VERSION := 0 33PATCH_VERSION := 0 34TARGET_LIB := libteec.so 35LIB_MAJOR := $(TARGET_LIB).$(MAJOR_VERSION) 36LIB_MAJ_MIN := $(TARGET_LIB).$(MAJOR_VERSION).$(MINOR_VERSION) 37LIB_MAJ_MIN_P := $(TARGET_LIB).$(MAJOR_VERSION).$(MINOR_VERSION).$(PATCH_VERSION) 38LIBTEEC_OUT_DIR := $(CURDIR)/out/libteec 39 40TEEC_SRCS := frameworks/libteec_vendor/tee_client_api.c \ 41 frameworks/libteec_vendor/tee_client_app_load.c \ 42 frameworks/libteec_vendor/tee_client_socket.c \ 43 frameworks/libteec_vendor/load_sec_file.c \ 44 frameworks/tee_file/tee_file.c 45 46TEEC_SRC_DIR := ${CURDIR}/../../ 47TEEC_OBJ_DIR := $(LIBTEEC_OUT_DIR) 48 49TEEC_OBJS := $(patsubst %.c,$(TEEC_OBJ_DIR)/%.o, $(TEEC_SRCS)) 50TEEC_CFLAGS := -lpthread 51TEEC_CFLAGS += -DCONFIG_ARMPC_PLATFORM -DCONFIG_AGENT_FS -DCONFIG_LOG_NO_PUBLIC 52TEEC_LIBRARY := $(LIBTEEC_OUT_DIR)/$(LIB_MAJ_MIN_P) 53TEEC_LIBRARY_LDFLAGS := $(CURDIR)/out/libsecurec/libsecurec.aarch64.a 54 55# compile teecd 56TARGET_APP := teecd 57TEECD_OUT_DIR := $(CURDIR)/out/teecd 58 59TEECD_SRCS := services/teecd/src/tee_agent.c \ 60 services/teecd/src/tee_ca_daemon.c \ 61 services/teecd/src/late_init_agent.c \ 62 services/teecd/src/misc_work_agent.c \ 63 services/teecd/src/fs_work_agent.c \ 64 services/teecd/src/secfile_load_agent.c \ 65 services/teecd/src/tee_load_dynamic.c \ 66 services/teecd/src/tee_ca_auth.c \ 67 services/authentication/tee_get_native_cert.c \ 68 services/authentication/tcu_authentication.c \ 69 services/authentication/tee_auth_common.c \ 70 frameworks/tee_file/tee_file.c 71 72TEECD_SRC_DIR := ${CURDIR}/../../ 73TEECD_OBJ_DIR := $(TEECD_OUT_DIR) 74TEECD_OBJS := $(patsubst %.c,$(TEECD_OBJ_DIR)/%.o, $(TEECD_SRCS)) 75 76TEECD_CFLAGS += -D_GNU_SOURCE 77TEECD_CFLAGS += -DCONFIG_ARMPC_PLATFORM -DCONFIG_AGENT_FS -DCONFIG_LOG_NO_PUBLIC -DCONFIG_LATE_INIT 78 79TEECD_FILE := $(TEECD_OUT_DIR)/$(TARGET_APP) 80TEECD_LDFLAGS := -L$(TEECD_OUT_DIR)/../../libteec 81TEECD_LDFLAGS += -lpthread 82TEECD_LDFLAGS += -lrt 83TEECD_LDFLAGS += $(CURDIR)/out/libsecurec/libsecurec.aarch64.a 84 85# compile tlogcat 86TARGET_TLOGCAT := tlogcat 87TLOGCAT_OUT_DIR := $(CURDIR)/out/tlogcat/ 88TLOGCAT_FILES := services/tlogcat/src/tlogcat.c \ 89 services/tlogcat/src/sys_syslog_cfg.c \ 90 frameworks/tee_file/tee_file.c 91 92TLOGCAT_SRC_DIR := ${CURDIR}/../../ 93TLOGCAT_OBJ_DIR := $(TLOGCAT_OUT_DIR) 94TLOGCAT_OBJS := $(patsubst %.c,$(TLOGCAT_OBJ_DIR)/%.o, $(TLOGCAT_FILES)) 95TLOGCAT_FILE := $(TLOGCAT_OUT_DIR)/$(TARGET_TLOGCAT) 96 97TLOGCAT_CFLAGS += -DCONFIG_ARMPC_PLATFORM -DCONFIG_LOG_NO_PUBLIC 98TLOGCAT_CFLAGS += -DTLOGCAT_SYS_LOG 99TLOGCAT_CFLAGS += -DLOG_PATH_TEE=\"/var/log/tee/\" 100TLOGCAT_CFLAGS += -DLOG_PATH_BASE=\"/var/log/\" 101TLOGCAT_CFLAGS += -DLOG_TMPPATH_TEE=\"/var/log/tee/_tmp/\" 102TLOGCAT_CFLAGS += -DAID_SYSTEM=0 103TLOGCAT_CFLAGS += -lrt 104TLOGCAT_CFLAGS += -I$(CURDIR)/../../services/tlogcat/include 105 106TLOGCAT_LDFLAGS += $(CURDIR)/out/libsecurec/libsecurec.aarch64.a 107 108# compile libsecurec.aarch64.a 109LIBC_OUT_DIR := $(CURDIR)/out/libsecurec 110LIBC_SEC := $(LIBC_OUT_DIR)/libsecurec.aarch64.a 111 112LIBC_FILE:= \ 113 vsprintf_s.c \ 114 wmemmove_s.c \ 115 strncat_s.c \ 116 vsnprintf_s.c \ 117 fwscanf_s.c \ 118 scanf_s.c \ 119 strcat_s.c \ 120 sscanf_s.c \ 121 secureprintoutput_w.c \ 122 wmemcpy_s.c \ 123 wcsncat_s.c \ 124 secureprintoutput_a.c \ 125 secureinput_w.c \ 126 memcpy_s.c \ 127 fscanf_s.c \ 128 vswscanf_s.c \ 129 secureinput_a.c \ 130 sprintf_s.c \ 131 memmove_s.c \ 132 swscanf_s.c \ 133 snprintf_s.c \ 134 vscanf_s.c \ 135 vswprintf_s.c \ 136 wcscpy_s.c \ 137 vfwscanf_s.c \ 138 memset_s.c \ 139 wscanf_s.c \ 140 vwscanf_s.c \ 141 strtok_s.c \ 142 wcsncpy_s.c \ 143 vfscanf_s.c \ 144 vsscanf_s.c \ 145 wcstok_s.c \ 146 securecutil.c \ 147 gets_s.c \ 148 swprintf_s.c \ 149 strcpy_s.c \ 150 wcscat_s.c \ 151 strncpy_s.c 152 153LIBC_SRC_DIR := $(CURDIR)/../../../../../vendor/huawei/chipset_common/modules/libc_sec/src 154LIBC_OBJ_DIR := $(LIBC_OUT_DIR) 155 156LIBC_OBJS := $(patsubst %.c, $(LIBC_OBJ_DIR)/%.o, $(LIBC_FILE)) 157 158LIBC_INCLUDES := -I${LIBC_SRC_DIR}/../include 159 160LIBC_CFLAGS += -D_GNU_SOURCE 161LIBC_LIBRARY := $(LIBC_OUT_DIR)/libsecurec.aarch64.a 162 163LIBC_LDFLAGS += -lpthread 164LIBC_LDFLAGS += -lrt 165 166$(LIBC_SEC): $(LIBC_OBJS) 167 @echo " AR $@" 168 $(VPREFIX)$(AR) rcs $@ $^ 169 170$(LIBC_OBJ_DIR)/%.o: $(LIBC_SRC_DIR)/%.c 171 $(VPREFIX)mkdir -p $(dir $@) 172 @echo " CC $<" 173 $(VPREFIX)$(CC) $(S_CFLAGS) $(LIBC_INCLUDES) $(LIBC_LDFLAGS) -c $< -o $@ 174 175.PHONY: all clean 176 177all: $(LIBC_SEC) $(TARGET_LIB) $(TARGET_APP) $(TARGET_TLOGCAT) 178$(TARGET_APP): $(LIBC_SEC) 179$(TARGET_TLOGCAT): $(LIBC_SEC) 180 181clean: out_clean 182 183$(TARGET_LIB): $(LIBC_SEC) $(TEEC_LIBRARY) $(LIBTEEC_OUT_DIR)/libteec.a 184 $(VPREFIX)ln -sf $(LIB_MAJ_MIN_P) $(LIBTEEC_OUT_DIR)/$(LIB_MAJOR) 185 $(VPREFIX)ln -sf $(LIB_MAJ_MIN_P) $(LIBTEEC_OUT_DIR)/$(LIB_MAJ_MIN) 186 $(VPREFIX)ln -sf $(LIB_MAJOR) $(LIBTEEC_OUT_DIR)/$(TARGET_LIB) 187 188$(TEEC_LIBRARY): $(TEEC_OBJS) 189 @echo " LINK $@" 190 $(VPREFIX)$(CC) $(S_CFLAGS) -shared -Wl, -soname,$(LIB_MAJOR) $(TEEC_CFLAGS) -o $@ $+ $(TEEC_LIBRARY_LDFLAGS) 191 @echo "" 192 193$(LIBTEEC_OUT_DIR)/libteec.a: $(TEEC_OBJS) 194 @echo " AR $@" 195 $(VPREFIX)$(AR) rcs $@ $+ 196 197$(TEEC_OBJ_DIR)/%.o: ${TEEC_SRC_DIR}/%.c 198 $(VPREFIX)mkdir -p $(dir $@) 199 @echo " CC $<" 200 $(VPREFIX)$(CC) $(S_CFLAGS) $(COMMON_CFLAGS) $(TEEC_CFLAGS) -c $< -o $@ 201 202$(TARGET_APP): $(TEECD_FILE) 203 204$(TEECD_FILE): $(TEECD_OBJS) 205 @echo " LINK $@" 206 $(VPREFIX)$(CC) $(S_CFLAGS) $(TEECD_CFLAGS) -o $@ $+ $(TEECD_LDFLAGS) 207 208$(TEECD_OBJ_DIR)/%.o: $(TEECD_SRC_DIR)/%.c 209 $(VPREFIX)mkdir -p $(dir $@) 210 @echo " CC $<" 211 $(VPREFIX)$(CC) $(S_CFLAGS) $(COMMON_CFLAGS) $(COMMON_INCLUDES) $(TEECD_CFLAGS) -c $< -o $@ $(TEECD_LDFLAGS) 212 213# make tlogcat 214$(TARGET_TLOGCAT): $(TLOGCAT_FILE) 215 216$(TLOGCAT_FILE): $(TLOGCAT_OBJS) 217 @echo " LINK $@" 218 $(VPREFIX)$(CC) $(S_CFLAGS) $(TLOGCAT_CFLAGS) -o $@ $+ $(TLOGCAT_LDFLAGS) 219 220$(TLOGCAT_OBJ_DIR)/%.o: $(TLOGCAT_SRC_DIR)/%.c 221 $(VPREFIX)mkdir -p $(dir $@) 222 @echo " CC $<" 223 $(VPREFIX)$(CC) $(S_CFLAGS) $(COMMON_CFLAGS) $(COMMON_INCLUDES) $(TLOGCAT_CFLAGS) -c $< -o $@ $(TLOGCAT_LDFLAGS) 224 225# make clean 226out_clean: 227 $(RM) -rf $(CURDIR)/out