fix cmake issues: always build static heFFTe libs, fixup git hash, cmake output

This commit is contained in:
Axel Kohlmeyer
2024-01-31 16:19:55 -05:00
parent de7c459b2f
commit 677c8258e2
3 changed files with 33 additions and 24 deletions

View File

@ -971,14 +971,15 @@ if(PKG_KOKKOS)
endif() endif()
endif() endif()
if(PKG_KSPACE) if(PKG_KSPACE)
if (LMP_HEFFTE) if (FFT_USE_HEFFTE)
message(STATUS "<<< FFT settings >>> message(STATUS "<<< FFT settings >>>
-- Primary FFT lib: heFFTe") -- Primary FFT lib: heFFTe")
if (HEFFTE_BACKEND) if (FFT_HEFFTE_BACKEND)
message(STATUS "heFFTe backend: ${HEFFTE_BACKEND}") message(STATUS "heFFTe backend: ${FFT_HEFFTE_BACKEND}")
else() else()
message(STATUS "heFFTe backend: stock (builtin FFT implementation, tested for corrected but not optimized for production)") message(STATUS "heFFTe backend: stock (builtin FFT implementation, tested for corrected but not optimized for production)")
endif() endif()
message(STATUS "Using distributed FFT algorithms from heFTTe")
if(FFT_SINGLE) if(FFT_SINGLE)
message(STATUS "Using single precision FFTs") message(STATUS "Using single precision FFTs")
else() else()
@ -997,14 +998,10 @@ if(PKG_KSPACE)
else() else()
message(STATUS "Using non-threaded FFTs") message(STATUS "Using non-threaded FFTs")
endif() endif()
if (FFT_HEFFTE) message(STATUS "Using builtin distributed FFT algorithms")
message(STATUS "Using distributed algorithms from heFTTe") endif()
else() if(PKG_KOKKOS)
message(STATUS "Using builtin distributed algorithms") message(STATUS "Kokkos FFT: ${FFT_KOKKOS}")
endif()
if(PKG_KOKKOS)
message(STATUS "Kokkos FFT: ${FFT_KOKKOS}")
endif()
endif() endif()
endif() endif()
if(BUILD_DOC) if(BUILD_DOC)

View File

