From 1fc8e0564200d645a2891ea723afba8b8f6e6ef0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 2 Jun 2025 15:48:40 -0400 Subject: [PATCH] roll back changes switching from MPI::MPI_CXX to MPI::MPI_C --- cmake/CMakeLists.txt | 23 +++++++++++------------ cmake/Modules/LAMMPSInterfacePlugin.cmake | 7 ++++--- cmake/Modules/Packages/COLVARS.cmake | 3 +-- cmake/Modules/Packages/GPU.cmake | 3 +-- cmake/Modules/Packages/ML-HDNNP.cmake | 6 +++--- examples/COUPLE/plugin/CMakeLists.txt | 3 --- examples/COUPLE/simple/CMakeLists.txt | 4 ++-- examples/plugins/LAMMPSInterfaceCXX.cmake | 7 ++++--- 8 files changed, 26 insertions(+), 30 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index b75dc92b63..cca609d8aa 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -203,6 +203,10 @@ if((CMAKE_SYSTEM_NAME STREQUAL "Windows") AND BUILD_SHARED_LIBS) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) endif() +# do not include the (obsolete) MPI C++ bindings which makes for leaner object files +# and avoids namespace conflicts. Put this early to increase its visbility. +set(MPI_CXX_SKIP_MPICXX TRUE) + ######################################################################## # User input options # ######################################################################## @@ -400,28 +404,24 @@ if(PKG_ADIOS) endif() if(NOT CMAKE_CROSSCOMPILING) - find_package(MPI QUIET COMPONENTS C) + find_package(MPI QUIET COMPONENTS CXX) option(BUILD_MPI "Build MPI version" ${MPI_FOUND}) else() option(BUILD_MPI "Build MPI version" OFF) endif() if(BUILD_MPI) - # do not include the (obsolete) MPI C++ bindings which makes - # for leaner object files and avoids namespace conflicts - set(MPI_CXX_SKIP_MPICXX TRUE) # We use a non-standard procedure to cross-compile with MPI on Windows if((CMAKE_SYSTEM_NAME STREQUAL "Windows") AND CMAKE_CROSSCOMPILING) include(MPI4WIN) else() - find_package(MPI REQUIRED COMPONENTS C) + find_package(MPI REQUIRED COMPONENTS CXX) option(LAMMPS_LONGLONG_TO_LONG "Workaround if your system or MPI version does not recognize 'long long' data types" OFF) if(LAMMPS_LONGLONG_TO_LONG) target_compile_definitions(lammps PRIVATE -DLAMMPS_LONGLONG_TO_LONG) endif() endif() - target_link_libraries(lammps PUBLIC MPI::MPI_C) - target_compile_definitions(lammps PUBLIC -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1) + target_link_libraries(lammps PUBLIC MPI::MPI_CXX) else() target_sources(lammps PRIVATE ${LAMMPS_SOURCE_DIR}/STUBS/mpi.cpp) add_library(mpi_stubs INTERFACE) @@ -717,7 +717,6 @@ foreach(PKG_LIB POEMS ATC AWPMD H5MD) file(GLOB_RECURSE ${PKG_LIB}_SOURCES CONFIGURE_DEPENDS ${LAMMPS_LIB_SOURCE_DIR}/${PKG_LIB}/[^.]*.c ${LAMMPS_LIB_SOURCE_DIR}/${PKG_LIB}/[^.]*.cpp) add_library(${PKG_LIB} STATIC ${${PKG_LIB}_SOURCES}) - target_compile_definitions(${PKG_LIB} PUBLIC -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1) set_target_properties(${PKG_LIB} PROPERTIES OUTPUT_NAME lammps_${PKG_LIB}${LAMMPS_MACHINE}) target_link_libraries(lammps PRIVATE ${PKG_LIB}) if(PKG_LIB STREQUAL "awpmd") @@ -743,7 +742,7 @@ if(PKG_ATC) message(FATAL_ERROR "The ATC Package is not compatible with -DLAMMPS_BIGBIG") endif() if(BUILD_MPI) - target_link_libraries(atc PRIVATE ${LAPACK_LIBRARIES} MPI::MPI_C) + target_link_libraries(atc PRIVATE ${LAPACK_LIBRARIES} MPI::MPI_CXX) else() target_link_libraries(atc PRIVATE ${LAPACK_LIBRARIES} mpi_stubs) endif() @@ -1057,9 +1056,9 @@ else() endif() if(BUILD_MPI) message(STATUS "<<< MPI flags >>> --- MPI_defines: ${MPI_C_COMPILE_DEFINITIONS} --- MPI includes: ${MPI_C_INCLUDE_PATH} --- MPI libraries: ${MPI_C_LIBRARIES};${MPI_Fortran_LIBRARIES}") +-- MPI_defines: ${MPI_CXX_COMPILE_DEFINITIONS} +-- MPI includes: ${MPI_CXX_INCLUDE_PATH} +-- MPI libraries: ${MPI_CXX_LIBRARIES};${MPI_Fortran_LIBRARIES}") endif() if(PKG_GPU) message(STATUS "<<< GPU package settings >>> diff --git a/cmake/Modules/LAMMPSInterfacePlugin.cmake b/cmake/Modules/LAMMPSInterfacePlugin.cmake index 7c71c6dae2..a449f5b3dd 100644 --- a/cmake/Modules/LAMMPSInterfacePlugin.cmake +++ b/cmake/Modules/LAMMPSInterfacePlugin.cmake @@ -62,6 +62,9 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") endif() set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) +# skip over obsolete MPI-2 C++ bindings +set(MPI_CXX_SKIP_MPICXX TRUE) + ####### # helper functions from LAMMPSUtils.cmake function(validate_option name values) @@ -128,9 +131,7 @@ endif() ################################################################################ # MPI configuration if(NOT CMAKE_CROSSCOMPILING) - set(MPI_CXX_SKIP_MPICXX TRUE) - enable_language(C) - find_package(MPI QUIET COMPONENTS C) + find_package(MPI QUIET COMPONENTS CXX) option(BUILD_MPI "Build MPI version" ${MPI_FOUND}) else() option(BUILD_MPI "Build MPI version" OFF) diff --git a/cmake/Modules/Packages/COLVARS.cmake b/cmake/Modules/Packages/COLVARS.cmake index 7b21c5804e..afef315120 100644 --- a/cmake/Modules/Packages/COLVARS.cmake +++ b/cmake/Modules/Packages/COLVARS.cmake @@ -27,8 +27,7 @@ if(BUILD_OMP) endif() if(BUILD_MPI) - target_compile_definitions(colvars PUBLIC -DCOLVARS_MPI -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1) - target_link_libraries(colvars PUBLIC MPI::MPI_C) + target_link_libraries(colvars PUBLIC MPI::MPI_CXX) endif() if(COLVARS_DEBUG) diff --git a/cmake/Modules/Packages/GPU.cmake b/cmake/Modules/Packages/GPU.cmake index 4c4ace1abd..efc9f1f764 100644 --- a/cmake/Modules/Packages/GPU.cmake +++ b/cmake/Modules/Packages/GPU.cmake @@ -484,12 +484,11 @@ RegisterFixStyle(${GPU_SOURCES_DIR}/fix_gpu.h) get_property(GPU_SOURCES GLOBAL PROPERTY GPU_SOURCES) if(BUILD_MPI) - target_link_libraries(gpu PRIVATE MPI::MPI_C) + target_link_libraries(gpu PRIVATE MPI::MPI_CXX) else() target_link_libraries(gpu PRIVATE mpi_stubs) endif() -target_compile_definitions(gpu PRIVATE -DLAMMPS_${LAMMPS_SIZES} -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1) set_target_properties(gpu PROPERTIES OUTPUT_NAME lammps_gpu${LAMMPS_MACHINE}) target_sources(lammps PRIVATE ${GPU_SOURCES}) target_include_directories(lammps PRIVATE ${GPU_SOURCES_DIR}) diff --git a/cmake/Modules/Packages/ML-HDNNP.cmake b/cmake/Modules/Packages/ML-HDNNP.cmake index 086432c1bf..99017f222d 100644 --- a/cmake/Modules/Packages/ML-HDNNP.cmake +++ b/cmake/Modules/Packages/ML-HDNNP.cmake @@ -44,7 +44,7 @@ if(DOWNLOAD_N2P2) set(N2P2_PROJECT_OPTIONS "-DN2P2_NO_MPI") else() # get path to MPI include directory - get_target_property(N2P2_MPI_INCLUDE MPI::MPI_C INTERFACE_INCLUDE_DIRECTORIES) + get_target_property(N2P2_MPI_INCLUDE MPI::MPI_CXX INTERFACE_INCLUDE_DIRECTORIES) foreach (_INCL ${N2P2_MPI_INCLUDE}) set(N2P2_PROJECT_OPTIONS "${N2P2_PROJECT_OPTIONS} -I${_INCL}") endforeach() @@ -102,9 +102,9 @@ if(DOWNLOAD_N2P2) # nnpif library has MPI calls if MPI is enabled, so we must link with MPI libs if(BUILD_MPI) set_target_properties(LAMMPS::N2P2::LIBNNPIF PROPERTIES - INTERFACE_LINK_LIBRARIES MPI::MPI_C) + INTERFACE_LINK_LIBRARIES MPI::MPI_CXX) if((CMAKE_SYSTEM_NAME STREQUAL Windows) AND CMAKE_CROSSCOMPILING) - add_dependencies(LAMMPS::N2P2::LIBNNPIF MPI::MPI_C) + add_dependencies(LAMMPS::N2P2::LIBNNPIF MPI::MPI_CXX) endif() endif() diff --git a/examples/COUPLE/plugin/CMakeLists.txt b/examples/COUPLE/plugin/CMakeLists.txt index c8deb5c7c6..4f7ab41847 100644 --- a/examples/COUPLE/plugin/CMakeLists.txt +++ b/examples/COUPLE/plugin/CMakeLists.txt @@ -28,9 +28,6 @@ if(MSVC) endif() find_package(MPI REQUIRED COMPONENTS C) -# do not include the (obsolete) MPI C++ bindings which makes -# for leaner object files and avoids namespace conflicts -set(MPI_CXX_SKIP_MPICXX TRUE) ########################## diff --git a/examples/COUPLE/simple/CMakeLists.txt b/examples/COUPLE/simple/CMakeLists.txt index 6d26db1877..8396e5fb72 100644 --- a/examples/COUPLE/simple/CMakeLists.txt +++ b/examples/COUPLE/simple/CMakeLists.txt @@ -25,10 +25,10 @@ if(MSVC) add_compile_definitions(_CRT_SECURE_NO_WARNINGS) endif() -find_package(MPI QUIET COMPONENTS C) # do not include the (obsolete) MPI C++ bindings which makes # for leaner object files and avoids namespace conflicts set(MPI_CXX_SKIP_MPICXX TRUE) +find_package(MPI QUIET COMPONENTS C CXX) ########################## @@ -38,7 +38,7 @@ if(NOT LAMMPS_SOURCE_DIR) endif() add_executable(simpleCC simple.cpp) -target_link_libraries(simpleCC PRIVATE LAMMPS::lammps MPI::MPI_C) +target_link_libraries(simpleCC PRIVATE LAMMPS::lammps MPI::MPI_CXX) add_executable(simpleC simple.c) target_link_libraries(simpleC PRIVATE LAMMPS::lammps MPI::MPI_C) diff --git a/examples/plugins/LAMMPSInterfaceCXX.cmake b/examples/plugins/LAMMPSInterfaceCXX.cmake index 207b579c89..6ff154dec4 100644 --- a/examples/plugins/LAMMPSInterfaceCXX.cmake +++ b/examples/plugins/LAMMPSInterfaceCXX.cmake @@ -33,10 +33,11 @@ endif() ################################################################################ # MPI configuration +# do not include the (obsolete) MPI C++ bindings which makes +# for leaner object files and avoids namespace conflicts +set(MPI_CXX_SKIP_MPICXX TRUE) if(NOT CMAKE_CROSSCOMPILING) - enable_language(C) - set(MPI_CXX_SKIP_MPICXX TRUE) - find_package(MPI QUIET COMPONENTS C) + find_package(MPI QUIET COMPONENTS CXX) option(BUILD_MPI "Build MPI version" ${MPI_FOUND}) else() option(BUILD_MPI "Build MPI version" OFF)