| # |
| # 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) |