From 38d98c5f7d887c28154498e95c7e42bd87ac4c67 Mon Sep 17 00:00:00 2001 From: Simon Frasch Date: Wed, 17 Mar 2021 09:11:33 +0100 Subject: [PATCH 1/3] added directory of fortran module to CMake interface --- src/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b8765e0..c5bd5f1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -104,6 +104,10 @@ target_link_libraries(spfft PRIVATE ${SPFFT_EXTERNAL_LIBS}) target_include_directories(spfft INTERFACE ${SPFFT_INTERFACE_INCLUDE_DIRS}) target_include_directories(spfft INTERFACE $) # for install(EXPORT ...) target_include_directories(spfft INTERFACE $ $) # for export(...) +if(${SPFFT_FORTRAN}) # Add include directory for fortran module + target_include_directories(spfft INTERFACE $) + target_include_directories(spfft INTERFACE $) +endif() # set packge config names if(SPFFT_STATIC) From f6f3c619bcba13ba8c0b5a38d9b01d2fff373eab Mon Sep 17 00:00:00 2001 From: Simon Frasch Date: Tue, 6 Apr 2021 17:39:23 +0200 Subject: [PATCH 2/3] updated FindHIP for ROCM 4.1.0 and use separate hipfft package if available --- CMakeLists.txt | 11 ++++++++ cmake/SpFFTStaticConfig.cmake | 1 + cmake/modules/FindHIP.cmake | 32 +++++++++++++++++++--- cmake/modules/FindHIP/run_hipcc.cmake | 4 +-- cmake/modules/FindHIP/run_make2cmake.cmake | 2 -- 5 files changed, 41 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cd31fc6..593d17b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -131,6 +131,17 @@ endif() if(SPFFT_ROCM) find_package(hip CONFIG REQUIRED) find_package(rocfft CONFIG REQUIRED) + find_package(hipfft CONFIG) # hipfft within rocfft is deprecated. Use separate hipfft if available (not required). + + if(hipfft_FOUND) + # Issue with rocm 4.1.0: Symlink to rocfft provided hipfft.h in /opt/rocm/include. + # Workaround: Only use hipfft include directory with hipfft target and place before other hip targets in lib list + if(HIPFFT_INCLUDE_DIRS) + set_property(TARGET hip::hipfft PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${HIPFFT_INCLUDE_DIRS}) + endif() + list(APPEND SPFFT_EXTERNAL_LIBS hip::hipfft) + endif() + list(APPEND SPFFT_EXTERNAL_LIBS hip::host roc::rocfft) # FindHIP module provides compilation command for GPU code diff --git a/cmake/SpFFTStaticConfig.cmake b/cmake/SpFFTStaticConfig.cmake index 8e36082..c6942bc 100644 --- a/cmake/SpFFTStaticConfig.cmake +++ b/cmake/SpFFTStaticConfig.cmake @@ -56,6 +56,7 @@ endif() if(SPFFT_ROCM) find_dependency(hip CONFIG) find_dependency(rocfft CONFIG) + find_dependency(hipfft CONFIG) endif() set(CMAKE_MODULE_PATH ${_CMAKE_MODULE_PATH_SAVE}) # restore module path diff --git a/cmake/modules/FindHIP.cmake b/cmake/modules/FindHIP.cmake index 31178a7..97317bb 100644 --- a/cmake/modules/FindHIP.cmake +++ b/cmake/modules/FindHIP.cmake @@ -1,7 +1,6 @@ ############################################################################### # FindHIP.cmake ############################################################################### - # Copyright (c) 2008-2020 Advanced Micro Devices, Inc. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -32,6 +31,7 @@ set(HIP_HCC_FLAGS "" CACHE STRING "Semicolon delimited flags for HCC") set(HIP_CLANG_FLAGS "" CACHE STRING "Semicolon delimited flags for CLANG") set(HIP_NVCC_FLAGS "" CACHE STRING "Semicolon delimted flags for NVCC") mark_as_advanced(HIP_HIPCC_FLAGS HIP_HCC_FLAGS HIP_CLANG_FLAGS HIP_NVCC_FLAGS) + set(_hip_configuration_types ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE} Debug MinSizeRel Release RelWithDebInfo) list(REMOVE_DUPLICATES _hip_configuration_types) foreach(config ${_hip_configuration_types}) @@ -226,8 +226,13 @@ set(CMAKE_SHARED_LIBRARY_LINK_DYNAMIC_HIP_FLAGS ${CMAKE_SHARED_LIBRARY_LINK_DYNA set(HIP_CLANG_PARALLEL_BUILD_COMPILE_OPTIONS "") set(HIP_CLANG_PARALLEL_BUILD_LINK_OPTIONS "") -if("${HIP_COMPILER}" STREQUAL "hcc") - # Set the CMake Flags to use the HCC Compiler. +if("${HIP_COMPILER}" STREQUAL "nvcc") + # Set the CMake Flags to use the nvcc Compiler. + set(CMAKE_HIP_CREATE_SHARED_LIBRARY "${HIP_HIPCC_CMAKE_LINKER_HELPER} -o ") + set(CMAKE_HIP_CREATE_SHARED_MODULE "${HIP_HIPCC_CMAKE_LINKER_HELPER} -o -shared" ) + set(CMAKE_HIP_LINK_EXECUTABLE "${HIP_HIPCC_CMAKE_LINKER_HELPER} -o ") +elseif("${HIP_COMPILER}" STREQUAL "hcc") + # Set the CMake Flags to use the hcc Compiler. set(CMAKE_HIP_CREATE_SHARED_LIBRARY "${HIP_HIPCC_CMAKE_LINKER_HELPER} ${HCC_HOME} -o ") set(CMAKE_HIP_CREATE_SHARED_MODULE "${HIP_HIPCC_CMAKE_LINKER_HELPER} ${HCC_HOME} -o -shared" ) set(CMAKE_HIP_LINK_EXECUTABLE "${HIP_HIPCC_CMAKE_LINKER_HELPER} ${HCC_HOME} -o ") @@ -242,7 +247,7 @@ elseif("${HIP_COMPILER}" STREQUAL "clang") endif() if(HIP_CLANG_NUM_PARALLEL_JOBS GREATER 1) if(${HIP_CLANG_SUPPORTS_PARALLEL_JOBS}) - set(HIP_CLANG_PARALLEL_BUILD_COMPILE_OPTIONS "-parallel-jobs=${HIP_CLANG_NUM_PARALLEL_JOBS} -Wno-format-nonliteral") + set(HIP_CLANG_PARALLEL_BUILD_COMPILE_OPTIONS "-Wno-format-nonliteral -parallel-jobs=${HIP_CLANG_NUM_PARALLEL_JOBS}") set(HIP_CLANG_PARALLEL_BUILD_LINK_OPTIONS "-parallel-jobs=${HIP_CLANG_NUM_PARALLEL_JOBS}") else() message("clang compiler doesn't support parallel jobs") @@ -253,6 +258,13 @@ elseif("${HIP_COMPILER}" STREQUAL "clang") set(CMAKE_HIP_CREATE_SHARED_LIBRARY "${HIP_HIPCC_CMAKE_LINKER_HELPER} ${HIP_CLANG_PATH} ${HIP_CLANG_PARALLEL_BUILD_LINK_OPTIONS} -o ") set(CMAKE_HIP_CREATE_SHARED_MODULE "${HIP_HIPCC_CMAKE_LINKER_HELPER} ${HIP_CLANG_PATH} ${HIP_CLANG_PARALLEL_BUILD_LINK_OPTIONS} -o -shared" ) set(CMAKE_HIP_LINK_EXECUTABLE "${HIP_HIPCC_CMAKE_LINKER_HELPER} ${HIP_CLANG_PATH} ${HIP_CLANG_PARALLEL_BUILD_LINK_OPTIONS} -o ") + + if("${HIP_RUNTIME}" STREQUAL "rocclr") + if(TARGET host) + message(STATUS "host interface - found") + set(HIP_HOST_INTERFACE host) + endif() + endif() endif() ############################################################################### @@ -658,6 +670,8 @@ macro(HIP_ADD_EXECUTABLE hip_target) endif() endif() set(CMAKE_HIP_LINK_EXECUTABLE "${HIP_HIPCC_CMAKE_LINKER_HELPER} ${HIP_CLANG_PATH} ${HIP_CLANG_PARALLEL_BUILD_LINK_OPTIONS} -o ") + else() + set(CMAKE_HIP_LINK_EXECUTABLE "${HIP_HIPCC_CMAKE_LINKER_HELPER} -o ") endif() if ("${_sources}" STREQUAL "") add_executable(${hip_target} ${_cmake_options} ${_generated_files} "") @@ -665,6 +679,11 @@ macro(HIP_ADD_EXECUTABLE hip_target) add_executable(${hip_target} ${_cmake_options} ${_generated_files} ${_sources}) endif() set_target_properties(${hip_target} PROPERTIES LINKER_LANGUAGE HIP) + # Link with host + if (HIP_HOST_INTERFACE) + # hip rt should be rocclr, compiler should be clang + target_link_libraries(${hip_target} ${HIP_HOST_INTERFACE}) + endif() endmacro() ############################################################################### @@ -683,6 +702,11 @@ macro(HIP_ADD_LIBRARY hip_target) add_library(${hip_target} ${_cmake_options} ${_generated_files} ${_sources}) endif() set_target_properties(${hip_target} PROPERTIES LINKER_LANGUAGE ${HIP_C_OR_CXX}) + # Link with host + if (HIP_HOST_INTERFACE) + # hip rt should be rocclr, compiler should be clang + target_link_libraries(${hip_target} ${HIP_HOST_INTERFACE}) + endif() endmacro() # vim: ts=4:sw=4:expandtab:smartindent diff --git a/cmake/modules/FindHIP/run_hipcc.cmake b/cmake/modules/FindHIP/run_hipcc.cmake index 7db43e8..7c642fb 100644 --- a/cmake/modules/FindHIP/run_hipcc.cmake +++ b/cmake/modules/FindHIP/run_hipcc.cmake @@ -1,7 +1,6 @@ ############################################################################### # Runs commands using HIPCC ############################################################################### - # Copyright (c) 2008-2020 Advanced Micro Devices, Inc. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -22,7 +21,6 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. - ############################################################################### # This file runs the hipcc commands to produce the desired output file # along with the dependency file needed by CMake to compute dependencies. @@ -69,7 +67,7 @@ execute_process(COMMAND ${HIP_HIPCONFIG_EXECUTABLE} --compiler OUTPUT_VARIABLE H execute_process(COMMAND ${HIP_HIPCONFIG_EXECUTABLE} --runtime OUTPUT_VARIABLE HIP_RUNTIME OUTPUT_STRIP_TRAILING_WHITESPACE) if(NOT host_flag) set(__CC ${HIP_HIPCC_EXECUTABLE}) - if("${HIP_PLATFORM}" STREQUAL "hcc") + if("${HIP_PLATFORM}" STREQUAL "amd" OR "${HIP_PLATFORM}" STREQUAL "hcc") if("${HIP_COMPILER}" STREQUAL "hcc") if(NOT "x${HCC_HOME}" STREQUAL "x") set(ENV{HCC_HOME} ${HCC_HOME}) diff --git a/cmake/modules/FindHIP/run_make2cmake.cmake b/cmake/modules/FindHIP/run_make2cmake.cmake index ccc4b51..d75a2e2 100644 --- a/cmake/modules/FindHIP/run_make2cmake.cmake +++ b/cmake/modules/FindHIP/run_make2cmake.cmake @@ -1,7 +1,6 @@ ############################################################################### # Computes dependencies using HIPCC ############################################################################### - # Copyright (c) 2008-2020 Advanced Micro Devices, Inc. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -22,7 +21,6 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. - ############################################################################### # This file converts dependency files generated using hipcc to a format that # cmake can understand. From 39d83d5102ddcf55fe48854f30f04a176683d4f7 Mon Sep 17 00:00:00 2001 From: Simon Frasch Date: Tue, 13 Apr 2021 11:53:13 +0200 Subject: [PATCH 3/3] release 1.0.2 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fdfa94d..aee7806 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.11 FATAL_ERROR) # 3.11 to avoid issues with OpenMP + CUDA -project(SpFFT LANGUAGES CXX VERSION 1.0.1) +project(SpFFT LANGUAGES CXX VERSION 1.0.2) set(SPFFT_SO_VERSION 1) set(SPFFT_VERSION ${PROJECT_VERSION})