1e656c62eSopenharmony_ci# Copyright (C) 2022 Huawei Technologies Co., Ltd.
2e656c62eSopenharmony_ci# Licensed under the Mulan PSL v2.
3e656c62eSopenharmony_ci# You can use this software according to the terms and conditions of the Mulan PSL v2.
4e656c62eSopenharmony_ci# You may obtain a copy of Mulan PSL v2 at:
5e656c62eSopenharmony_ci#     http://license.coscl.org.cn/MulanPSL2
6e656c62eSopenharmony_ci# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
7e656c62eSopenharmony_ci# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
8e656c62eSopenharmony_ci# PURPOSE.
9e656c62eSopenharmony_ci# See the Mulan PSL v2 for more details.
10e656c62eSopenharmony_ci
11e656c62eSopenharmony_ciinclude flags.mk
12e656c62eSopenharmony_ci# common flags
13e656c62eSopenharmony_ciCOMMON_INCLUDES := ${CURDIR}/../../interfaces/kits/c/include \
14e656c62eSopenharmony_ci                   ${CURDIR}/../../services/teecd/include \
15e656c62eSopenharmony_ci                   ${CURDIR}/../../services/teecd/include/standard \
16e656c62eSopenharmony_ci                   ${CURDIR}/../../services/authentication \
17e656c62eSopenharmony_ci                   ${CURDIR}/../../frameworks/include/standard/teec_vendor \
18e656c62eSopenharmony_ci                   ${CURDIR}/../../frameworks/include/standard \
19e656c62eSopenharmony_ci                   ${CURDIR}/../../frameworks/include \
20e656c62eSopenharmony_ci                   ${CURDIR}/../../frameworks/libteec_vendor \
21e656c62eSopenharmony_ci                   ${CURDIR}/../../../third_party_bounds_checking_function/include
22e656c62eSopenharmony_ciCOMMON_CFLAGS := $(addprefix -I, $(COMMON_INCLUDES)) $(CFLAGS) -D_GNU_SOURCE \
23e656c62eSopenharmony_ci				 -DTEE_LOG_PATH_BASE=\"/var/log\" -DLIB_TEEC_VENDOR -DCONFIG_TEE_PRIVATE_LOGFILE
24e656c62eSopenharmony_ci
25e656c62eSopenharmony_ciS_CFLAGS := -Wextra -fstack-protector-all -s -Wl,-z,relro,-z,now,-z,noexecstack \
26e656c62eSopenharmony_ci			-fPIE -D_FORTIFY_SOURCE=2 -O2
27e656c62eSopenharmony_ci
28e656c62eSopenharmony_ci# compile teecd
29e656c62eSopenharmony_ciTARGET_APP := teecd
30e656c62eSopenharmony_ciTEECD_OUT_DIR := $(CURDIR)/out/teecd
31e656c62eSopenharmony_ci
32e656c62eSopenharmony_ciTEECD_SRCS := services/teecd/src/tee_agent.c \
33e656c62eSopenharmony_ci			  services/teecd/src/tee_ca_daemon.c \
34e656c62eSopenharmony_ci			  services/teecd/src/late_init_agent.c \
35e656c62eSopenharmony_ci			  services/teecd/src/misc_work_agent.c \
36e656c62eSopenharmony_ci			  services/teecd/src/fs_work_agent.c \
37e656c62eSopenharmony_ci			  services/teecd/src/secfile_load_agent.c \
38e656c62eSopenharmony_ci			  services/teecd/src/tee_load_dynamic_drv.c \
39e656c62eSopenharmony_ci			  services/teecd/src/tee_ca_auth.c \
40e656c62eSopenharmony_ci			  services/authentication/tee_get_native_cert.c \
41e656c62eSopenharmony_ci			  services/authentication/tcu_authentication.c \
42e656c62eSopenharmony_ci			  services/authentication/tee_auth_common.c
43e656c62eSopenharmony_ci
44e656c62eSopenharmony_ciTEECD_SRC_DIR := ${CURDIR}/../../
45e656c62eSopenharmony_ciTEECD_OBJ_DIR := $(TEECD_OUT_DIR)
46e656c62eSopenharmony_ciTEECD_OBJS := $(patsubst %.c,$(TEECD_OBJ_DIR)/%.o,$(TEECD_SRCS))
47e656c62eSopenharmony_ci
48e656c62eSopenharmony_ciTEECD_CFLAGS += -D_GNU_SOURCE
49e656c62eSopenharmony_ciTEECD_CFLAGS += -DCONFIG_ARMPC_PLATFORM -DCONFIG_AGENT_FS
50e656c62eSopenharmony_ci
51e656c62eSopenharmony_ciTEECD_FILE := $(TEECD_OUT_DIR)/$(TARGET_APP)
52e656c62eSopenharmony_ciTEECD_LDFLAGS := -L$(TEECD_OUT_DIR)/../../libteec
53e656c62eSopenharmony_ciTEECD_LDFLAGS += -lpthread
54e656c62eSopenharmony_ciTEECD_LDFLAGS += -lrt
55e656c62eSopenharmony_ciTEECD_LDFLAGS += $(CURDIR)/out/libsecurec/libsecurec.aarch64.a
56e656c62eSopenharmony_ci
57e656c62eSopenharmony_ci# compile libsecurec.aarch64.a
58e656c62eSopenharmony_ciLIBC_OUT_DIR := $(CURDIR)/out/libsecurec
59e656c62eSopenharmony_ciLIBC_SEC := $(LIBC_OUT_DIR)/libsecurec.aarch64.a
60e656c62eSopenharmony_ci
61e656c62eSopenharmony_ciLIBC_FILE := vsprintf_s.c \
62e656c62eSopenharmony_ci		      wmemmove_s.c \
63e656c62eSopenharmony_ci			  strncat_s.c \
64e656c62eSopenharmony_ci			  vsnprintf_s.c \
65e656c62eSopenharmony_ci			  fwscanf_s.c \
66e656c62eSopenharmony_ci			  scanf_s.c	\
67e656c62eSopenharmony_ci			  strcat_s.c	\
68e656c62eSopenharmony_ci			  sscanf_s.c	\
69e656c62eSopenharmony_ci			  secureprintoutput_w.c	\
70e656c62eSopenharmony_ci			  wmemcpy_s.c	\
71e656c62eSopenharmony_ci			  wcsncat_s.c	\
72e656c62eSopenharmony_ci			  secureprintoutput_a.c	\
73e656c62eSopenharmony_ci			  secureinput_w.c	\
74e656c62eSopenharmony_ci			  memcpy_s.c	\
75e656c62eSopenharmony_ci			  fscanf_s.c	\
76e656c62eSopenharmony_ci			  vswscanf_s.c	\
77e656c62eSopenharmony_ci			  secureinput_a.c	\
78e656c62eSopenharmony_ci			  sprintf_s.c	\
79e656c62eSopenharmony_ci			  memmove_s.c	\
80e656c62eSopenharmony_ci			  swscanf_s.c	\
81e656c62eSopenharmony_ci			  snprintf_s.c	\
82e656c62eSopenharmony_ci			  vscanf_s.c	\
83e656c62eSopenharmony_ci			  vswprintf_s.c	\
84e656c62eSopenharmony_ci			  wcscpy_s.c	\
85e656c62eSopenharmony_ci			  vfwscanf_s.c	\
86e656c62eSopenharmony_ci			  memset_s.c	\
87e656c62eSopenharmony_ci			  wscanf_s.c	\
88e656c62eSopenharmony_ci			  vwscanf_s.c	\
89e656c62eSopenharmony_ci			  strtok_s.c	\
90e656c62eSopenharmony_ci			  wcsncpy_s.c	\
91e656c62eSopenharmony_ci			  vfscanf_s.c	\
92e656c62eSopenharmony_ci			  vsscanf_s.c	\
93e656c62eSopenharmony_ci			  wcstok_s.c	\
94e656c62eSopenharmony_ci			  securecutil.c	\
95e656c62eSopenharmony_ci			  gets_s.c	\
96e656c62eSopenharmony_ci			  swprintf_s.c	\
97e656c62eSopenharmony_ci			  strcpy_s.c	\
98e656c62eSopenharmony_ci			  wcscat_s.c	\
99e656c62eSopenharmony_ci			  strncpy_s.c
100e656c62eSopenharmony_ci
101e656c62eSopenharmony_ciLIBC_SRC_DIR := $(CURDIR)/../../../third_party_bounds_checking_function/src
102e656c62eSopenharmony_ciLIBC_OBJ_DIR:= $(LIBC_OUT_DIR)
103e656c62eSopenharmony_ci
104e656c62eSopenharmony_ciLIBC_OBJS := $(patsubst %.c, $(LIBC_OBJ_DIR)/%.o, $(LIBC_FILE))
105e656c62eSopenharmony_ci
106e656c62eSopenharmony_ciLIBC_INCLUDES := -I${LIBC_SRC_DIR}/../include
107e656c62eSopenharmony_ci
108e656c62eSopenharmony_ciLIBC_CFLAGS += -D_GNU_SOURCE
109e656c62eSopenharmony_ciLIBC_LIBRARY := $(LIBC_OUT_DIR)/libsecurec.aarch64.a
110e656c62eSopenharmony_ci
111e656c62eSopenharmony_ciLIBC_LDFLAGS += -lpthread
112e656c62eSopenharmony_ciLIBC_LDFLAGS += -lrt
113e656c62eSopenharmony_ci
114e656c62eSopenharmony_ci$(LIBC_SEC): $(LIBC_OBJS)
115e656c62eSopenharmony_ci	@echo " AR $@"
116e656c62eSopenharmony_ci	$(VPREFIX)$(AR) rcs $@ $^
117e656c62eSopenharmony_ci
118e656c62eSopenharmony_ci$(LIBC_OBJ_DIR)/%.o: $(LIBC_SRC_DIR)/%.c
119e656c62eSopenharmony_ci	$(VPREFIX)mkdir -p $(dir $@)
120e656c62eSopenharmony_ci	@echo " CC $<"
121e656c62eSopenharmony_ci	$(VPREFIX)$(CC) $(S_CFLAGS) $(LIBC_INCLUDES) $(LIBC_LDFLAGS) -c $< -o $@
122e656c62eSopenharmony_ci
123e656c62eSopenharmony_ci.PHONY: all clean
124e656c62eSopenharmony_ci
125e656c62eSopenharmony_ciall: $(LIBC_SEC) $(TARGET_APP)
126e656c62eSopenharmony_ci$(TARGET_APP): $(LIBC_SEC)
127e656c62eSopenharmony_ci
128e656c62eSopenharmony_ciclean: out_clean
129e656c62eSopenharmony_ci
130e656c62eSopenharmony_ci$(TARGET_APP):$(TEECD_FILE)
131e656c62eSopenharmony_ci
132e656c62eSopenharmony_ci$(TEECD_FILE):$(TEECD_OBJS)
133e656c62eSopenharmony_ci	@echo " LINK $@"
134e656c62eSopenharmony_ci	$(VPREFIX)$(CC) $(S_CFLAGS) $(TEECD_CFLAGS) -o $@ $+ $(TEECD_LDFLAGS)
135e656c62eSopenharmony_ci
136e656c62eSopenharmony_ci$(TEECD_OBJ_DIR)/%.o: $(TEECD_SRC_DIR)/%.c
137e656c62eSopenharmony_ci	$(VPREFIX)mkdir -p $(dir $@)
138e656c62eSopenharmony_ci	@echo " CC $<"
139e656c62eSopenharmony_ci	$(VPREFIX)$(CC) $(S_CFLAGS) $(COMMON_CFLAGS) $(COMMON_INCLUDES) $(TEECD_CFLAGS) -c $< -o $@ $(TEECD_LDFLAGS)
140e656c62eSopenharmony_ci
141e656c62eSopenharmony_ci# make clean
142e656c62eSopenharmony_ciout_clean:
143e656c62eSopenharmony_ci	$(RM) -rf $(CURDIR)/out
144e656c62eSopenharmony_ci			  
145