1cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# 2cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# Build targets for a Hexagon-based processor 3cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# 4cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 5cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# Hexagon Environment Checks ################################################### 6cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 7cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# Ensure that the user has specified a path to the Hexagon toolchain that they 8cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# wish to use. 9cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignolifeq ($(HEXAGON_TOOLS_PREFIX),) 10cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol$(error "You must supply a HEXAGON_TOOLS_PREFIX environment variable \ 11cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol containing a path to the hexagon toolchain. Example: \ 12cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol export HEXAGON_TOOLS_PREFIX=$$HOME/Qualcomm/HEXAGON_Tools/8.0.07") 13cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignolendif 14cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 15f5295db79842ba1d1e948b43b50683cb4a8361f2Andrew Rossignolifeq ($(IS_NANOAPP_BUILD),) 167dbbe9837ad0cc60387a269f0bd6daa51bcd522bAndrew Rossignolifeq ($(SLPI_PREFIX),) 177dbbe9837ad0cc60387a269f0bd6daa51bcd522bAndrew Rossignol$(error "You must supply an SLPI_PREFIX environment variable \ 187dbbe9837ad0cc60387a269f0bd6daa51bcd522bAndrew Rossignol containing a path to the SLPI source tree. Example: \ 197dbbe9837ad0cc60387a269f0bd6daa51bcd522bAndrew Rossignol export SLPI_PREFIX=$$HOME/slpi_proc") 207dbbe9837ad0cc60387a269f0bd6daa51bcd522bAndrew Rossignolendif 217dbbe9837ad0cc60387a269f0bd6daa51bcd522bAndrew Rossignolendif 227dbbe9837ad0cc60387a269f0bd6daa51bcd522bAndrew Rossignol 23cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# Hexagon Tools ################################################################ 24cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 25cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew RossignolTARGET_AR = $(HEXAGON_TOOLS_PREFIX)/Tools/bin/hexagon-ar 26cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew RossignolTARGET_CC = $(HEXAGON_TOOLS_PREFIX)/Tools/bin/hexagon-clang 27cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew RossignolTARGET_LD = $(HEXAGON_TOOLS_PREFIX)/Tools/bin/hexagon-link 28cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 29cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# Hexagon Compiler Flags ####################################################### 30cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 31199aabe891a6b2bc7c9c3c15a22a5c3ae1cb6f9dAlexey Polyudov# Define CUST_H to allow including the customer header file. 32199aabe891a6b2bc7c9c3c15a22a5c3ae1cb6f9dAlexey PolyudovTARGET_CFLAGS += -DCUST_H 33199aabe891a6b2bc7c9c3c15a22a5c3ae1cb6f9dAlexey Polyudov 34cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# Add Hexagon compiler flags 35cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew RossignolTARGET_CFLAGS += $(HEXAGON_CFLAGS) 36cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 37cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# Enable position independence. 38cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew RossignolTARGET_CFLAGS += -fpic 39cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 40cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# Disable splitting double registers. 41cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew RossignolTARGET_CFLAGS += -mllvm -disable-hsdr 42cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 4355095650d5c60ec982e0b9845ef719bb0f3d0a54Brian Duddie# Don't use small data section. 4455095650d5c60ec982e0b9845ef719bb0f3d0a54Brian DuddieTARGET_CFLAGS += -G0 4555095650d5c60ec982e0b9845ef719bb0f3d0a54Brian Duddie 469695b7bc89781c40aeb545ac0e879ff063590bf0Andrew Rossignol# Enable default visibility for FastRPC entry points. 479695b7bc89781c40aeb545ac0e879ff063590bf0Andrew RossignolTARGET_CFLAGS += -D'__QAIC_SKEL_EXPORT=__attribute__((visibility("default")))' 489695b7bc89781c40aeb545ac0e879ff063590bf0Andrew Rossignol 49cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# This code is loaded into a dynamic module. Define this symbol in the event 50cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# that any Qualcomm code needs it. 51cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew RossignolTARGET_CFLAGS += -D__V_DYNAMIC__ 52cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 53b9d199936165f42ac7e7eabac1bdb4968d938f4fBrian Duddie# This flag is used by some QC-supplied code to differentiate things intended to 54b9d199936165f42ac7e7eabac1bdb4968d938f4fBrian Duddie# run on Hexagon vs. other architectures 55b9d199936165f42ac7e7eabac1bdb4968d938f4fBrian DuddieTARGET_CFLAGS += -DQDSP6 56b9d199936165f42ac7e7eabac1bdb4968d938f4fBrian Duddie 57f5ea59c5ffcf5d41995f81cee2ae31639f666bd9Andrew Rossignol# Hexagon Shared Object Linker Flags ########################################### 58cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 59548ffded9d7e5f6385c67b0184779a062b53f146Andrew RossignolTARGET_SO_LDFLAGS += --gc-sections 60f5ea59c5ffcf5d41995f81cee2ae31639f666bd9Andrew RossignolTARGET_SO_LDFLAGS += -shared 61f5ea59c5ffcf5d41995f81cee2ae31639f666bd9Andrew RossignolTARGET_SO_LDFLAGS += -call_shared 62ac0b5a00a6d379e13f08b6b034d3fb7c16733281Andrew RossignolTARGET_SO_LDFLAGS += -Bsymbolic 63ac0b5a00a6d379e13f08b6b034d3fb7c16733281Andrew RossignolTARGET_SO_LDFLAGS += --wrap=malloc 64ac0b5a00a6d379e13f08b6b034d3fb7c16733281Andrew RossignolTARGET_SO_LDFLAGS += --wrap=calloc 65ac0b5a00a6d379e13f08b6b034d3fb7c16733281Andrew RossignolTARGET_SO_LDFLAGS += --wrap=free 66ac0b5a00a6d379e13f08b6b034d3fb7c16733281Andrew RossignolTARGET_SO_LDFLAGS += --wrap=realloc 67ac0b5a00a6d379e13f08b6b034d3fb7c16733281Andrew RossignolTARGET_SO_LDFLAGS += --wrap=memalign 68ac0b5a00a6d379e13f08b6b034d3fb7c16733281Andrew RossignolTARGET_SO_LDFLAGS += --wrap=__stack_chk_fail 696311392f838833110fe70be5e231785c8b145536Andrew RossignolTARGET_SO_LDFLAGS += --no-threads 70ac0b5a00a6d379e13f08b6b034d3fb7c16733281Andrew Rossignol 71ac0b5a00a6d379e13f08b6b034d3fb7c16733281Andrew RossignolHEXAGON_LIB_PATH = $(HEXAGON_TOOLS_PREFIX)/Tools/target/hexagon/lib 72ac0b5a00a6d379e13f08b6b034d3fb7c16733281Andrew RossignolTARGET_SO_EARLY_LIBS += $(HEXAGON_LIB_PATH)/$(HEXAGON_ARCH)/G0/pic/initS.o 73ac0b5a00a6d379e13f08b6b034d3fb7c16733281Andrew RossignolTARGET_SO_LATE_LIBS += $(HEXAGON_LIB_PATH)/$(HEXAGON_ARCH)/G0/pic/finiS.o 74cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 75cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# Supported Hexagon Architectures ############################################## 76cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 77f8ade8e40280498ec008556a02cb1720b8402530Alexey PolyudovHEXAGON_SUPPORTED_ARCHS = v55 v60 v62 v65 78cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 79cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# Environment Checks ########################################################### 80cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 81cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# Ensure that an architecture is chosen. 82cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignolifeq ($(filter $(HEXAGON_ARCH), $(HEXAGON_SUPPORTED_ARCHS)),) 83cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol$(error "The HEXAGON_ARCH variable must be set to a supported architecture \ 84cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol ($(HEXAGON_SUPPORTED_ARCHS))") 85cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignolendif 86cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 87cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# Target Architecture ########################################################## 88cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 89cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# Set the Hexagon architecture. 90cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew RossignolTARGET_CFLAGS += -m$(strip $(HEXAGON_ARCH)) 91cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 92cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# Optimization Level ########################################################### 93cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 94cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew RossignolTARGET_CFLAGS += -O$(OPT_LEVEL) 95cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 96cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# TODO: Consider disabling this when compiling for >-O0. 97cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew RossignolTARGET_CFLAGS += -D_DEBUG 98cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 99cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol# Variant Specific Sources ##################################################### 100cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew Rossignol 101cb0ca9cfdfa880d56d8ce90422a761e61b677cbcAndrew RossignolTARGET_VARIANT_SRCS += $(HEXAGON_SRCS) 102