From 555c8da00fbc32fc4d0aa33fcd58b0016a1dd9d9 Mon Sep 17 00:00:00 2001 From: Elizaveta Morozova Date: Wed, 19 Jul 2023 18:12:34 +0300 Subject: [PATCH] itk-5.3.0-VkFFTBackend Use VkFFT as a header-only library. Avoid using FetchContent for library dependency, use system Cleaver instead. --- CMakeLists.txt | 71 +++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 36 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 30713f3..32e50a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,59 +10,58 @@ if(NOT ITK_SOURCE_DIR) endif() set(VKFFT_BACKEND 3 CACHE STRING "0 - Vulkan, 1 - CUDA, 2 - HIP, 3 - OpenCL") -if(${VKFFT_BACKEND} EQUAL 1) -# pass -elseif(${VKFFT_BACKEND} EQUAL 3) -## When this module is loaded by an app, load OpenCL too. -set(VkFFTBackend_EXPORT_CODE_INSTALL " -set(OpenCL_DIR \"${OpenCL_DIR}\") -find_package(OpenCL REQUIRED) -") -set(VkFFTBackend_EXPORT_CODE_BUILD " -if(NOT ITK_BINARY_DIR) +add_compile_definitions(VKFFT_BACKEND=${VKFFT_BACKEND}) + +if(VKFFT_BACKEND EQUAL 1) + # pass +elseif(VKFFT_BACKEND EQUAL 3) + add_compile_definitions(CL_TARGET_OPENCL_VERSION=120) + + ## When this module is loaded by an app, load OpenCL too. + set(VkFFTBackend_EXPORT_CODE_INSTALL " set(OpenCL_DIR \"${OpenCL_DIR}\") find_package(OpenCL REQUIRED) -endif() -") -set(VkFFTBackend_SYSTEM_INCLUDE_DIRS ${OpenCL_INCLUDE_DIRS}) -get_filename_component(OpenCL_LIB_DIR ${OpenCL_LIBRARY} DIRECTORY) -set(VkFFTBackend_SYSTEM_LIBRARY_DIRS ${OpenCL_LIB_DIR}) + ") + set(VkFFTBackend_EXPORT_CODE_BUILD " + if(NOT ITK_BINARY_DIR) + set(OpenCL_DIR \"${OpenCL_DIR}\") + find_package(OpenCL REQUIRED) + endif() + ") + list(APPEND VkFFTBackend_SYSTEM_INCLUDE_DIRS ${OpenCL_INCLUDE_DIRS}) + get_filename_component(OpenCL_LIB_DIR ${OpenCL_LIBRARY} DIRECTORY) + set(VkFFTBackend_SYSTEM_LIBRARY_DIRS ${OpenCL_LIB_DIR}) +else() + message(WARNING "ITKVkFFTBackend currently supports only CUDA or OpenCL backends.") endif() -## VkFFT dependency -include(FetchContent) -add_definitions(-DVKFFT_BACKEND=${VKFFT_BACKEND} -DCL_TARGET_OPENCL_VERSION=120) -set(vulkan_GIT_REPOSITORY "https://github.com/DTolm/VkFFT") # original source -set(vulkan_GIT_TAG "3aecc219153f97aaa46e613abbf430033eb27512") -# set(vulkan_GIT_REPOSITORY "https://github.com/Leengit/VkFFT") # Kitware copy of original source -# set(vulkan_GIT_TAG "0c5ddfffe1af9ac96c21d4c38941f9b5481b73c3") -FetchContent_Declare( - vulkan_lib - GIT_REPOSITORY ${vulkan_GIT_REPOSITORY} - GIT_TAG ${vulkan_GIT_TAG} - ) -FetchContent_MakeAvailable(vulkan_lib) if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") # Remove this list of disabled warnings when VkFFT has been updated message("Adding compile options: -Wno-format-overflow") add_compile_options(-Wno-format-overflow) - target_compile_options(VkFFT INTERFACE -Wno-format-overflow) -endif() -if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") # Remove this list of disabled warnings when VkFFT has been updated message("Adding compile options: /wd4146 /wd4244 /wd4996") # C4146: unary minus operator applied to unsigned type, result still unsigned # C4244: 'argument': conversion from 'double' to 'uint64_t', possible loss of data # C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. add_compile_options(/wd4146 /wd4244 /wd4996) - target_compile_options(VkFFT INTERFACE /wd4146 /wd4244 /wd4996) endif() -# Cache content path so that it is available in test driver subproject -# when built as an ITK remote module -set(vulkan_lib_SOURCE_DIR "${vulkan_lib_SOURCE_DIR}" CACHE PATH "VkFFT content path") +#### Populate VkFFT dependency ### + +# VkFFT is a header-only library with build target(s) +# for FFT benchmarking and applications. +# By default we populate only the header library file `VkFFT.h` +# without building other VkFFT targets. + +find_path(vkfft_INCLUDE_DIR NAMES vkFFT.h PATHS /usr/include/vkFFT) + +include_directories(vkfft_INCLUDE_DIR) + +list(APPEND VkFFTBackend_SYSTEM_INCLUDE_DIRS ${vkfft_INCLUDE_DIR}) -include_directories(SYSTEM ${vulkan_lib_SOURCE_DIR}/vkFFT) +#### Configure ITK module #### if(NOT ITK_SOURCE_DIR) find_package(ITK REQUIRED) -- 2.33.8