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.
10
11include flags.mk
12# common flags
13COMMON_INCLUDES := ${CURDIR}/../../interfaces/kits/c/include \
14                   ${CURDIR}/../../services/teecd/include \
15                   ${CURDIR}/../../services/teecd/include/standard \
16                   ${CURDIR}/../../services/authentication \
17                   ${CURDIR}/../../frameworks/include/standard/teec_vendor \
18                   ${CURDIR}/../../frameworks/include/standard \
19                   ${CURDIR}/../../frameworks/include \
20                   ${CURDIR}/../../frameworks/libteec_vendor \
21                   ${CURDIR}/../../../third_party_bounds_checking_function/include
22COMMON_CFLAGS := $(addprefix -I, $(COMMON_INCLUDES)) $(CFLAGS) -D_GNU_SOURCE \
23				 -DTEE_LOG_PATH_BASE=\"/var/log\" -DLIB_TEEC_VENDOR -DCONFIG_TEE_PRIVATE_LOGFILE
24
25S_CFLAGS := -Wextra -fstack-protector-all -s -Wl,-z,relro,-z,now,-z,noexecstack \
26			-fPIE -D_FORTIFY_SOURCE=2 -O2
27
28# compile teecd
29TARGET_APP := teecd
30TEECD_OUT_DIR := $(CURDIR)/out/teecd
31
32TEECD_SRCS := services/teecd/src/tee_agent.c \
33			  services/teecd/src/tee_ca_daemon.c \
34			  services/teecd/src/late_init_agent.c \
35			  services/teecd/src/misc_work_agent.c \
36			  services/teecd/src/fs_work_agent.c \
37			  services/teecd/src/secfile_load_agent.c \
38			  services/teecd/src/tee_load_dynamic_drv.c \
39			  services/teecd/src/tee_ca_auth.c \
40			  services/authentication/tee_get_native_cert.c \
41			  services/authentication/tcu_authentication.c \
42			  services/authentication/tee_auth_common.c
43
44TEECD_SRC_DIR := ${CURDIR}/../../
45TEECD_OBJ_DIR := $(TEECD_OUT_DIR)
46TEECD_OBJS := $(patsubst %.c,$(TEECD_OBJ_DIR)/%.o,$(TEECD_SRCS))
47
48TEECD_CFLAGS += -D_GNU_SOURCE
49TEECD_CFLAGS += -DCONFIG_ARMPC_PLATFORM -DCONFIG_AGENT_FS
50
51TEECD_FILE := $(TEECD_OUT_DIR)/$(TARGET_APP)
52TEECD_LDFLAGS := -L$(TEECD_OUT_DIR)/../../libteec
53TEECD_LDFLAGS += -lpthread
54TEECD_LDFLAGS += -lrt
55TEECD_LDFLAGS += $(CURDIR)/out/libsecurec/libsecurec.aarch64.a
56
57# compile libsecurec.aarch64.a
58LIBC_OUT_DIR := $(CURDIR)/out/libsecurec
59LIBC_SEC := $(LIBC_OUT_DIR)/libsecurec.aarch64.a
60
61LIBC_FILE := vsprintf_s.c \
62		      wmemmove_s.c \
63			  strncat_s.c \
64			  vsnprintf_s.c \
65			  fwscanf_s.c \
66			  scanf_s.c	\
67			  strcat_s.c	\
68			  sscanf_s.c	\
69			  secureprintoutput_w.c	\
70			  wmemcpy_s.c	\
71			  wcsncat_s.c	\
72			  secureprintoutput_a.c	\
73			  secureinput_w.c	\
74			  memcpy_s.c	\
75			  fscanf_s.c	\
76			  vswscanf_s.c	\
77			  secureinput_a.c	\
78			  sprintf_s.c	\
79			  memmove_s.c	\
80			  swscanf_s.c	\
81			  snprintf_s.c	\
82			  vscanf_s.c	\
83			  vswprintf_s.c	\
84			  wcscpy_s.c	\
85			  vfwscanf_s.c	\
86			  memset_s.c	\
87			  wscanf_s.c	\
88			  vwscanf_s.c	\
89			  strtok_s.c	\
90			  wcsncpy_s.c	\
91			  vfscanf_s.c	\
92			  vsscanf_s.c	\
93			  wcstok_s.c	\
94			  securecutil.c	\
95			  gets_s.c	\
96			  swprintf_s.c	\
97			  strcpy_s.c	\
98			  wcscat_s.c	\
99			  strncpy_s.c
100
101LIBC_SRC_DIR := $(CURDIR)/../../../third_party_bounds_checking_function/src
102LIBC_OBJ_DIR:= $(LIBC_OUT_DIR)
103
104LIBC_OBJS := $(patsubst %.c, $(LIBC_OBJ_DIR)/%.o, $(LIBC_FILE))
105
106LIBC_INCLUDES := -I${LIBC_SRC_DIR}/../include
107
108LIBC_CFLAGS += -D_GNU_SOURCE
109LIBC_LIBRARY := $(LIBC_OUT_DIR)/libsecurec.aarch64.a
110
111LIBC_LDFLAGS += -lpthread
112LIBC_LDFLAGS += -lrt
113
114$(LIBC_SEC): $(LIBC_OBJS)
115	@echo " AR $@"
116	$(VPREFIX)$(AR) rcs $@ $^
117
118$(LIBC_OBJ_DIR)/%.o: $(LIBC_SRC_DIR)/%.c
119	$(VPREFIX)mkdir -p $(dir $@)
120	@echo " CC $<"
121	$(VPREFIX)$(CC) $(S_CFLAGS) $(LIBC_INCLUDES) $(LIBC_LDFLAGS) -c $< -o $@
122
123.PHONY: all clean
124
125all: $(LIBC_SEC) $(TARGET_APP)
126$(TARGET_APP): $(LIBC_SEC)
127
128clean: out_clean
129
130$(TARGET_APP):$(TEECD_FILE)
131
132$(TEECD_FILE):$(TEECD_OBJS)
133	@echo " LINK $@"
134	$(VPREFIX)$(CC) $(S_CFLAGS) $(TEECD_CFLAGS) -o $@ $+ $(TEECD_LDFLAGS)
135
136$(TEECD_OBJ_DIR)/%.o: $(TEECD_SRC_DIR)/%.c
137	$(VPREFIX)mkdir -p $(dir $@)
138	@echo " CC $<"
139	$(VPREFIX)$(CC) $(S_CFLAGS) $(COMMON_CFLAGS) $(COMMON_INCLUDES) $(TEECD_CFLAGS) -c $< -o $@ $(TEECD_LDFLAGS)
140
141# make clean
142out_clean:
143	$(RM) -rf $(CURDIR)/out
144
145