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