1
1
# Author: Johannes de Fine Licht ([email protected] )
2
- # This software is copyrighted under the BSD 3-Clause License.
2
+ # This software is copyrighted under the BSD 3-Clause License.
3
3
#
4
4
# Once done this will define:
5
5
# Vitis_FOUND - Indicates whether Vitis/SDx/SDAccel was found.
6
- # Vitis_INCLUDE_DIRS - Include directories for HLS.
7
- # Vitis_LIBRARIES - Runtime libraries required for host side code.
6
+ # Vitis_INCLUDE_DIRS - Include directories for HLS.
7
+ # Vitis_LIBRARIES - Runtime libraries required for host side code.
8
8
# Vitis_COMPILER - Path to the compiler executable (v++ or xocc).
9
- # Vitis_HLS - Path to HLS executable (vitis_hls or vivado_hls).
9
+ # Vitis_HLS - Path to HLS executable (vitis_hls or vivado_hls).
10
10
# Vitis_FLOATING_POINT_LIBRARY - Library required for emulation of fp16.
11
11
# Vitis_VERSION - Version of Vitis/SDx/SDAccel installation.
12
12
# Vitis_VERSION_MAJOR - Major version of Vitis/SDx/SDAccel installation.
@@ -46,6 +46,8 @@ if(NOT DEFINED VITIS_ROOT)
46
46
ENV XILINX_SDX
47
47
/tools/Xilinx/Vitis
48
48
PATH_SUFFIXES bin
49
+ 2024.2/bin
50
+ 2024.1/bin
49
51
2023.2/bin
50
52
2023.1/bin
51
53
2022.2/bin
@@ -68,7 +70,7 @@ endif()
68
70
69
71
# Check if all the necessary components are present. We want to ensure that we
70
72
# use the tools bundled together, so we restrict all further finds to only look
71
- # in paths relative to the determined installation.
73
+ # in paths relative to the determined installation.
72
74
73
75
find_program (Vitis_XOCC xocc PATHS ${VITIS_ROOT} /bin NO_DEFAULT_PATH)
74
76
find_program (Vitis_VPP v++ PATHS ${VITIS_ROOT} /bin NO_DEFAULT_PATH)
@@ -80,7 +82,7 @@ if(Vitis_XOCC)
80
82
set (VITIS_IS_LEGACY TRUE )
81
83
add_definitions (-DVITIS_IS_LEGACY)
82
84
endif ()
83
- # Prefer v++ over xocc executable
85
+ # Prefer v++ over xocc executable
84
86
if (Vitis_VPP)
85
87
set (VITIS_COMPILER ${Vitis_VPP} )
86
88
set (VITIS_IS_LEGACY FALSE )
@@ -108,7 +110,7 @@ find_program(Vitis_VIVADO_HLS NAMES vivado_hls PATHS
108
110
109
111
# Check if we should use vivado_hls or vitis_hls
110
112
if (Vitis_MAJOR_VERSION GREATER 2020 OR Vitis_MAJOR_VERSION EQUAL 2020)
111
- # vitis_hls is used internally for building kernels starting from 2020.1.
113
+ # vitis_hls is used internally for building kernels starting from 2020.1.
112
114
set (Vitis_USE_VITIS_HLS ON CACHE BOOL "Use vitis_hls instead of vivado_hls." FORCE)
113
115
find_program (VITIS_HLS NAMES vitis_hls vivado_hls PATHS
114
116
${VITIS_ROOT} /../../Vitis_HLS/${Vitis_VERSION} /bin
@@ -154,10 +156,10 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
154
156
# Floating point library
155
157
#----------------------------------------------------------------------------
156
158
157
- find_library (Vitis_FLOATING_POINT_LIBRARY
158
- NAMES
159
+ find_library (Vitis_FLOATING_POINT_LIBRARY
160
+ NAMES
159
161
Ip_floating_point_v7_0_bitacc_cmodel
160
- Ip_floating_point_v7_1_bitacc_cmodel
162
+ Ip_floating_point_v7_1_bitacc_cmodel
161
163
PATHS
162
164
${VITIS_ROOT} /lnx64/tools/
163
165
${VITIS_ROOT} /../../Vitis_HLS/${Vitis_VERSION} /lnx64/tools/
@@ -169,10 +171,10 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
169
171
mark_as_advanced (Vitis_FLOATING_POINT_LIBRARY)
170
172
171
173
get_filename_component (VITIS_FP_DIR ${Vitis_FLOATING_POINT_LIBRARY}
172
- DIRECTORY )
174
+ DIRECTORY )
173
175
mark_as_advanced (VITIS_FP_DIR)
174
176
175
- set (Vitis_FLOATING_POINT_LIBRARY ${Vitis_FLOATING_POINT_LIBRARY}
177
+ set (Vitis_FLOATING_POINT_LIBRARY ${Vitis_FLOATING_POINT_LIBRARY}
176
178
${Vitis_FLOATING_POINT_LIBMPFR} ${Vitis_FLOATING_POINT_LIBGMP} )
177
179
178
180
find_library (Vitis_FLOATING_POINT_LIBGMP gmp
@@ -202,18 +204,18 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
202
204
PATH_SUFFIXES 1_1/CL 1_2/CL 2_0/CL
203
205
NO_DEFAULT_PATH)
204
206
get_filename_component (Vitis_OPENCL_INCLUDE_DIR
205
- ${Vitis_OPENCL_INCLUDE_DIR} DIRECTORY )
207
+ ${Vitis_OPENCL_INCLUDE_DIR} DIRECTORY )
206
208
207
209
else ()
208
210
209
211
if (NOT DEFINED XRT_ROOT)
210
212
211
- find_path (XRT_SEARCH_PATH libxilinxopencl.so
213
+ find_path (XRT_SEARCH_PATH libxilinxopencl.so
212
214
PATHS ENV XILINX_XRT
213
215
/opt/xilinx/xrt /opt/Xilinx/xrt
214
216
/tools/Xilinx/xrt /tools/xilinx/xrt
215
217
PATH_SUFFIXES lib)
216
- get_filename_component (XRT_ROOT ${XRT_SEARCH_PATH} DIRECTORY )
218
+ get_filename_component (XRT_ROOT ${XRT_SEARCH_PATH} DIRECTORY )
217
219
mark_as_advanced (XRT_SEARCH_PATH)
218
220
219
221
if (NOT XRT_SEARCH_PATH)
@@ -222,7 +224,7 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
222
224
223
225
message (STATUS "Found Xilinx Runtime (XRT): ${XRT_ROOT} " )
224
226
225
- else ()
227
+ else ()
226
228
227
229
message (STATUS "Using user defined Xilinx Runtime (XRT) directory \" ${XRT_ROOT} \" ." )
228
230
@@ -244,8 +246,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
244
246
NO_DEFAULT_PATH)
245
247
mark_as_advanced (Vitis_LIBXILINXOPENCL)
246
248
247
- get_filename_component (VITIS_RUNTIME_LIB_FOLDER ${Vitis_LIBXILINXOPENCL}
248
- DIRECTORY )
249
+ get_filename_component (VITIS_RUNTIME_LIB_FOLDER ${Vitis_LIBXILINXOPENCL}
250
+ DIRECTORY )
249
251
mark_as_advanced (VITIS_RUNTIME_LIB_FOLDER)
250
252
251
253
# Only succeed if libraries were found
@@ -264,14 +266,14 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
264
266
PATHS ${VITIS_RUNTIME_DIR} /include
265
267
PATH_SUFFIXES 1_1/CL 1_2/CL 2_0/CL CL
266
268
NO_DEFAULT_PATH)
267
- get_filename_component (Vitis_OPENCL_EXTENSIONS_INCLUDE_DIR
268
- ${Vitis_OPENCL_EXTENSIONS_INCLUDE_DIR} DIRECTORY )
269
+ get_filename_component (Vitis_OPENCL_EXTENSIONS_INCLUDE_DIR
270
+ ${Vitis_OPENCL_EXTENSIONS_INCLUDE_DIR} DIRECTORY )
269
271
270
272
# Only succeed if both include paths were found
271
273
if (Vitis_HLS_INCLUDE_DIR AND Vitis_OPENCL_INCLUDE_DIR AND
272
274
Vitis_OPENCL_EXTENSIONS_INCLUDE_DIR)
273
275
set (Vitis_INCLUDE_DIRS ${Vitis_HLS_INCLUDE_DIR}
274
- ${Vitis_OPENCL_INCLUDE_DIR} ${Vitis_OPENCL_EXTENSIONS_INCLUDE_DIR}
276
+ ${Vitis_OPENCL_INCLUDE_DIR} ${Vitis_OPENCL_EXTENSIONS_INCLUDE_DIR}
275
277
CACHE STRING "Vitis include directories." FORCE)
276
278
endif ()
277
279
@@ -321,7 +323,7 @@ function(add_vitis_kernel
321
323
string (REPLACE " " ";" KERNEL_DEPENDS "${KERNEL_DEPENDS} " )
322
324
unset (_KERNEL_DEPENDS)
323
325
foreach (DEP ${KERNEL_DEPENDS} )
324
- if (NOT TARGET ${DEP} )
326
+ if (NOT TARGET ${DEP} )
325
327
hlslib_make_paths_absolute(DEP ${DEP} )
326
328
endif ()
327
329
set (_KERNEL_DEPENDS ${_KERNEL_DEPENDS} ${DEP} )
@@ -353,11 +355,11 @@ function(add_vitis_kernel
353
355
foreach (MAPPING ${KERNEL_PORT_MAPPING} )
354
356
string (REGEX MATCH "[A-Za-z0-9_]+\\ .[^: \t\n ]+:[^: \t\n ]+" HAS_KERNEL_NAME ${MAPPING} )
355
357
if (HAS_KERNEL_NAME)
356
- set (KERNEL_LINK_FLAGS "${KERNEL_LINK_FLAGS} --connectivity.sp ${MAPPING} " )
358
+ set (KERNEL_LINK_FLAGS "${KERNEL_LINK_FLAGS} --connectivity.sp ${MAPPING} " )
357
359
else ()
358
360
string (REGEX MATCH "[^: \t\n ]+:[^: \t\n ]+" IS_MEMORY_BANK ${MAPPING} )
359
361
if (IS_MEMORY_BANK)
360
- set (KERNEL_LINK_FLAGS "${KERNEL_LINK_FLAGS} --connectivity.sp ${KERNEL_NAME} _1.${MAPPING} " )
362
+ set (KERNEL_LINK_FLAGS "${KERNEL_LINK_FLAGS} --connectivity.sp ${KERNEL_NAME} _1.${MAPPING} " )
361
363
else ()
362
364
message (FATAL_ERROR "Unrecognized port mapping \" ${MAPPING} \" ." )
363
365
endif ()
@@ -369,9 +371,9 @@ function(add_vitis_kernel
369
371
foreach (MAPPING ${KERNEL_SLR_MAPPING} )
370
372
string (REGEX MATCH "[A-Za-z0-9_]+:[^: \t\n ]+" HAS_KERNEL_NAME ${MAPPING} )
371
373
if (HAS_KERNEL_NAME)
372
- set (KERNEL_LINK_FLAGS "${KERNEL_LINK_FLAGS} --connectivity.slr ${MAPPING} " )
374
+ set (KERNEL_LINK_FLAGS "${KERNEL_LINK_FLAGS} --connectivity.slr ${MAPPING} " )
373
375
else ()
374
- set (KERNEL_LINK_FLAGS "${KERNEL_LINK_FLAGS} --connectivity.slr ${KERNEL_NAME} _1:${MAPPING} " )
376
+ set (KERNEL_LINK_FLAGS "${KERNEL_LINK_FLAGS} --connectivity.slr ${KERNEL_NAME} _1:${MAPPING} " )
375
377
endif ()
376
378
endforeach ()
377
379
@@ -466,7 +468,7 @@ function(add_vitis_program
466
468
string (REPLACE " " ";" PROGRAM_DEPENDS "${PROGRAM_DEPENDS} " )
467
469
unset (_PROGRAM_DEPENDS)
468
470
foreach (DEP ${PROGRAM_DEPENDS} )
469
- if (NOT TARGET ${DEP} )
471
+ if (NOT TARGET ${DEP} )
470
472
hlslib_make_paths_absolute(DEP ${DEP} )
471
473
endif ()
472
474
set (_PROGRAM_DEPENDS ${_PROGRAM_DEPENDS} ${DEP} )
@@ -534,7 +536,7 @@ function(add_vitis_program
534
536
foreach (MAPPING ${PROGRAM_CONNECTIVITY} )
535
537
string (REGEX MATCH "[^\\ .: \t\n ]+\\ .[^\\ .: \t\n ]+:[^\\ .: \t\n ]+\\ .[^\\ .: \t\n ]+" IS_MAPPING ${MAPPING} )
536
538
if (IS_MAPPING)
537
- set (PROGRAM_LINK_FLAGS "${PROGRAM_LINK_FLAGS} --connectivity.sc ${MAPPING} " )
539
+ set (PROGRAM_LINK_FLAGS "${PROGRAM_LINK_FLAGS} --connectivity.sc ${MAPPING} " )
538
540
else ()
539
541
message (FATAL_ERROR "Unrecognized kernel mapping \" ${MAPPING} \" ." )
540
542
endif ()
@@ -551,7 +553,7 @@ function(add_vitis_program
551
553
unset (PROGRAM_XO_FILES_HW)
552
554
553
555
foreach (KERNEL ${PROGRAM_KERNELS} )
554
-
556
+
555
557
get_target_property (KERNEL_NAME ${KERNEL} KERNEL_NAME)
556
558
get_target_property (KERNEL_FILES ${KERNEL} KERNEL_FILES)
557
559
get_target_property (KERNEL_HLS_FLAGS ${KERNEL} HLS_FLAGS)
@@ -560,7 +562,7 @@ function(add_vitis_program
560
562
get_target_property (KERNEL_LINK_FLAGS ${KERNEL} LINK_FLAGS )
561
563
get_target_property (KERNEL_DEPENDS ${KERNEL} DEPENDS )
562
564
563
- set (KERNEL_COMPILE_FLAGS "${PROGRAM_COMPILE_FLAGS} ${KERNEL_COMPILE_FLAGS} --advanced.prop kernel.${KERNEL_NAME} .kernel_flags=\" ${KERNEL_HLS_FLAGS} \" " )
565
+ set (KERNEL_COMPILE_FLAGS "${PROGRAM_COMPILE_FLAGS} ${KERNEL_COMPILE_FLAGS} --advanced.prop kernel.${KERNEL_NAME} .kernel_flags=\" ${KERNEL_HLS_FLAGS} \" " )
564
566
set (PROGRAM_LINK_FLAGS "${PROGRAM_LINK_FLAGS} ${KERNEL_LINK_FLAGS} " )
565
567
566
568
# If HLS TCL config commands are provided, generate a file that can be passed
@@ -569,7 +571,7 @@ function(add_vitis_program
569
571
file (WRITE ${HLS_TCL_FILE} "${KERNEL_HLS_CONFIG} " )
570
572
set (KERNEL_COMPILE_FLAGS "${KERNEL_COMPILE_FLAGS} --hls.pre_tcl ${HLS_TCL_FILE} " )
571
573
endif ()
572
-
574
+
573
575
# Canonicalize flags
574
576
string (REGEX REPLACE "[ \t\r\n ][ \t\r\n ]+" " " KERNEL_COMPILE_FLAGS "${KERNEL_COMPILE_FLAGS} " )
575
577
string (STRIP "${KERNEL_COMPILE_FLAGS} " KERNEL_COMPILE_FLAGS)
@@ -585,7 +587,7 @@ function(add_vitis_program
585
587
XILINX_PATH=${CMAKE_CURRENT_BINARY_DIR}
586
588
${Vitis_COMPILER} --compile --target sw_emu
587
589
--kernel ${KERNEL_NAME}
588
- ${KERNEL_COMPILE_FLAGS}
590
+ ${KERNEL_COMPILE_FLAGS}
589
591
${PROGRAM_BUILD_FLAGS}
590
592
${KERNEL_FILES}
591
593
--output ${KERNEL_XO_FILE_SW_EMU}
@@ -609,7 +611,7 @@ function(add_vitis_program
609
611
XILINX_PATH=${CMAKE_CURRENT_BINARY_DIR}
610
612
${Vitis_COMPILER} --compile --target hw_emu
611
613
--kernel ${KERNEL_NAME}
612
- ${KERNEL_COMPILE_FLAGS}
614
+ ${KERNEL_COMPILE_FLAGS}
613
615
${PROGRAM_BUILD_FLAGS}
614
616
${KERNEL_FILES}
615
617
--output ${KERNEL_XO_FILE_HW_EMU}
@@ -652,25 +654,25 @@ function(add_vitis_program
652
654
if (PROGRAM_CLOCK)
653
655
set (KERNEL_HLS_TCL_CLOCK "create_clock -period ${PROGRAM_CLOCK} MHz -name default\n " )
654
656
endif ()
655
- string (REPLACE ";" " " KERNEL_FILES "${KERNEL_FILES} " )
657
+ string (REPLACE ";" " " KERNEL_FILES "${KERNEL_FILES} " )
656
658
file (WRITE ${CMAKE_CURRENT_BINARY_DIR} /${KERNEL} _synthesis.tcl
657
659
"\
658
- open_project ${KERNEL} \
659
- open_solution -flow_target vitis ${PROGRAM_PLATFORM_PART} \
660
- set_part ${PROGRAM_PLATFORM_PART} \
661
- add_files -cflags \" ${KERNEL_HLS_FLAGS} \" \" ${KERNEL_FILES} \" \
662
- set_top ${KERNEL_NAME} \
660
+ open_project ${KERNEL} \
661
+ open_solution -flow_target vitis ${PROGRAM_PLATFORM_PART} \
662
+ set_part ${PROGRAM_PLATFORM_PART} \
663
+ add_files -cflags \" ${KERNEL_HLS_FLAGS} \" \" ${KERNEL_FILES} \" \
664
+ set_top ${KERNEL_NAME} \
663
665
${KERNEL_HLS_TCL_CLOCK} \
664
- ${KERNEL_HLS_CONFIG} \
665
- csynth_design \
666
+ ${KERNEL_HLS_CONFIG} \
667
+ csynth_design \
666
668
exit" )
667
669
add_custom_command (OUTPUT ${KERNEL} /${PROGRAM_PLATFORM_PART} /${PROGRAM_PLATFORM_PART} .log
668
670
COMMENT "Running high-level synthesis for ${KERNEL} ."
669
671
COMMAND ${Vitis_HLS} -f ${CMAKE_CURRENT_BINARY_DIR} /${KERNEL} _synthesis.tcl
670
672
# CMake does not seem to rerun the custom target if the target that it depends
671
673
# on is rerun, so we have to re-add the files as dependencies here.
672
674
DEPENDS ${KERNEL} ${KERNEL_DEPENDS} )
673
- add_custom_target (synthesize_${KERNEL} DEPENDS
675
+ add_custom_target (synthesize_${KERNEL} DEPENDS
674
676
${KERNEL} /${PROGRAM_PLATFORM_PART} /${PROGRAM_PLATFORM_PART} .log )
675
677
set_property (TARGET synthesize_${KERNEL} APPEND PROPERTY ADDITIONAL_CLEAN_FILES
676
678
${CMAKE_CURRENT_BINARY_DIR} /${KERNEL} vitis_hls.log )
@@ -807,7 +809,7 @@ set(Vitis_EXPORTS
807
809
Vitis_HLS
808
810
Vitis_INCLUDE_DIRS
809
811
Vitis_LIBRARIES
810
- Vitis_FLOATING_POINT_LIBRARY
812
+ Vitis_FLOATING_POINT_LIBRARY
811
813
Vitis_VERSION
812
814
Vitis_MAJOR_VERSION
813
815
Vitis_MINOR_VERSION
0 commit comments