# # 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 # 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 ####################################################### # Add Hexagon compiler flags TARGET_CFLAGS += $(HEXAGON_CFLAGS) # Enable position independence. TARGET_CFLAGS += -fpic # Disable splitting double registers. TARGET_CFLAGS += -mllvm -disable-hsdr # 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__ # Hexagon Shared Object Linker Flags ########################################### 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 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 = v60 v62 # 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)