1
1
#
2
- # Copyright 2019-2021 Xilinx, Inc.
2
+ # Copyright 2019-2022 Xilinx, Inc.
3
3
#
4
4
# Licensed under the Apache License, Version 2.0 (the "License");
5
5
# you may not use this file except in compliance with the License.
12
12
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
13
# See the License for the specific language governing permissions and
14
14
# limitations under the License.
15
+ # vitis makefile-generator v2.0.6
15
16
#
16
17
# +-------------------------------------------------------------------------------
17
18
# The following parameters are assigned with default values. These parameters can
@@ -39,17 +40,59 @@ ifeq ($(DEBUG), yes)
39
40
VPP_LDFLAGS += --dk protocol:all:all:all
40
41
endif
41
42
42
- # Checks for XILINX_XRT
43
- ifeq ($(HOST_ARCH ) , x86)
43
+ # Check environment setup
44
+ ifndef XILINX_VITIS
45
+ XILINX_VITIS = /opt/xilinx/Vitis/$(TOOL_VERSION )
46
+ export XILINX_VITIS
47
+ endif
44
48
ifndef XILINX_XRT
45
49
XILINX_XRT = /opt/xilinx/xrt
46
50
export XILINX_XRT
47
51
endif
52
+
53
+ check_device :
54
+ @set -eu; \
55
+ inallowlist=False; \
56
+ inblocklist=False; \
57
+ for dev in $( PLATFORM_ALLOWLIST) ; \
58
+ do if [[ $$ (echo $( PLATFORM_NAME) | grep $$ dev) != " " ]]; \
59
+ then inallowlist=True; fi ; \
60
+ done ; \
61
+ for dev in $( PLATFORM_BLOCKLIST) ; \
62
+ do if [[ $$ (echo $( PLATFORM_NAME) | grep $$ dev) != " " ]]; \
63
+ then inblocklist=True; fi ; \
64
+ done ; \
65
+ if [[ $$ inallowlist == False ]]; \
66
+ then echo " [Warning]: The device $( PLATFORM_NAME) not in allowlist." ; \
67
+ fi ; \
68
+ if [[ $$ inblocklist == True ]]; \
69
+ then echo " [ERROR]: The device $( PLATFORM_NAME) in blocklist." ; exit 1; \
70
+ fi ;
71
+
72
+ # get HOST_ARCH by PLATFORM
73
+ ifneq (,$(PLATFORM ) )
74
+ HOST_ARCH_temp = $(shell platforminfo -p $(PLATFORM ) | grep 'CPU Type' | sed 's/.* ://' | sed '/ai_engine/d' | sed 's/^[[:space:]]* //')
75
+ ifeq ($(HOST_ARCH_temp ) , x86)
76
+ HOST_ARCH := x86
77
+ else ifeq ($(HOST_ARCH_temp), cortex-a9)
78
+ HOST_ARCH := aarch32
79
+ else ifneq (,$(findstring cortex-a, $(HOST_ARCH_temp)))
80
+ HOST_ARCH := aarch64
81
+ endif
82
+ endif
83
+
84
+
85
+ # get suffix of kernel by PLATFORM
86
+ VITIS_VER = $(shell v++ --version | grep 'v++' | sed 's/^[[:space:]]* //' | sed -e 's/^[* ]* v++ v//g' | cut -d " " -f1)
87
+ DEVICE_TYPE = $(shell platforminfo -p $(PLATFORM ) | grep 'FPGA Family' | sed 's/.* ://' | sed '/ai_engine/d' | sed 's/^[[:space:]]* //')
88
+ ifeq ($(DEVICE_TYPE ) , versal)
89
+ ifeq ($(shell expr $(VITIS_VER ) \>= 2022.1) , 1)
90
+ LINK_TARGET_FMT := xsa
48
91
else
49
- ifndef XILINX_VITIS
50
- XILINX_VITIS = /opt/xilinx/Vitis/$(TOOL_VERSION )
51
- export XILINX_VITIS
92
+ LINK_TARGET_FMT := xclbin
52
93
endif
94
+ else
95
+ LINK_TARGET_FMT := xclbin
53
96
endif
54
97
55
98
# Checks for Device Family
@@ -59,13 +102,18 @@ else ifeq ($(HOST_ARCH), aarch64)
59
102
DEV_FAM = Ultrascale
60
103
endif
61
104
62
- B_NAME = $(shell dirname $(XPLATFORM ) )
63
-
64
105
# Checks for Correct architecture
65
106
ifneq ($(HOST_ARCH ) , $(filter $(HOST_ARCH ) ,aarch64 aarch32 x86) )
66
107
$(error HOST_ARCH variable not set, please set correctly and rerun)
67
108
endif
68
109
110
+ check_version :
111
+ ifneq (, $(shell which git) )
112
+ ifneq (,$(wildcard $(XFLIB_DIR ) /.git) )
113
+ @cd $(XFLIB_DIR) && git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit -n 1 && cd -
114
+ endif
115
+ endif
116
+
69
117
# Checks for SYSROOT
70
118
check_sysroot :
71
119
ifneq ($(HOST_ARCH ) , x86)
@@ -74,25 +122,24 @@ ifndef SYSROOT
74
122
endif
75
123
endif
76
124
77
- check_version :
78
- ifneq (, $(shell which git) )
79
- ifneq (,$(wildcard $(XFLIB_DIR ) /.git) )
80
- @cd $(XFLIB_DIR) && git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit -n 1 && cd -
81
- endif
82
- endif
83
-
84
125
# Checks for g++
85
126
CXX := g++
86
127
ifeq ($(HOST_ARCH ) , x86)
87
- ifneq ($(shell expr $(shell g++ -dumpversion) \>= 5) , 1)
128
+ ifeq ($(shell expr $(VITIS_VER ) \>= 2022.1) , 1)
129
+ CXX_VER := 8.3.0
130
+ else
131
+ CXX_VER := 6.2.0
132
+ endif
133
+ CXX_V := $(shell echo $(CXX_VER ) | awk -F. '{print tolower($$1) }')
134
+ ifneq ($(shell expr $(shell echo "__GNUG__" | g++ -E -x c++ - | tail -1) \>= $(CXX_V ) ) , 1)
88
135
ifndef XILINX_VIVADO
89
- $(error [ERROR] : g++ version too old. Please use 5.0 or above)
136
+ $(error [ERROR] : g++ version too old. Please use $( CXX_VER ) or above)
90
137
else
91
- CXX := $(XILINX_VIVADO ) /tps/lnx64/gcc-6.2.0 /bin/g++
138
+ CXX := $(XILINX_VIVADO ) /tps/lnx64/gcc-$( CXX_VER ) /bin/g++
92
139
ifeq ($(LD_LIBRARY_PATH ) ,)
93
- export LD_LIBRARY_PATH := $(XILINX_VIVADO ) /tps/lnx64/gcc-6.2.0 /lib64
140
+ export LD_LIBRARY_PATH := $(XILINX_VIVADO ) /tps/lnx64/gcc-$( CXX_VER ) /lib64
94
141
else
95
- export LD_LIBRARY_PATH := $(XILINX_VIVADO ) /tps/lnx64/gcc-6.2.0 /lib64:$(LD_LIBRARY_PATH )
142
+ export LD_LIBRARY_PATH := $(XILINX_VIVADO ) /tps/lnx64/gcc-$( CXX_VER ) /lib64:$(LD_LIBRARY_PATH )
96
143
endif
97
144
$(warning [WARNING] : g++ version too old. Using g++ provided by the tool: $(CXX ) )
98
145
endif
@@ -103,20 +150,32 @@ else ifeq ($(HOST_ARCH), aarch32)
103
150
CXX := $(XILINX_VITIS ) /gnu/aarch32/lin/gcc-arm-linux-gnueabi/bin/arm-linux-gnueabihf-g++
104
151
endif
105
152
106
- # Check OS and setting env
153
+ # Check OS and setting env for xrt c++ api
107
154
OSDIST = $(shell lsb_release -i |awk -F: '{print tolower($$2) }' | tr -d ' \t' )
108
155
OSREL = $(shell lsb_release -r |awk -F: '{print tolower($$2) }' |tr -d ' \t')
109
156
110
- ifeq ($(OSDIST ) , centos)
157
+ # for centos and redhat
158
+ ifneq ($(findstring centos,$(OSDIST ) ) ,)
159
+ ifeq (7,$(shell echo $(OSREL ) | awk -F. '{print tolower($$1) }' ))
160
+ ifeq ($(HOST_ARCH ) , x86)
161
+ XRT_CXXFLAGS += -D_GLIBCXX_USE_CXX11_ABI=0
162
+ endif
163
+ endif
164
+ else ifneq ($(findstring redhat,$(OSDIST)),)
111
165
ifeq (7,$(shell echo $(OSREL ) | awk -F. '{print tolower($$1) }' ))
112
- CXXFLAGS += -D_GLIBCXX_USE_CXX11_ABI=0
166
+ ifeq ($(HOST_ARCH ) , x86)
167
+ XRT_CXXFLAGS += -D_GLIBCXX_USE_CXX11_ABI=0
168
+ endif
113
169
endif
114
170
endif
115
171
116
172
# Setting VPP
117
173
VPP := v++
118
174
119
175
# Cheks for aiecompiler
176
+ AIECXX := aiecompiler
177
+ AIESIMULATOR := aiesimulator
178
+ X86SIMULATOR := x86simulator
120
179
121
180
.PHONY : check_vivado
122
181
check_vivado :
@@ -132,11 +191,9 @@ endif
132
191
133
192
.PHONY : check_xrt
134
193
check_xrt :
135
- ifeq ($(HOST_ARCH ) , x86)
136
194
ifeq (,$(wildcard $(XILINX_XRT ) /lib/libxilinxopencl.so) )
137
195
@echo "Cannot locate XRT installation. Please set XILINX_XRT variable." && false
138
196
endif
139
- endif
140
197
141
198
export PATH := $(XILINX_VITIS ) /bin:$(XILINX_XRT ) /bin:$(PATH )
142
199
ifeq ($(HOST_ARCH ) , x86)
@@ -145,82 +202,64 @@ LD_LIBRARY_PATH := $(XILINX_XRT)/lib
145
202
else
146
203
LD_LIBRARY_PATH := $(XILINX_XRT ) /lib:$(LD_LIBRARY_PATH )
147
204
endif
148
- else # aarch64
149
- ifeq (,$(LD_LIBRARY_PATH ) )
150
- LD_LIBRARY_PATH := $(SYSROOT ) /usr/lib
151
- else
152
- LD_LIBRARY_PATH := $(SYSROOT ) /usr/lib:$(LD_LIBRARY_PATH )
153
- endif
154
- endif
155
-
156
- # check target
157
- ifeq ($(filter $(TARGET ) ,sw_emu hw_emu hw) ,)
158
- $(error TARGET is not sw_emu, hw_emu or hw)
159
205
endif
160
206
161
- ifneq (,$(wildcard $(DEVICE ) ) )
162
- # Use DEVICE as a file path
163
- XPLATFORM := $(DEVICE )
207
+ ifneq (,$(wildcard $(PLATFORM ) ) )
208
+ # Use PLATFORM as a file path
209
+ XPLATFORM := $(PLATFORM )
164
210
else
165
- # Use DEVICE as a file name pattern
211
+ # Use PLATFORM as a file name pattern
166
212
# 1. search paths specified by variable
167
213
ifneq (,$(PLATFORM_REPO_PATHS ) )
168
214
# 1.1 as exact name
169
- XPLATFORM := $(strip $(foreach p, $(subst :, ,$(PLATFORM_REPO_PATHS ) ) , $(wildcard $(p ) /$(DEVICE ) /$(DEVICE ) .xpfm) ) )
215
+ XPLATFORM := $(strip $(foreach p, $(subst :, ,$(PLATFORM_REPO_PATHS ) ) , $(wildcard $(p ) /$(PLATFORM ) /$(PLATFORM ) .xpfm) ) )
170
216
# 1.2 as a pattern
171
217
ifeq (,$(XPLATFORM ) )
172
218
XPLATFORMS := $(foreach p, $(subst :, ,$(PLATFORM_REPO_PATHS ) ) , $(wildcard $(p ) /* /* .xpfm) )
173
- XPLATFORM := $(strip $(foreach p, $(XPLATFORMS ) , $(shell echo $(p ) | awk '$$1 ~ /$(DEVICE ) /') ) )
219
+ XPLATFORM := $(strip $(foreach p, $(XPLATFORMS ) , $(shell echo $(p ) | awk '$$1 ~ /$(PLATFORM ) /') ) )
174
220
endif # 1.2
175
221
endif # 1
176
222
# 2. search Vitis installation
177
223
ifeq (,$(XPLATFORM ) )
178
224
# 2.1 as exact name
179
- XPLATFORM := $(strip $(wildcard $(XILINX_VITIS ) /platforms/$(DEVICE ) /$(DEVICE ) .xpfm) )
225
+ XPLATFORM := $(strip $(wildcard $(XILINX_VITIS ) /platforms/$(PLATFORM ) /$(PLATFORM ) .xpfm) )
180
226
# 2.2 as a pattern
181
227
ifeq (,$(XPLATFORM ) )
182
228
XPLATFORMS := $(wildcard $(XILINX_VITIS ) /platforms/* /* .xpfm)
183
- XPLATFORM := $(strip $(foreach p, $(XPLATFORMS ) , $(shell echo $(p ) | awk '$$1 ~ /$(DEVICE ) /') ) )
229
+ XPLATFORM := $(strip $(foreach p, $(XPLATFORMS ) , $(shell echo $(p ) | awk '$$1 ~ /$(PLATFORM ) /') ) )
184
230
endif # 2.2
185
231
endif # 2
186
232
# 3. search default locations
187
233
ifeq (,$(XPLATFORM ) )
188
234
# 3.1 as exact name
189
- XPLATFORM := $(strip $(wildcard /opt/xilinx/platforms/$(DEVICE ) /$(DEVICE ) .xpfm) )
235
+ XPLATFORM := $(strip $(wildcard /opt/xilinx/platforms/$(PLATFORM ) /$(PLATFORM ) .xpfm) )
190
236
# 3.2 as a pattern
191
237
ifeq (,$(XPLATFORM ) )
192
238
XPLATFORMS := $(wildcard /opt/xilinx/platforms/* /* .xpfm)
193
- XPLATFORM := $(strip $(foreach p, $(XPLATFORMS ) , $(shell echo $(p ) | awk '$$1 ~ /$(DEVICE ) /') ) )
239
+ XPLATFORM := $(strip $(foreach p, $(XPLATFORMS ) , $(shell echo $(p ) | awk '$$1 ~ /$(PLATFORM ) /') ) )
194
240
endif # 3.2
195
241
endif # 3
196
242
endif
197
243
198
244
define MSG_PLATFORM
199
- No platform matched pattern '$(DEVICE ) '.
245
+ No platform matched pattern '$(PLATFORM ) '.
200
246
Available platforms are: $(XPLATFORMS )
201
- To add more platform directories, set the PLATFORM_REPO_PATHS variable or point DEVICE variable to the full path of platform .xpfm file.
247
+ To add more platform directories, set the PLATFORM_REPO_PATHS variable or point PLATFORM variable to the full path of platform .xpfm file.
202
248
endef
203
249
export MSG_PLATFORM
204
250
205
- define MSG_DEVICE
206
- More than one platform matched: $(XPLATFORM )
207
- Please set DEVICE variable more accurately to select only one platform file, or set DEVICE variable to the full path of the platform .xpfm file.
208
- endef
209
- export MSG_DEVICE
210
251
211
252
.PHONY : check_platform
212
253
check_platform :
213
254
ifeq (,$(XPLATFORM ) )
214
255
@echo "$${MSG_PLATFORM}" && false
215
256
endif
216
- ifneq (,$(word 2,$(XPLATFORM ) ) )
217
- @echo "$${MSG_DEVICE}" && false
218
- endif
219
257
# Check ends
220
258
221
259
# device2xsa - create a filesystem friendly name from device name
222
260
# $(1) - full name of device
223
- device2xsa = $(strip $(patsubst % .xpfm, % , $(shell basename $(DEVICE ) ) ) )
261
+ PLATFORM_NAME = $(strip $(patsubst % .xpfm, % , $(shell basename $(PLATFORM ) ) ) )
262
+
224
263
225
264
# Cleaning stuff
226
265
RM = rm -f
0 commit comments