Skip to content

Commit f45eb33

Browse files
committed
Update minimum CMake versions and add newer Vitis versions.
Also fixes line endings.
1 parent c8062e9 commit f45eb33

File tree

2 files changed

+48
-46
lines changed

2 files changed

+48
-46
lines changed

CMakeLists.txt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Author: Johannes de Fine Licht ([email protected])
22

3-
cmake_minimum_required(VERSION 3.0)
3+
cmake_minimum_required(VERSION 3.27)
44
project(hlslib)
55

66
option(HLSLIB_ENABLE_TESTING
@@ -12,7 +12,7 @@ option(HLSLIB_BUILD_DOCUMENTATION
1212
# Vitis/SDx/SDAccel and Intel FPGA OpenCL.
1313
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake)
1414

15-
# Find Xilinx and Intel OpenCL software for enabling test targets
15+
# Find Xilinx and Intel OpenCL software for enabling test targets
1616
find_package(Threads)
1717
find_package(Vitis)
1818
find_package(IntelFPGAOpenCL)
@@ -61,7 +61,7 @@ if(NOT HLSLIB_IS_SUBPROJECT)
6161
if(Doxygen_FOUND)
6262
configure_file(${PROJECT_SOURCE_DIR}/Doxyfile.in Doxyfile)
6363
add_custom_target(doxygen ALL
64-
COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile
64+
COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile
6565
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
6666
endif()
6767

cmake/FindVitis.cmake

+45-43
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# 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.
33
#
44
# Once done this will define:
55
# 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.
88
# 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).
1010
# Vitis_FLOATING_POINT_LIBRARY - Library required for emulation of fp16.
1111
# Vitis_VERSION - Version of Vitis/SDx/SDAccel installation.
1212
# Vitis_VERSION_MAJOR - Major version of Vitis/SDx/SDAccel installation.
@@ -46,6 +46,8 @@ if(NOT DEFINED VITIS_ROOT)
4646
ENV XILINX_SDX
4747
/tools/Xilinx/Vitis
4848
PATH_SUFFIXES bin
49+
2024.2/bin
50+
2024.1/bin
4951
2023.2/bin
5052
2023.1/bin
5153
2022.2/bin
@@ -68,7 +70,7 @@ endif()
6870

6971
# Check if all the necessary components are present. We want to ensure that we
7072
# 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.
7274

7375
find_program(Vitis_XOCC xocc PATHS ${VITIS_ROOT}/bin NO_DEFAULT_PATH)
7476
find_program(Vitis_VPP v++ PATHS ${VITIS_ROOT}/bin NO_DEFAULT_PATH)
@@ -80,7 +82,7 @@ if(Vitis_XOCC)
8082
set(VITIS_IS_LEGACY TRUE)
8183
add_definitions(-DVITIS_IS_LEGACY)
8284
endif()
83-
# Prefer v++ over xocc executable
85+
# Prefer v++ over xocc executable
8486
if(Vitis_VPP)
8587
set(VITIS_COMPILER ${Vitis_VPP})
8688
set(VITIS_IS_LEGACY FALSE)
@@ -108,7 +110,7 @@ find_program(Vitis_VIVADO_HLS NAMES vivado_hls PATHS
108110

109111
# Check if we should use vivado_hls or vitis_hls
110112
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.
112114
set(Vitis_USE_VITIS_HLS ON CACHE BOOL "Use vitis_hls instead of vivado_hls." FORCE)
113115
find_program(VITIS_HLS NAMES vitis_hls vivado_hls PATHS
114116
${VITIS_ROOT}/../../Vitis_HLS/${Vitis_VERSION}/bin
@@ -154,10 +156,10 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
154156
# Floating point library
155157
#----------------------------------------------------------------------------
156158

157-
find_library(Vitis_FLOATING_POINT_LIBRARY
158-
NAMES
159+
find_library(Vitis_FLOATING_POINT_LIBRARY
160+
NAMES
159161
Ip_floating_point_v7_0_bitacc_cmodel
160-
Ip_floating_point_v7_1_bitacc_cmodel
162+
Ip_floating_point_v7_1_bitacc_cmodel
161163
PATHS
162164
${VITIS_ROOT}/lnx64/tools/
163165
${VITIS_ROOT}/../../Vitis_HLS/${Vitis_VERSION}/lnx64/tools/
@@ -169,10 +171,10 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
169171
mark_as_advanced(Vitis_FLOATING_POINT_LIBRARY)
170172

171173
get_filename_component(VITIS_FP_DIR ${Vitis_FLOATING_POINT_LIBRARY}
172-
DIRECTORY)
174+
DIRECTORY)
173175
mark_as_advanced(VITIS_FP_DIR)
174176

175-
set(Vitis_FLOATING_POINT_LIBRARY ${Vitis_FLOATING_POINT_LIBRARY}
177+
set(Vitis_FLOATING_POINT_LIBRARY ${Vitis_FLOATING_POINT_LIBRARY}
176178
${Vitis_FLOATING_POINT_LIBMPFR} ${Vitis_FLOATING_POINT_LIBGMP})
177179

178180
find_library(Vitis_FLOATING_POINT_LIBGMP gmp
@@ -202,18 +204,18 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
202204
PATH_SUFFIXES 1_1/CL 1_2/CL 2_0/CL
203205
NO_DEFAULT_PATH)
204206
get_filename_component(Vitis_OPENCL_INCLUDE_DIR
205-
${Vitis_OPENCL_INCLUDE_DIR} DIRECTORY)
207+
${Vitis_OPENCL_INCLUDE_DIR} DIRECTORY)
206208

207209
else()
208210

209211
if(NOT DEFINED XRT_ROOT)
210212

211-
find_path(XRT_SEARCH_PATH libxilinxopencl.so
213+
find_path(XRT_SEARCH_PATH libxilinxopencl.so
212214
PATHS ENV XILINX_XRT
213215
/opt/xilinx/xrt /opt/Xilinx/xrt
214216
/tools/Xilinx/xrt /tools/xilinx/xrt
215217
PATH_SUFFIXES lib)
216-
get_filename_component(XRT_ROOT ${XRT_SEARCH_PATH} DIRECTORY)
218+
get_filename_component(XRT_ROOT ${XRT_SEARCH_PATH} DIRECTORY)
217219
mark_as_advanced(XRT_SEARCH_PATH)
218220

219221
if(NOT XRT_SEARCH_PATH)
@@ -222,7 +224,7 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
222224

223225
message(STATUS "Found Xilinx Runtime (XRT): ${XRT_ROOT}")
224226

225-
else()
227+
else()
226228

227229
message(STATUS "Using user defined Xilinx Runtime (XRT) directory \"${XRT_ROOT}\".")
228230

@@ -244,8 +246,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
244246
NO_DEFAULT_PATH)
245247
mark_as_advanced(Vitis_LIBXILINXOPENCL)
246248

247-
get_filename_component(VITIS_RUNTIME_LIB_FOLDER ${Vitis_LIBXILINXOPENCL}
248-
DIRECTORY)
249+
get_filename_component(VITIS_RUNTIME_LIB_FOLDER ${Vitis_LIBXILINXOPENCL}
250+
DIRECTORY)
249251
mark_as_advanced(VITIS_RUNTIME_LIB_FOLDER)
250252

251253
# Only succeed if libraries were found
@@ -264,14 +266,14 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
264266
PATHS ${VITIS_RUNTIME_DIR}/include
265267
PATH_SUFFIXES 1_1/CL 1_2/CL 2_0/CL CL
266268
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)
269271

270272
# Only succeed if both include paths were found
271273
if(Vitis_HLS_INCLUDE_DIR AND Vitis_OPENCL_INCLUDE_DIR AND
272274
Vitis_OPENCL_EXTENSIONS_INCLUDE_DIR)
273275
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}
275277
CACHE STRING "Vitis include directories." FORCE)
276278
endif()
277279

@@ -321,7 +323,7 @@ function(add_vitis_kernel
321323
string(REPLACE " " ";" KERNEL_DEPENDS "${KERNEL_DEPENDS}")
322324
unset(_KERNEL_DEPENDS)
323325
foreach(DEP ${KERNEL_DEPENDS})
324-
if(NOT TARGET ${DEP})
326+
if(NOT TARGET ${DEP})
325327
hlslib_make_paths_absolute(DEP ${DEP})
326328
endif()
327329
set(_KERNEL_DEPENDS ${_KERNEL_DEPENDS} ${DEP})
@@ -353,11 +355,11 @@ function(add_vitis_kernel
353355
foreach(MAPPING ${KERNEL_PORT_MAPPING})
354356
string(REGEX MATCH "[A-Za-z0-9_]+\\.[^: \t\n]+:[^: \t\n]+" HAS_KERNEL_NAME ${MAPPING})
355357
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}")
357359
else()
358360
string(REGEX MATCH "[^: \t\n]+:[^: \t\n]+" IS_MEMORY_BANK ${MAPPING})
359361
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}")
361363
else()
362364
message(FATAL_ERROR "Unrecognized port mapping \"${MAPPING}\".")
363365
endif()
@@ -369,9 +371,9 @@ function(add_vitis_kernel
369371
foreach(MAPPING ${KERNEL_SLR_MAPPING})
370372
string(REGEX MATCH "[A-Za-z0-9_]+:[^: \t\n]+" HAS_KERNEL_NAME ${MAPPING})
371373
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}")
373375
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}")
375377
endif()
376378
endforeach()
377379

@@ -466,7 +468,7 @@ function(add_vitis_program
466468
string(REPLACE " " ";" PROGRAM_DEPENDS "${PROGRAM_DEPENDS}")
467469
unset(_PROGRAM_DEPENDS)
468470
foreach(DEP ${PROGRAM_DEPENDS})
469-
if(NOT TARGET ${DEP})
471+
if(NOT TARGET ${DEP})
470472
hlslib_make_paths_absolute(DEP ${DEP})
471473
endif()
472474
set(_PROGRAM_DEPENDS ${_PROGRAM_DEPENDS} ${DEP})
@@ -534,7 +536,7 @@ function(add_vitis_program
534536
foreach(MAPPING ${PROGRAM_CONNECTIVITY})
535537
string(REGEX MATCH "[^\\.: \t\n]+\\.[^\\.: \t\n]+:[^\\.: \t\n]+\\.[^\\.: \t\n]+" IS_MAPPING ${MAPPING})
536538
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}")
538540
else()
539541
message(FATAL_ERROR "Unrecognized kernel mapping \"${MAPPING}\".")
540542
endif()
@@ -551,7 +553,7 @@ function(add_vitis_program
551553
unset(PROGRAM_XO_FILES_HW)
552554

553555
foreach(KERNEL ${PROGRAM_KERNELS})
554-
556+
555557
get_target_property(KERNEL_NAME ${KERNEL} KERNEL_NAME)
556558
get_target_property(KERNEL_FILES ${KERNEL} KERNEL_FILES)
557559
get_target_property(KERNEL_HLS_FLAGS ${KERNEL} HLS_FLAGS)
@@ -560,7 +562,7 @@ function(add_vitis_program
560562
get_target_property(KERNEL_LINK_FLAGS ${KERNEL} LINK_FLAGS)
561563
get_target_property(KERNEL_DEPENDS ${KERNEL} DEPENDS)
562564

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}\"")
564566
set(PROGRAM_LINK_FLAGS "${PROGRAM_LINK_FLAGS} ${KERNEL_LINK_FLAGS}")
565567

566568
# If HLS TCL config commands are provided, generate a file that can be passed
@@ -569,7 +571,7 @@ function(add_vitis_program
569571
file(WRITE ${HLS_TCL_FILE} "${KERNEL_HLS_CONFIG}")
570572
set(KERNEL_COMPILE_FLAGS "${KERNEL_COMPILE_FLAGS} --hls.pre_tcl ${HLS_TCL_FILE}")
571573
endif()
572-
574+
573575
# Canonicalize flags
574576
string(REGEX REPLACE "[ \t\r\n][ \t\r\n]+" " " KERNEL_COMPILE_FLAGS "${KERNEL_COMPILE_FLAGS}")
575577
string(STRIP "${KERNEL_COMPILE_FLAGS}" KERNEL_COMPILE_FLAGS)
@@ -585,7 +587,7 @@ function(add_vitis_program
585587
XILINX_PATH=${CMAKE_CURRENT_BINARY_DIR}
586588
${Vitis_COMPILER} --compile --target sw_emu
587589
--kernel ${KERNEL_NAME}
588-
${KERNEL_COMPILE_FLAGS}
590+
${KERNEL_COMPILE_FLAGS}
589591
${PROGRAM_BUILD_FLAGS}
590592
${KERNEL_FILES}
591593
--output ${KERNEL_XO_FILE_SW_EMU}
@@ -609,7 +611,7 @@ function(add_vitis_program
609611
XILINX_PATH=${CMAKE_CURRENT_BINARY_DIR}
610612
${Vitis_COMPILER} --compile --target hw_emu
611613
--kernel ${KERNEL_NAME}
612-
${KERNEL_COMPILE_FLAGS}
614+
${KERNEL_COMPILE_FLAGS}
613615
${PROGRAM_BUILD_FLAGS}
614616
${KERNEL_FILES}
615617
--output ${KERNEL_XO_FILE_HW_EMU}
@@ -652,25 +654,25 @@ function(add_vitis_program
652654
if(PROGRAM_CLOCK)
653655
set(KERNEL_HLS_TCL_CLOCK "create_clock -period ${PROGRAM_CLOCK}MHz -name default\n")
654656
endif()
655-
string(REPLACE ";" " " KERNEL_FILES "${KERNEL_FILES}")
657+
string(REPLACE ";" " " KERNEL_FILES "${KERNEL_FILES}")
656658
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${KERNEL}_synthesis.tcl
657659
"\
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} \
663665
${KERNEL_HLS_TCL_CLOCK}\
664-
${KERNEL_HLS_CONFIG} \
665-
csynth_design \
666+
${KERNEL_HLS_CONFIG} \
667+
csynth_design \
666668
exit")
667669
add_custom_command(OUTPUT ${KERNEL}/${PROGRAM_PLATFORM_PART}/${PROGRAM_PLATFORM_PART}.log
668670
COMMENT "Running high-level synthesis for ${KERNEL}."
669671
COMMAND ${Vitis_HLS} -f ${CMAKE_CURRENT_BINARY_DIR}/${KERNEL}_synthesis.tcl
670672
# CMake does not seem to rerun the custom target if the target that it depends
671673
# on is rerun, so we have to re-add the files as dependencies here.
672674
DEPENDS ${KERNEL} ${KERNEL_DEPENDS})
673-
add_custom_target(synthesize_${KERNEL} DEPENDS
675+
add_custom_target(synthesize_${KERNEL} DEPENDS
674676
${KERNEL}/${PROGRAM_PLATFORM_PART}/${PROGRAM_PLATFORM_PART}.log)
675677
set_property(TARGET synthesize_${KERNEL} APPEND PROPERTY ADDITIONAL_CLEAN_FILES
676678
${CMAKE_CURRENT_BINARY_DIR}/${KERNEL} vitis_hls.log)
@@ -807,7 +809,7 @@ set(Vitis_EXPORTS
807809
Vitis_HLS
808810
Vitis_INCLUDE_DIRS
809811
Vitis_LIBRARIES
810-
Vitis_FLOATING_POINT_LIBRARY
812+
Vitis_FLOATING_POINT_LIBRARY
811813
Vitis_VERSION
812814
Vitis_MAJOR_VERSION
813815
Vitis_MINOR_VERSION

0 commit comments

Comments
 (0)