Makefile文件  |  102行  |  3.34 KB

#
# Build targets for a Hexagon-based processor
#

# Hexagon Environment Checks ###################################################

# Ensure that the user has specified a path to the Hexagon toolchain that they
# wish to use.
ifeq ($(HEXAGON_TOOLS_PREFIX),)
$(error "You must supply a HEXAGON_TOOLS_PREFIX environment variable \
         containing a path to the hexagon toolchain. Example: \
         export HEXAGON_TOOLS_PREFIX=$$HOME/Qualcomm/HEXAGON_Tools/8.0.07")
endif

ifeq ($(IS_NANOAPP_BUILD),)
ifeq ($(SLPI_PREFIX),)
$(error "You must supply an SLPI_PREFIX environment variable \
         containing a path to the SLPI source tree. Example: \
         export SLPI_PREFIX=$$HOME/slpi_proc")
endif
endif

# Hexagon Tools ################################################################

TARGET_AR = $(HEXAGON_TOOLS_PREFIX)/Tools/bin/hexagon-ar
TARGET_CC = $(HEXAGON_TOOLS_PREFIX)/Tools/bin/hexagon-clang
TARGET_LD = $(HEXAGON_TOOLS_PREFIX)/Tools/bin/hexagon-link

# Hexagon Compiler Flags #######################################################

# Define CUST_H to allow including the customer header file.
TARGET_CFLAGS += -DCUST_H

# Add Hexagon compiler flags
TARGET_CFLAGS += $(HEXAGON_CFLAGS)

# Enable position independence.
TARGET_CFLAGS += -fpic

# Disable splitting double registers.
TARGET_CFLAGS += -mllvm -disable-hsdr

# Don't use small data section.
TARGET_CFLAGS += -G0

# Enable default visibility for FastRPC entry points.
TARGET_CFLAGS += -D'__QAIC_SKEL_EXPORT=__attribute__((visibility("default")))'

# This code is loaded into a dynamic module. Define this symbol in the event
# that any Qualcomm code needs it.
TARGET_CFLAGS += -D__V_DYNAMIC__

# This flag is used by some QC-supplied code to differentiate things intended to
# run on Hexagon vs. other architectures
TARGET_CFLAGS += -DQDSP6

# Hexagon Shared Object Linker Flags ###########################################

TARGET_SO_LDFLAGS += --gc-sections
TARGET_SO_LDFLAGS += -shared
TARGET_SO_LDFLAGS += -call_shared
TARGET_SO_LDFLAGS += -Bsymbolic
TARGET_SO_LDFLAGS += --wrap=malloc
TARGET_SO_LDFLAGS += --wrap=calloc
TARGET_SO_LDFLAGS += --wrap=free
TARGET_SO_LDFLAGS += --wrap=realloc
TARGET_SO_LDFLAGS += --wrap=memalign
TARGET_SO_LDFLAGS += --wrap=__stack_chk_fail
TARGET_SO_LDFLAGS += --no-threads

HEXAGON_LIB_PATH = $(HEXAGON_TOOLS_PREFIX)/Tools/target/hexagon/lib
TARGET_SO_EARLY_LIBS += $(HEXAGON_LIB_PATH)/$(HEXAGON_ARCH)/G0/pic/initS.o
TARGET_SO_LATE_LIBS += $(HEXAGON_LIB_PATH)/$(HEXAGON_ARCH)/G0/pic/finiS.o

# Supported Hexagon Architectures ##############################################

HEXAGON_SUPPORTED_ARCHS = v55 v60 v62 v65

# Environment Checks ###########################################################

# Ensure that an architecture is chosen.
ifeq ($(filter $(HEXAGON_ARCH), $(HEXAGON_SUPPORTED_ARCHS)),)
$(error "The HEXAGON_ARCH variable must be set to a supported architecture \
         ($(HEXAGON_SUPPORTED_ARCHS))")
endif

# Target Architecture ##########################################################

# Set the Hexagon architecture.
TARGET_CFLAGS += -m$(strip $(HEXAGON_ARCH))

# Optimization Level ###########################################################

TARGET_CFLAGS += -O$(OPT_LEVEL)

# TODO: Consider disabling this when compiling for >-O0.
TARGET_CFLAGS += -D_DEBUG

# Variant Specific Sources #####################################################

TARGET_VARIANT_SRCS += $(HEXAGON_SRCS)