• 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.
10
11MODULE_FOLDER := $(shell basename $(CURDIR))
12
13ifeq ($(ARCH),)
14$(error ARCH must be set, now we support both arm and aarch64)
15endif
16
17# default target
18default: all
19
20inc-flags += -I$(TEE_SECUREC_DIR)/include
21INCLUDE_PATH += $(PREBUILD_DIR)/headers/
22INCLUDE_PATH += $(TOPDIR)/tools/
23
24ifeq ($(TARGET_IS_HOST),)
25# use musl lib c headers.
26inc-flags += -I$(PREBUILD_LIBC_INC) -I$(PREBUILD_LIBC_INC)/arch/generic -I$(PREBUILD_LIBC_INC)/arch/$(ARCH)
27## for some header file include "alltypes.h" directly.
28inc-flags += -I$(PREBUILD_LIBC_INC)/arch/$(ARCH)/bits
29flags += -nodefaultlibs -nostdinc -std=gnu11
30endif
31
32# all target flags for both c & c++ compiler
33ifneq ($(TARGET_IS_HOST),y)
34flags += -Oz
35else
36#gcc optimization flags
37flags += -Os
38endif
39
40ifeq ($(TARGET_IS_HOST),)
41ifeq ($(CONFIG_LLVM_LTO),y)
42flags += -flto -fsplit-lto-unit
43endif
44endif
45
46# other options
47flags += -fPIC -fstack-protector-strong
48flags += -fno-omit-frame-pointer -fno-short-enums
49flags += -include$(PREBUILD_DIR)/headers/platautoconf.h
50flags += -DARM_PAE=1
51flags += -DARCH_ARM -DAARCH64 -D__KERNEL_64__ -DARMV8_A -DARM_CORTEX_A53 -DDEBUG -DNDEBUG
52flags += -DHAVE_AUTOCONF
53flags += -DVFMW_EXTRA_TYPE_DEFINE -DENV_SOS_KERNEL
54ifeq ($(CONFIG_UBSAN),y)
55flags += -fsanitize=bounds-strict -fsanitize-address-use-after-scope -fsanitize-undefined-trap-on-error
56endif
57
58## argument pointer will be aligned with 1 Byte
59ifneq ($(TARGET_IS_HOST),y)
60ifeq ($(ARCH),arm)
61ifeq (${CONFIG_UNALIGNED_ACCESS},y)
62flags += -munaligned-access -fmax-type-align=1
63endif
64endif
65endif
66flags += -fno-builtin
67flags += -D__FILE__=0 -Wno-builtin-macro-redefined
68
69ifeq ($(CONFIG_HW_SECUREC_MIN_MEM),y)
70flags += -DSECUREC_WARP_OUTPUT=1 -DSECUREC_WITH_PERFORMANCE_ADDONS=0
71endif
72
73ifeq ($(CONFIG_DEBUG_BUILD), y)
74CFLAGS += -g
75ASFLAGS += -g
76endif
77
78LDFLAGS += -s -z separate-loadable-segments
79
80# all target for c++ compiler
81cxx-flags += -funwind-tables -fexceptions -std=gnu++11 -frtti -fno-builtin
82
83#include the sub makefile as needed
84include $(BUILD_CONFIG)/var.mk
85include $(BUILD_OPERATION)/rule.mk
86
87flags += $(TRUSTEDCORE_PLATFORM_FLAGS)
88CFLAGS   += ${TRUSTEDCORE_PLATFORM_FLAGS} -D__LITEOS__
89CPPFLAGS += ${TRUSTEDCORE_PLATFORM_FLAGS}
90CXXFLAGS += ${TRUSTEDCORE_PLATFORM_FLAGS}
91ASFLAGS  += ${TRUSTEDCORE_PLATFORM_FLAGS}
92# always generate compiling object file rule
93$(eval $(call eval_objs,$(MODULE_FOLDER)))
94
95# compile libs
96ifneq ($(MODULE),)
97INSTALL_FILE := $(LIB_DIR)/$(MODULE)
98MODULE_FILE  := $(BUILD_DIR)/$(MODULE)
99target: $(MODULE_FILE)
100$(eval $(call eval_libs,$(MODULE_FOLDER),$(MODULE_FILE)))
101## install libs
102$(INSTALL_FILE): $(MODULE_FILE)
103	@test -d $(LIB_DIR) || mkdir -p $(LIB_DIR)
104	@echo "[ INSTALL MODULE ] $(MODULE_FILE)"
105	$(VER)cp -rafp $(MODULE_FILE) $(INSTALL_FILE)
106	touch $(INSTALL_FILE)
107endif
108
109ifneq ($(TARGET)$(DRIVER),)
110ifneq ($(TARGET),)
111INSTALL_FILE := $(APP_DIR)/$(TARGET)
112TARGET_FILE  := $(BUILD_DIR)/$(TARGET)
113else
114INSTALL_FILE := $(DRV_DIR)/$(DRIVER)
115TARGET_FILE  := $(BUILD_DIR)/$(DRIVER)
116endif
117target: $(TARGET_FILE)
118$(eval $(call eval_dep_libs,$(MODULE_FOLDER),$(LIB_DIR),$(LIBS:%=lib%.a)))
119$(eval $(call eval_elf,$(MODULE_FOLDER),$(TARGET_FILE)))
120$(INSTALL_FILE): $(TARGET_FILE)
121	@test -d $(APP_DIR) || mkdir -p $(APP_DIR)
122	@test -d $(DRV_DIR) || mkdir -p $(DRV_DIR)
123	$(VER)cp -rafp $(TARGET_FILE) $(INSTALL_FILE)
124	touch $(INSTALL_FILE)
125endif
126
127# all the target
128all: target install
129
130## this is ugly..
131ifneq ($(EXPORT_HDRS),)
132install_headers:
133	@echo "cp export_hdrs=${EXPORT_HDRS} installdir=${HDR_INSTALL_DIR}"
134	@ cp -raf $(EXPORT_HDRS) $(HDR_INSTALL_DIR)/
135else
136install_headers:
137
138endif
139install: $(INSTALL_FILE)
140