• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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