@ -50,7 +50,7 @@ option(FFT_USE_HEFFTE "Use heFFTe as the distributed FFT engine, overrides the
if(FFT_USE_HEFFTE) if(FFT_USE_HEFFTE)
# if FFT_HEFFTE is enabled, switch the builtin FFT engine with Heffte # if FFT_HEFFTE is enabled, switch the builtin FFT engine with Heffte
set(FFT_HEFFTE_BACKEND_VALUES FFTW MKL) set(FFT_HEFFTE_BACKEND_VALUES FFTW MKL)
set(FFT_HEFFTE_BACKEND "" CACHE STRING "Select heFFTe backend, e.g., FFTW or MKL") set(FFT_HEFFTE_BACKEND "${FFT}" CACHE STRING "Select heFFTe backend, e.g., FFTW or MKL")
set_property(CACHE FFT_HEFFTE_BACKEND PROPERTY STRINGS ${FFT_HEFFTE_BACKEND_VALUES}) set_property(CACHE FFT_HEFFTE_BACKEND PROPERTY STRINGS ${FFT_HEFFTE_BACKEND_VALUES})
if(FFT_HEFFTE_BACKEND STREQUAL "FFTW") # respect the backend choice, FFTW or MKL if(FFT_HEFFTE_BACKEND STREQUAL "FFTW") # respect the backend choice, FFTW or MKL
@ -60,24 +60,36 @@ if(FFT_USE_HEFFTE)
set(HEFFTE_COMPONENTS "MKL") set(HEFFTE_COMPONENTS "MKL")
set(Heffte_ENABLE_MKL "ON" CACHE BOOL "Enables MKL backend for heFFTe") set(Heffte_ENABLE_MKL "ON" CACHE BOOL "Enables MKL backend for heFFTe")
else() else()
set(HEFFTE_COMPONENTS "BUILTIN")
message(WARNING "FFT_HEFFTE_BACKEND not selected, defaulting to the builtin 'stock' backend, which is intended for testing and is not optimized for production runs") message(WARNING "FFT_HEFFTE_BACKEND not selected, defaulting to the builtin 'stock' backend, which is intended for testing and is not optimized for production runs")
endif() endif()
find_package(Heffte 2.4.0 QUIET COMPONENTS ${HEFFTE_COMPONENTS}) find_package(Heffte 2.4.0 QUIET COMPONENTS ${HEFFTE_COMPONENTS})
if (NOT Heffte_FOUND) # download and build if (NOT Heffte_FOUND) # download and build
if(BUILD_SHARED_LIBS)
set(BUILD_SHARED_LIBS_WAS_ON YES)
set(BUILD_SHARED_LIBS OFF)
endif()
if(CMAKE_REQUEST_PIC)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif()
include(FetchContent) include(FetchContent)
FetchContent_Declare(HEFFTE_PROJECT # using v2.4.0 FetchContent_Declare(HEFFTE_PROJECT # using v2.4.0
URL "https://github.com/icl-utk-edu/heffte/archive/refs/tags/v2.4.0.tar.gz" URL "https://github.com/icl-utk-edu/heffte/archive/refs/tags/v2.4.0.tar.gz"
URL_HASH SHA256=02310fb4f9688df02f7181667e61c3adb7e38baf79611d80919d47452ff7881d URL_HASH SHA256=02310fb4f9688df02f7181667e61c3adb7e38baf79611d80919d47452ff7881d
) )
FetchContent_Populate(HEFFTE_PROJECT) FetchContent_Populate(HEFFTE_PROJECT)
# fixup git hash to show "(unknown)" to avoid compilation failures. It cannot derive the HeFFTe hash anyway.
file(READ ${heffte_project_SOURCE_DIR}/include/heffte_config.cmake.h HEFFTE_CFG_FILE_TEXT)
string(REPLACE "@Heffte_GIT_HASH@" "(unknown)" HEFFTE_CFG_FILE_TEXT "${HEFFTE_CFG_FILE_TEXT}")
file(WRITE ${heffte_project_SOURCE_DIR}/include/heffte_config.cmake.h "${HEFFTE_CFG_FILE_TEXT}")
add_subdirectory(${heffte_project_SOURCE_DIR} ${heffte_project_BINARY_DIR}) add_subdirectory(${heffte_project_SOURCE_DIR} ${heffte_project_BINARY_DIR})
set_target_properties(lmp PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
set_target_properties(lammps PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
add_library(Heffte::Heffte INTERFACE IMPORTED GLOBAL) add_library(Heffte::Heffte INTERFACE IMPORTED GLOBAL)
target_link_libraries(Heffte::Heffte INTERFACE Heffte) target_link_libraries(Heffte::Heffte INTERFACE Heffte)
if(BUILD_SHARED_LIBS_WAS_ON)
set(BUILD_SHARED_LIBS ON)
endif()
endif() endif()
target_compile_definitions(lammps PRIVATE -DFFT_HEFFTE "-DFFT_HEFFTE_${FFT_HEFFTE_BACKEND}") target_compile_definitions(lammps PRIVATE -DFFT_HEFFTE "-DFFT_HEFFTE_${FFT_HEFFTE_BACKEND}")
target_link_libraries(lammps PRIVATE Heffte::Heffte) target_link_libraries(lammps PRIVATE Heffte::Heffte)
endif() endif()

View File

@ -34,7 +34,15 @@
// set strings for library info output // set strings for library info output
#if defined(FFT_FFTW3) #if defined(FFT_HEFFTE)
#if defined(FFT_HEFFTE_FFTW)
#define LMP_FFT_LIB "HeFFTe(FFTW3)"
#elif defined(FFT_HEFFTE_MKL)
#define LMP_FFT_LIB "HeFFTe(MKL)"
#else
#define LMP_FFT_LIB "HeFFTe(native)"
#endif
#elif defined(FFT_FFTW3)
#define LMP_FFT_LIB "FFTW3" #define LMP_FFT_LIB "FFTW3"
#elif defined(FFT_MKL) #elif defined(FFT_MKL)
#define LMP_FFT_LIB "MKL FFT" #define LMP_FFT_LIB "MKL FFT"
@ -42,14 +50,6 @@
#define LMP_FFT_LIB "cuFFT" #define LMP_FFT_LIB "cuFFT"
#elif defined(FFT_HIPFFT) #elif defined(FFT_HIPFFT)
#define LMP_FFT_LIB "hipFFT" #define LMP_FFT_LIB "hipFFT"
#elif defined(FFT_HEFFT)
#if defined(FFT_HEFFTE_FFTW)
#define LMP_FFT_LIB "HeFFTe (FFTW3)"
#elif defined(FFT_HEFFTE_MKL)
#define LMP_FFT_LIB "HeFFTe (MKL)"
#else
#define LMP_FFT_LIB "HeFFTe (native)"
#endif
#else #else
#define LMP_FFT_LIB "KISS FFT" #define LMP_FFT_LIB "KISS FFT"
#endif #endif