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