1*84e33947SAndroid Build Coastguard Worker# 2*84e33947SAndroid Build Coastguard Worker# Build targets for a Hexagon-based processor 3*84e33947SAndroid Build Coastguard Worker# 4*84e33947SAndroid Build Coastguard Worker 5*84e33947SAndroid Build Coastguard Worker# Hexagon Environment Checks ################################################### 6*84e33947SAndroid Build Coastguard Worker 7*84e33947SAndroid Build Coastguard Worker# Ensure that the user has specified a path to the Hexagon toolchain that they 8*84e33947SAndroid Build Coastguard Worker# wish to use. 9*84e33947SAndroid Build Coastguard Workerifeq ($(HEXAGON_TOOLS_PREFIX),) 10*84e33947SAndroid Build Coastguard Worker$(error "You must supply a HEXAGON_TOOLS_PREFIX environment variable \ 11*84e33947SAndroid Build Coastguard Worker containing a path to the hexagon toolchain. Example: \ 12*84e33947SAndroid Build Coastguard Worker export HEXAGON_TOOLS_PREFIX=$$HOME/Qualcomm/HEXAGON_Tools/8.0.07") 13*84e33947SAndroid Build Coastguard Workerendif 14*84e33947SAndroid Build Coastguard Worker 15*84e33947SAndroid Build Coastguard Workerifeq ($(IS_NANOAPP_BUILD),) 16*84e33947SAndroid Build Coastguard Workerifeq ($(SLPI_PREFIX),) 17*84e33947SAndroid Build Coastguard Worker$(error "You must supply an SLPI_PREFIX environment variable \ 18*84e33947SAndroid Build Coastguard Worker containing a path to the SLPI source tree. Example: \ 19*84e33947SAndroid Build Coastguard Worker export SLPI_PREFIX=$$HOME/slpi_proc") 20*84e33947SAndroid Build Coastguard Workerendif 21*84e33947SAndroid Build Coastguard Workerendif 22*84e33947SAndroid Build Coastguard Worker 23*84e33947SAndroid Build Coastguard Worker# Hexagon Tools ################################################################ 24*84e33947SAndroid Build Coastguard Worker 25*84e33947SAndroid Build Coastguard WorkerTARGET_AR = $(HEXAGON_TOOLS_PREFIX)/Tools/bin/hexagon-ar 26*84e33947SAndroid Build Coastguard WorkerTARGET_CC = $(HEXAGON_TOOLS_PREFIX)/Tools/bin/hexagon-clang 27*84e33947SAndroid Build Coastguard WorkerTARGET_LD = $(HEXAGON_TOOLS_PREFIX)/Tools/bin/hexagon-link 28*84e33947SAndroid Build Coastguard Worker 29*84e33947SAndroid Build Coastguard Worker# Hexagon Compiler Flags ####################################################### 30*84e33947SAndroid Build Coastguard Worker 31*84e33947SAndroid Build Coastguard Worker# Define CUST_H to allow including the customer header file. 32*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS += -DCUST_H='"custaaaaaaaaq.h"' 33*84e33947SAndroid Build Coastguard Worker 34*84e33947SAndroid Build Coastguard Worker# Add Hexagon compiler flags 35*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS += $(HEXAGON_CFLAGS) 36*84e33947SAndroid Build Coastguard Worker 37*84e33947SAndroid Build Coastguard Worker# Enable position independence. 38*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS += -fpic 39*84e33947SAndroid Build Coastguard Worker 40*84e33947SAndroid Build Coastguard Worker# Disable splitting double registers. 41*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS += -mllvm -disable-hsdr 42*84e33947SAndroid Build Coastguard Worker 43*84e33947SAndroid Build Coastguard Worker# Don't use small data section. 44*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS += -G0 45*84e33947SAndroid Build Coastguard Worker 46*84e33947SAndroid Build Coastguard Worker# Enable default visibility for FastRPC entry points. 47*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS += -D'__QAIC_SKEL_EXPORT=__attribute__((visibility("default")))' 48*84e33947SAndroid Build Coastguard Worker 49*84e33947SAndroid Build Coastguard Worker# This code is loaded into a dynamic module. Define this symbol in the event 50*84e33947SAndroid Build Coastguard Worker# that any Qualcomm code needs it. 51*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS += -D__V_DYNAMIC__ 52*84e33947SAndroid Build Coastguard Worker 53*84e33947SAndroid Build Coastguard Worker# This flag is used by some QC-supplied code to differentiate things intended to 54*84e33947SAndroid Build Coastguard Worker# run on Hexagon vs. other architectures 55*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS += -DQDSP6 56*84e33947SAndroid Build Coastguard Worker 57*84e33947SAndroid Build Coastguard Worker# Declare support for std headers that the QC SDK contains so that libs like 58*84e33947SAndroid Build Coastguard Worker# pigweed don't try to redefine functionality. 59*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS += -D__cpp_lib_byte=201603L 60*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS += -D__cpp_lib_integer_sequence=201304L 61*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS += -D__cpp_lib_is_null_pointer=201309L 62*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS += -D__cpp_lib_logical_traits=201510L 63*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS += -D__cpp_lib_nonmember_container_access=201411L 64*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS += -D__cpp_lib_transformation_trait_aliases=201304L 65*84e33947SAndroid Build Coastguard Worker 66*84e33947SAndroid Build Coastguard Worker# Hexagon Shared Object Linker Flags ########################################### 67*84e33947SAndroid Build Coastguard Worker 68*84e33947SAndroid Build Coastguard WorkerTARGET_SO_LDFLAGS += --gc-sections 69*84e33947SAndroid Build Coastguard WorkerTARGET_SO_LDFLAGS += -shared 70*84e33947SAndroid Build Coastguard WorkerTARGET_SO_LDFLAGS += -call_shared 71*84e33947SAndroid Build Coastguard WorkerTARGET_SO_LDFLAGS += -Bsymbolic 72*84e33947SAndroid Build Coastguard WorkerTARGET_SO_LDFLAGS += --wrap=malloc 73*84e33947SAndroid Build Coastguard WorkerTARGET_SO_LDFLAGS += --wrap=calloc 74*84e33947SAndroid Build Coastguard WorkerTARGET_SO_LDFLAGS += --wrap=free 75*84e33947SAndroid Build Coastguard WorkerTARGET_SO_LDFLAGS += --wrap=realloc 76*84e33947SAndroid Build Coastguard WorkerTARGET_SO_LDFLAGS += --wrap=memalign 77*84e33947SAndroid Build Coastguard WorkerTARGET_SO_LDFLAGS += --wrap=__stack_chk_fail 78*84e33947SAndroid Build Coastguard WorkerTARGET_SO_LDFLAGS += --no-threads 79*84e33947SAndroid Build Coastguard Worker 80*84e33947SAndroid Build Coastguard WorkerHEXAGON_LIB_PATH = $(HEXAGON_TOOLS_PREFIX)/Tools/target/hexagon/lib 81*84e33947SAndroid Build Coastguard WorkerTARGET_SO_EARLY_LIBS += $(HEXAGON_LIB_PATH)/$(HEXAGON_ARCH)/G0/pic/initS.o 82*84e33947SAndroid Build Coastguard WorkerTARGET_SO_LATE_LIBS += $(HEXAGON_LIB_PATH)/$(HEXAGON_ARCH)/G0/pic/finiS.o 83*84e33947SAndroid Build Coastguard WorkerTARGET_SO_LATE_LIBS += $(LDLIBS) 84*84e33947SAndroid Build Coastguard Worker 85*84e33947SAndroid Build Coastguard Worker# Supported Hexagon Architectures ############################################## 86*84e33947SAndroid Build Coastguard Worker 87*84e33947SAndroid Build Coastguard WorkerHEXAGON_SUPPORTED_ARCHS = v55 v60 v62 v65 v66 88*84e33947SAndroid Build Coastguard Worker 89*84e33947SAndroid Build Coastguard Worker# Environment Checks ########################################################### 90*84e33947SAndroid Build Coastguard Worker 91*84e33947SAndroid Build Coastguard Worker# Ensure that an architecture is chosen. 92*84e33947SAndroid Build Coastguard Workerifeq ($(filter $(HEXAGON_ARCH), $(HEXAGON_SUPPORTED_ARCHS)),) 93*84e33947SAndroid Build Coastguard Worker$(error "The HEXAGON_ARCH variable must be set to a supported architecture \ 94*84e33947SAndroid Build Coastguard Worker ($(HEXAGON_SUPPORTED_ARCHS))") 95*84e33947SAndroid Build Coastguard Workerendif 96*84e33947SAndroid Build Coastguard Worker 97*84e33947SAndroid Build Coastguard Worker# Target Architecture ########################################################## 98*84e33947SAndroid Build Coastguard Worker 99*84e33947SAndroid Build Coastguard Worker# Set the Hexagon architecture. 100*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS += -m$(strip $(HEXAGON_ARCH)) 101*84e33947SAndroid Build Coastguard Worker 102*84e33947SAndroid Build Coastguard Worker# Optimization Level ########################################################### 103*84e33947SAndroid Build Coastguard Worker 104*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS += -O$(OPT_LEVEL) 105*84e33947SAndroid Build Coastguard Worker 106*84e33947SAndroid Build Coastguard Worker# TODO: Consider disabling this when compiling for >-O0. 107*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS += -D_DEBUG 108*84e33947SAndroid Build Coastguard Worker 109*84e33947SAndroid Build Coastguard Worker# Variant Specific Sources ##################################################### 110*84e33947SAndroid Build Coastguard Worker 111*84e33947SAndroid Build Coastguard WorkerTARGET_VARIANT_SRCS += $(HEXAGON_SRCS) 112