From ac556104c1f84143565918f6cc4b109e38fb6a23 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 May 2025 17:12:57 -0400 Subject: [PATCH 01/23] link to MPI C interface instead of C++ --- cmake/CMakeLists.txt | 7 ++++--- cmake/Modules/LAMMPSInterfacePlugin.cmake | 19 ++++++++++--------- cmake/Modules/MPI4WIN.cmake | 12 ++++++------ cmake/Modules/Packages/COLVARS.cmake | 2 +- cmake/Modules/Packages/GPU.cmake | 2 +- cmake/Modules/Packages/ML-HDNNP.cmake | 6 +++--- 6 files changed, 25 insertions(+), 23 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 04ec037184..d21c845bad 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -406,13 +406,14 @@ if(BUILD_MPI) if((CMAKE_SYSTEM_NAME STREQUAL "Windows") AND CMAKE_CROSSCOMPILING) include(MPI4WIN) else() - find_package(MPI REQUIRED) + enable_language(C) + find_package(MPI REQUIRED COMPONENTS C) 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_CXX) + target_link_libraries(lammps PUBLIC MPI::MPI_C) else() target_sources(lammps PRIVATE ${LAMMPS_SOURCE_DIR}/STUBS/mpi.cpp) add_library(mpi_stubs INTERFACE) @@ -734,7 +735,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_CXX) + target_link_libraries(atc PRIVATE ${LAPACK_LIBRARIES} MPI::MPI_C) else() target_link_libraries(atc PRIVATE ${LAPACK_LIBRARIES} mpi_stubs) endif() diff --git a/cmake/Modules/LAMMPSInterfacePlugin.cmake b/cmake/Modules/LAMMPSInterfacePlugin.cmake index 5b7444f62c..2363937af5 100644 --- a/cmake/Modules/LAMMPSInterfacePlugin.cmake +++ b/cmake/Modules/LAMMPSInterfacePlugin.cmake @@ -129,7 +129,8 @@ endif() # MPI configuration if(NOT CMAKE_CROSSCOMPILING) set(MPI_CXX_SKIP_MPICXX TRUE) - find_package(MPI QUIET) + enable_language(C) + find_package(MPI QUIET COMPONENTS C) option(BUILD_MPI "Build MPI version" ${MPI_FOUND}) else() option(BUILD_MPI "Build MPI version" OFF) @@ -163,12 +164,12 @@ if(BUILD_MPI) ExternalProject_get_property(mpi4win_build SOURCE_DIR) file(MAKE_DIRECTORY "${SOURCE_DIR}/include") - add_library(MPI::MPI_CXX UNKNOWN IMPORTED) - set_target_properties(MPI::MPI_CXX PROPERTIES + add_library(MPI::MPI_C UNKNOWN IMPORTED) + set_target_properties(MPI::MPI_C PROPERTIES IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmsmpi.a" INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include" INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - add_dependencies(MPI::MPI_CXX mpi4win_build) + add_dependencies(MPI::MPI_C mpi4win_build) # set variables for status reporting at the end of CMake run set(MPI_CXX_INCLUDE_PATH "${SOURCE_DIR}/include") @@ -199,12 +200,12 @@ if(BUILD_MPI) ExternalProject_get_property(mpi4win_build SOURCE_DIR) file(MAKE_DIRECTORY "${SOURCE_DIR}/include") - add_library(MPI::MPI_CXX UNKNOWN IMPORTED) - set_target_properties(MPI::MPI_CXX PROPERTIES + add_library(MPI::MPI_C UNKNOWN IMPORTED) + set_target_properties(MPI::MPI_C PROPERTIES IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmpi.a" INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include" INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - add_dependencies(MPI::MPI_CXX mpi4win_build) + add_dependencies(MPI::MPI_C mpi4win_build) # set variables for status reporting at the end of CMake run set(MPI_CXX_INCLUDE_PATH "${SOURCE_DIR}/include") @@ -212,13 +213,13 @@ if(BUILD_MPI) set(MPI_CXX_LIBRARIES "${SOURCE_DIR}/lib/libmpi.a") endif() else() - find_package(MPI REQUIRED) + find_package(MPI REQUIRED COMPONENTS C) 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 INTERFACE -DLAMMPS_LONGLONG_TO_LONG) endif() endif() - target_link_libraries(lammps INTERFACE MPI::MPI_CXX) + target_link_libraries(lammps INTERFACE MPI::MPI_C) else() add_library(mpi_stubs INTERFACE) target_include_directories(mpi_stubs INTERFACE $) diff --git a/cmake/Modules/MPI4WIN.cmake b/cmake/Modules/MPI4WIN.cmake index 02db6d4744..9c5a2c8b6c 100644 --- a/cmake/Modules/MPI4WIN.cmake +++ b/cmake/Modules/MPI4WIN.cmake @@ -21,12 +21,12 @@ if(USE_MSMPI) ExternalProject_get_property(mpi4win_build SOURCE_DIR) file(MAKE_DIRECTORY "${SOURCE_DIR}/include") - add_library(MPI::MPI_CXX UNKNOWN IMPORTED) - set_target_properties(MPI::MPI_CXX PROPERTIES + add_library(MPI::MPI_C UNKNOWN IMPORTED) + set_target_properties(MPI::MPI_C PROPERTIES IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmsmpi.a" INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include" INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - add_dependencies(MPI::MPI_CXX mpi4win_build) + add_dependencies(MPI::MPI_C mpi4win_build) # set variables for status reporting at the end of CMake run set(MPI_CXX_INCLUDE_PATH "${SOURCE_DIR}/include") @@ -60,12 +60,12 @@ else() ExternalProject_get_property(mpi4win_build SOURCE_DIR) file(MAKE_DIRECTORY "${SOURCE_DIR}/include") - add_library(MPI::MPI_CXX UNKNOWN IMPORTED) - set_target_properties(MPI::MPI_CXX PROPERTIES + add_library(MPI::MPI_C UNKNOWN IMPORTED) + set_target_properties(MPI::MPI_C PROPERTIES IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmpi.a" INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include" INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - add_dependencies(MPI::MPI_CXX mpi4win_build) + add_dependencies(MPI::MPI_C mpi4win_build) # set variables for status reporting at the end of CMake run set(MPI_CXX_INCLUDE_PATH "${SOURCE_DIR}/include") diff --git a/cmake/Modules/Packages/COLVARS.cmake b/cmake/Modules/Packages/COLVARS.cmake index b4dc738626..55fbc52abf 100644 --- a/cmake/Modules/Packages/COLVARS.cmake +++ b/cmake/Modules/Packages/COLVARS.cmake @@ -28,7 +28,7 @@ endif() if(BUILD_MPI) target_compile_definitions(colvars PUBLIC -DCOLVARS_MPI) - target_link_libraries(colvars PUBLIC MPI::MPI_CXX) + target_link_libraries(colvars PUBLIC MPI::MPI_C) endif() if(COLVARS_DEBUG) diff --git a/cmake/Modules/Packages/GPU.cmake b/cmake/Modules/Packages/GPU.cmake index 6d0ce303a5..f32e97c3eb 100644 --- a/cmake/Modules/Packages/GPU.cmake +++ b/cmake/Modules/Packages/GPU.cmake @@ -484,7 +484,7 @@ 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_CXX) + target_link_libraries(gpu PRIVATE MPI::MPI_C) else() target_link_libraries(gpu PRIVATE mpi_stubs) endif() diff --git a/cmake/Modules/Packages/ML-HDNNP.cmake b/cmake/Modules/Packages/ML-HDNNP.cmake index 99017f222d..086432c1bf 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_CXX INTERFACE_INCLUDE_DIRECTORIES) + get_target_property(N2P2_MPI_INCLUDE MPI::MPI_C 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_CXX) + INTERFACE_LINK_LIBRARIES MPI::MPI_C) if((CMAKE_SYSTEM_NAME STREQUAL Windows) AND CMAKE_CROSSCOMPILING) - add_dependencies(LAMMPS::N2P2::LIBNNPIF MPI::MPI_CXX) + add_dependencies(LAMMPS::N2P2::LIBNNPIF MPI::MPI_C) endif() endif() From acd53ebd7cf504bf4ec8f1094f773c17d05fef90 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 May 2025 17:13:36 -0400 Subject: [PATCH 02/23] update flag to accommodate changes in clang --- cmake/Modules/Testing.cmake | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/cmake/Modules/Testing.cmake b/cmake/Modules/Testing.cmake index a72ce17e1b..4862a0d38e 100644 --- a/cmake/Modules/Testing.cmake +++ b/cmake/Modules/Testing.cmake @@ -26,10 +26,17 @@ if(ENABLE_TESTING) OR ((CMAKE_LINUX_DISTRO STREQUAL "Fedora") AND (CMAKE_DISTRO_VERSION VERSION_GREATER 30))) include(CheckCXXCompilerFlag) set(CMAKE_CUSTOM_LINKER_DEFAULT default) - check_cxx_compiler_flag(-fuse-ld=mold HAVE_MOLD_LINKER_FLAG) - check_cxx_compiler_flag(-fuse-ld=lld HAVE_LLD_LINKER_FLAG) - check_cxx_compiler_flag(-fuse-ld=gold HAVE_GOLD_LINKER_FLAG) - check_cxx_compiler_flag(-fuse-ld=bfd HAVE_BFD_LINKER_FLAG) + if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 19.9)) + check_cxx_compiler_flag(--ld-path=mold HAVE_MOLD_LINKER_FLAG) + check_cxx_compiler_flag(--ld-path=lld HAVE_LLD_LINKER_FLAG) + check_cxx_compiler_flag(--ld-path=gold HAVE_GOLD_LINKER_FLAG) + check_cxx_compiler_flag(--ld-path=bfd HAVE_BFD_LINKER_FLAG) + else() + check_cxx_compiler_flag(-fuse-ld=mold HAVE_MOLD_LINKER_FLAG) + check_cxx_compiler_flag(-fuse-ld=lld HAVE_LLD_LINKER_FLAG) + check_cxx_compiler_flag(-fuse-ld=gold HAVE_GOLD_LINKER_FLAG) + check_cxx_compiler_flag(-fuse-ld=bfd HAVE_BFD_LINKER_FLAG) + endif() find_program(HAVE_MOLD_LINKER_BIN ld.mold) find_program(HAVE_LLD_LINKER_BIN lld ld.lld) find_program(HAVE_GOLD_LINKER_BIN ld.gold) @@ -48,7 +55,11 @@ if(ENABLE_TESTING) validate_option(CMAKE_CUSTOM_LINKER CMAKE_CUSTOM_LINKER_VALUES) mark_as_advanced(CMAKE_CUSTOM_LINKER) if(NOT "${CMAKE_CUSTOM_LINKER}" STREQUAL "default") - target_link_options(lammps PUBLIC -fuse-ld=${CMAKE_CUSTOM_LINKER}) + if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 19.9)) + target_link_options(lammps PUBLIC --ld-path=${CMAKE_CUSTOM_LINKER}) + else() + target_link_options(lammps PUBLIC -fuse-ld=${CMAKE_CUSTOM_LINKER}) + endif() endif() endif() endif() From b3e7121535863df3db487cd3e6a68c080bf2a6b4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 15 May 2025 02:13:19 -0400 Subject: [PATCH 03/23] modernize project() command and create project version string with dots --- cmake/CMakeLists.txt | 9 ++++++++- cmake/Modules/LAMMPSUtils.cmake | 22 +++++++++++++++++----- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 67e2e1f327..afa3f2a12e 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -7,6 +7,10 @@ if(CMAKE_VERSION VERSION_LESS 3.20) message(WARNING "LAMMPS is planning to require at least CMake version 3.20 by Summer 2025. Please upgrade!") endif() ######################################## +# initialize version variables with project command +if(POLICY CMP0048) + cmake_policy(SET CMP0048 NEW) +endif() # set policy to silence warnings about ignoring _ROOT but use it if(POLICY CMP0074) cmake_policy(SET CMP0074 NEW) @@ -27,7 +31,10 @@ endif() ######################################## -project(lammps CXX) +project(lammps + DESCRIPTION "The LAMMPS Molecular Dynamics Simulator" + HOMEPAGE_URL "https://www.lammps.org" + LANGUAGES CXX C) set(SOVERSION 0) get_property(BUILD_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) diff --git a/cmake/Modules/LAMMPSUtils.cmake b/cmake/Modules/LAMMPSUtils.cmake index 4675788647..93f541f921 100644 --- a/cmake/Modules/LAMMPSUtils.cmake +++ b/cmake/Modules/LAMMPSUtils.cmake @@ -75,13 +75,25 @@ function(get_lammps_version version_header variable) list(FIND MONTHS "${month}" month) string(LENGTH ${day} day_length) string(LENGTH ${month} month_length) - if(day_length EQUAL 1) - set(day "0${day}") + # no leading zero needed for new version string with dots + # if(day_length EQUAL 1) + # set(day "0${day}") + # endif() + # if(month_length EQUAL 1) + # set(month "0${month}") + #endif() + file(STRINGS ${version_header} line REGEX LAMMPS_UPDATE) + string(REGEX REPLACE "#define LAMMPS_UPDATE \"Update ([0-9]+)\"" "\\1" tweak "${line}") + if (line MATCHES "#define LAMMPS_UPDATE \"(Maintenance|Development)\"") + set(tweak "99") endif() - if(month_length EQUAL 1) - set(month "0${month}") + if(NOT tweak) + set(tweak "0") endif() - set(${variable} "${year}${month}${day}" PARENT_SCOPE) + # new version string with dots + set(${variable} "${year}.${month}.${day}.${tweak}" PARENT_SCOPE) + # old version string without dots + # set(${variable} "${year}${month}${day}" PARENT_SCOPE) endfunction() function(check_for_autogen_files source_dir) From 9abb171d0512ad6655edd6454ee78f4f6e2c0648 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 15 May 2025 02:49:02 -0400 Subject: [PATCH 04/23] more CMake scripting updates to use C style MPI libraries not C++ --- cmake/CMakeLists.txt | 11 ++++----- cmake/Modules/MPI4WIN.cmake | 12 +++++----- examples/COUPLE/plugin/CMakeLists.txt | 2 +- examples/COUPLE/simple/CMakeLists.txt | 4 ++-- examples/plugins/LAMMPSInterfaceCXX.cmake | 29 ++++++++++++----------- 5 files changed, 28 insertions(+), 30 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index afa3f2a12e..d7f79974de 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -386,7 +386,6 @@ if(PKG_ADIOS) # The search for ADIOS2 must come before MPI because # it includes its own MPI search with the latest FindMPI.cmake # script that defines the MPI::MPI_C target - enable_language(C) find_package(ADIOS2 REQUIRED) if(BUILD_MPI) if(NOT ADIOS2_HAVE_MPI) @@ -401,7 +400,7 @@ if(PKG_ADIOS) endif() if(NOT CMAKE_CROSSCOMPILING) - find_package(MPI QUIET) + find_package(MPI QUIET COMPONENTS C) option(BUILD_MPI "Build MPI version" ${MPI_FOUND}) else() option(BUILD_MPI "Build MPI version" OFF) @@ -415,7 +414,6 @@ if(BUILD_MPI) if((CMAKE_SYSTEM_NAME STREQUAL "Windows") AND CMAKE_CROSSCOMPILING) include(MPI4WIN) else() - enable_language(C) find_package(MPI REQUIRED COMPONENTS C) 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) @@ -543,7 +541,6 @@ if((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") AND (CMAKE_CXX_STANDARD GREATER_EQUA endif() if(PKG_ATC OR PKG_AWPMD OR PKG_ML-QUIP OR PKG_ML-POD OR PKG_ELECTRODE OR PKG_RHEO OR BUILD_TOOLS) - enable_language(C) if (NOT USE_INTERNAL_LINALG) find_package(LAPACK) find_package(BLAS) @@ -1058,9 +1055,9 @@ else() endif() if(BUILD_MPI) message(STATUS "<<< MPI flags >>> --- MPI_defines: ${MPI_CXX_COMPILE_DEFINITIONS} --- MPI includes: ${MPI_CXX_INCLUDE_PATH} --- MPI libraries: ${MPI_CXX_LIBRARIES};${MPI_Fortran_LIBRARIES}") +-- MPI_defines: ${MPI_C_COMPILE_DEFINITIONS} +-- MPI includes: ${MPI_C_INCLUDE_PATH} +-- MPI libraries: ${MPI_C_LIBRARIES};${MPI_Fortran_LIBRARIES}") endif() if(PKG_GPU) message(STATUS "<<< GPU package settings >>> diff --git a/cmake/Modules/MPI4WIN.cmake b/cmake/Modules/MPI4WIN.cmake index 9c5a2c8b6c..18a551b1c7 100644 --- a/cmake/Modules/MPI4WIN.cmake +++ b/cmake/Modules/MPI4WIN.cmake @@ -29,9 +29,9 @@ if(USE_MSMPI) add_dependencies(MPI::MPI_C mpi4win_build) # set variables for status reporting at the end of CMake run - set(MPI_CXX_INCLUDE_PATH "${SOURCE_DIR}/include") - set(MPI_CXX_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - set(MPI_CXX_LIBRARIES "${SOURCE_DIR}/lib/libmsmpi.a") + set(MPI_C_INCLUDE_PATH "${SOURCE_DIR}/include") + set(MPI_C_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") + set(MPI_C_LIBRARIES "${SOURCE_DIR}/lib/libmsmpi.a") else() message(STATUS "Downloading and configuring MPICH2-1.4.1 for Windows cross-compilation") set(MPICH2_WIN64_DEVEL_URL "${LAMMPS_THIRDPARTY_URL}/mpich2-win64-devel.tar.gz" CACHE STRING "URL for MPICH2 (win64) tarball") @@ -68,7 +68,7 @@ else() add_dependencies(MPI::MPI_C mpi4win_build) # set variables for status reporting at the end of CMake run - set(MPI_CXX_INCLUDE_PATH "${SOURCE_DIR}/include") - set(MPI_CXX_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - set(MPI_CXX_LIBRARIES "${SOURCE_DIR}/lib/libmpi.a") + set(MPI_C_INCLUDE_PATH "${SOURCE_DIR}/include") + set(MPI_C_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") + set(MPI_C_LIBRARIES "${SOURCE_DIR}/lib/libmpi.a") endif() diff --git a/examples/COUPLE/plugin/CMakeLists.txt b/examples/COUPLE/plugin/CMakeLists.txt index 00f86058fb..c8deb5c7c6 100644 --- a/examples/COUPLE/plugin/CMakeLists.txt +++ b/examples/COUPLE/plugin/CMakeLists.txt @@ -27,7 +27,7 @@ if(MSVC) add_compile_definitions(_CRT_SECURE_NO_WARNINGS) endif() -find_package(MPI REQUIRED) +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 c09b372183..6d26db1877 100644 --- a/examples/COUPLE/simple/CMakeLists.txt +++ b/examples/COUPLE/simple/CMakeLists.txt @@ -25,7 +25,7 @@ if(MSVC) add_compile_definitions(_CRT_SECURE_NO_WARNINGS) endif() -find_package(MPI QUIET) +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) @@ -38,7 +38,7 @@ if(NOT LAMMPS_SOURCE_DIR) endif() add_executable(simpleCC simple.cpp) -target_link_libraries(simpleCC PRIVATE LAMMPS::lammps MPI::MPI_CXX) +target_link_libraries(simpleCC PRIVATE LAMMPS::lammps MPI::MPI_C) 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 4cd4510a61..cdfcb498fe 100644 --- a/examples/plugins/LAMMPSInterfaceCXX.cmake +++ b/examples/plugins/LAMMPSInterfaceCXX.cmake @@ -34,8 +34,9 @@ endif() ################################################################################ # MPI configuration if(NOT CMAKE_CROSSCOMPILING) + enable_language(C) set(MPI_CXX_SKIP_MPICXX TRUE) - find_package(MPI QUIET) + find_package(MPI QUIET COMPONENTS C) option(BUILD_MPI "Build MPI version" ${MPI_FOUND}) else() option(BUILD_MPI "Build MPI version" OFF) @@ -69,17 +70,17 @@ if(BUILD_MPI) ExternalProject_get_property(mpi4win_build SOURCE_DIR) file(MAKE_DIRECTORY "${SOURCE_DIR}/include") - add_library(MPI::MPI_CXX UNKNOWN IMPORTED) - set_target_properties(MPI::MPI_CXX PROPERTIES + add_library(MPI::MPI_C UNKNOWN IMPORTED) + set_target_properties(MPI::MPI_C PROPERTIES IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmsmpi.a" INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include" INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - add_dependencies(MPI::MPI_CXX mpi4win_build) + add_dependencies(MPI::MPI_C mpi4win_build) # set variables for status reporting at the end of CMake run - set(MPI_CXX_INCLUDE_PATH "${SOURCE_DIR}/include") - set(MPI_CXX_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - set(MPI_CXX_LIBRARIES "${SOURCE_DIR}/lib/libmsmpi.a") + set(MPI_C_INCLUDE_PATH "${SOURCE_DIR}/include") + set(MPI_C_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") + set(MPI_C_LIBRARIES "${SOURCE_DIR}/lib/libmsmpi.a") else() # Download and configure custom MPICH files for Windows message(STATUS "Downloading and configuring MPICH-1.4.1 for Windows") @@ -105,17 +106,17 @@ if(BUILD_MPI) ExternalProject_get_property(mpi4win_build SOURCE_DIR) file(MAKE_DIRECTORY "${SOURCE_DIR}/include") - add_library(MPI::MPI_CXX UNKNOWN IMPORTED) - set_target_properties(MPI::MPI_CXX PROPERTIES + add_library(MPI::MPI_C UNKNOWN IMPORTED) + set_target_properties(MPI::MPI_C PROPERTIES IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmpi.a" INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include" INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - add_dependencies(MPI::MPI_CXX mpi4win_build) + add_dependencies(MPI::MPI_C mpi4win_build) # set variables for status reporting at the end of CMake run - set(MPI_CXX_INCLUDE_PATH "${SOURCE_DIR}/include") - set(MPI_CXX_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - set(MPI_CXX_LIBRARIES "${SOURCE_DIR}/lib/libmpi.a") + set(MPI_C_INCLUDE_PATH "${SOURCE_DIR}/include") + set(MPI_C_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") + set(MPI_C_LIBRARIES "${SOURCE_DIR}/lib/libmpi.a") endif() else() find_package(MPI REQUIRED) @@ -124,7 +125,7 @@ if(BUILD_MPI) target_compile_definitions(lammps INTERFACE -DLAMMPS_LONGLONG_TO_LONG) endif() endif() - target_link_libraries(lammps INTERFACE MPI::MPI_CXX) + target_link_libraries(lammps INTERFACE MPI::MPI_C) else() target_include_directories(lammps INTERFACE "${LAMMPS_SOURCE_DIR}/STUBS") endif() From 2b7c05c057a40fb4c29e658660afbbc2e7d741dc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 15 May 2025 04:02:44 -0400 Subject: [PATCH 05/23] properly select linker for modern clang compilers --- cmake/Modules/Testing.cmake | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/cmake/Modules/Testing.cmake b/cmake/Modules/Testing.cmake index 4862a0d38e..7aa3506642 100644 --- a/cmake/Modules/Testing.cmake +++ b/cmake/Modules/Testing.cmake @@ -21,22 +21,15 @@ if(ENABLE_TESTING) # also only verified with Fedora Linux > 30 and Ubuntu 18.04 or 22.04+(Ubuntu 20.04 fails) if((CMAKE_SYSTEM_NAME STREQUAL "Linux") AND ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang"))) - if(((CMAKE_LINUX_DISTRO STREQUAL "Ubuntu") AND - ((CMAKE_DISTRO_VERSION VERSION_LESS_EQUAL 18.04) OR (CMAKE_DISTRO_VERSION VERSION_GREATER_EQUAL 22.04))) + if(((CMAKE_LINUX_DISTRO STREQUAL "Ubuntu") AND (CMAKE_DISTRO_VERSION VERSION_GREATER_EQUAL 22.04)) OR ((CMAKE_LINUX_DISTRO STREQUAL "Fedora") AND (CMAKE_DISTRO_VERSION VERSION_GREATER 30))) include(CheckCXXCompilerFlag) set(CMAKE_CUSTOM_LINKER_DEFAULT default) - if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 19.9)) - check_cxx_compiler_flag(--ld-path=mold HAVE_MOLD_LINKER_FLAG) - check_cxx_compiler_flag(--ld-path=lld HAVE_LLD_LINKER_FLAG) - check_cxx_compiler_flag(--ld-path=gold HAVE_GOLD_LINKER_FLAG) - check_cxx_compiler_flag(--ld-path=bfd HAVE_BFD_LINKER_FLAG) - else() - check_cxx_compiler_flag(-fuse-ld=mold HAVE_MOLD_LINKER_FLAG) - check_cxx_compiler_flag(-fuse-ld=lld HAVE_LLD_LINKER_FLAG) - check_cxx_compiler_flag(-fuse-ld=gold HAVE_GOLD_LINKER_FLAG) - check_cxx_compiler_flag(-fuse-ld=bfd HAVE_BFD_LINKER_FLAG) - endif() + check_cxx_compiler_flag(--ld-path=${CMAKE_LINKER} HAVE_LD_PATH_FLAG) + check_cxx_compiler_flag(-fuse-ld=mold HAVE_MOLD_LINKER_FLAG) + check_cxx_compiler_flag(-fuse-ld=lld HAVE_LLD_LINKER_FLAG) + check_cxx_compiler_flag(-fuse-ld=gold HAVE_GOLD_LINKER_FLAG) + check_cxx_compiler_flag(-fuse-ld=bfd HAVE_BFD_LINKER_FLAG) find_program(HAVE_MOLD_LINKER_BIN ld.mold) find_program(HAVE_LLD_LINKER_BIN lld ld.lld) find_program(HAVE_GOLD_LINKER_BIN ld.gold) @@ -55,10 +48,17 @@ if(ENABLE_TESTING) validate_option(CMAKE_CUSTOM_LINKER CMAKE_CUSTOM_LINKER_VALUES) mark_as_advanced(CMAKE_CUSTOM_LINKER) if(NOT "${CMAKE_CUSTOM_LINKER}" STREQUAL "default") - if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 19.9)) - target_link_options(lammps PUBLIC --ld-path=${CMAKE_CUSTOM_LINKER}) - else() - target_link_options(lammps PUBLIC -fuse-ld=${CMAKE_CUSTOM_LINKER}) + target_link_options(lammps PUBLIC -fuse-ld=${CMAKE_CUSTOM_LINKER}) + endif() + if(HAVE_LD_PATH_FLAG) + if("${CMAKE_CUSTOM_LINKER}" STREQUAL "mold") + target_link_options(lammps PUBLIC --ld-path=${HAVE_MOLD_LINKER_BIN}) + elseif("${CMAKE_CUSTOM_LINKER}" STREQUAL "lld") + target_link_options(lammps PUBLIC --ld-path=${HAVE_LLD_LINKER_BIN}) + elseif("${CMAKE_CUSTOM_LINKER}" STREQUAL "gold") + target_link_options(lammps PUBLIC --ld-path=${HAVE_GOLD_LINKER_BIN}) + elseif("${CMAKE_CUSTOM_LINKER}" STREQUAL "bfd") + target_link_options(lammps PUBLIC --ld-path=${HAVE_BFD_LINKER_BIN}) endif() endif() endif() From 35f08232ba29dcff99008dad308576fa46633051 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 15 May 2025 07:46:48 -0400 Subject: [PATCH 06/23] update for Fedora 41/42 --- cmake/presets/hip_amd.cmake | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/cmake/presets/hip_amd.cmake b/cmake/presets/hip_amd.cmake index 4b8945e0c7..2cf28c05c4 100644 --- a/cmake/presets/hip_amd.cmake +++ b/cmake/presets/hip_amd.cmake @@ -19,12 +19,19 @@ set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE STRING "" FORCE) set(MPI_CXX "hipcc" CACHE STRING "" FORCE) set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE) +set(MPI_C "hipcc" CACHE STRING "" FORCE) +set(MPI_C_COMPILER "mpicc" CACHE STRING "" FORCE) + +# change as needed. This is for Fedora Linux 41 and 42 +set(_libomp_root "/usr/lib/clang/18") +# we need to explicitly specify the include dir, since hipcc will +# compile each file twice and doesn't find omp.h the second time unset(HAVE_OMP_H_INCLUDE CACHE) set(OpenMP_C "hipcc" CACHE STRING "" FORCE) -set(OpenMP_C_FLAGS "-fopenmp" CACHE STRING "" FORCE) +set(OpenMP_C_FLAGS "-fopenmp=libomp -I${_libomp_root}/include" CACHE STRING "" FORCE) set(OpenMP_C_LIB_NAMES "omp" CACHE STRING "" FORCE) set(OpenMP_CXX "hipcc" CACHE STRING "" FORCE) -set(OpenMP_CXX_FLAGS "-fopenmp" CACHE STRING "" FORCE) +set(OpenMP_CXX_FLAGS "-fopenmp=libomp -I${_libomp_root}/include" CACHE STRING "" FORCE) set(OpenMP_CXX_LIB_NAMES "omp" CACHE STRING "" FORCE) set(OpenMP_omp_LIBRARY "libomp.so" CACHE PATH "" FORCE) From fd8fb74a889bc8693625f8ea0b3d917563ad2158 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 15 May 2025 07:47:19 -0400 Subject: [PATCH 07/23] cannot use Kokkos-OpenMP with recent hipcc --- cmake/presets/kokkos-hip.cmake | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cmake/presets/kokkos-hip.cmake b/cmake/presets/kokkos-hip.cmake index c1968c0ffa..58b09020fb 100644 --- a/cmake/presets/kokkos-hip.cmake +++ b/cmake/presets/kokkos-hip.cmake @@ -1,8 +1,8 @@ -# preset that enables KOKKOS and selects HIP compilation with OpenMP -# enabled as well. Also sets some performance related compiler flags. +# preset that enables KOKKOS and selects HIP compilation withOUT OpenMP. +# Kokkos OpenMP is not compatible with the second pass of hipcc. set(PKG_KOKKOS ON CACHE BOOL "" FORCE) set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "" FORCE) -set(Kokkos_ENABLE_OPENMP ON CACHE BOOL "" FORCE) +set(Kokkos_ENABLE_OPENMP OFF CACHE BOOL "" FORCE) set(Kokkos_ENABLE_CUDA OFF CACHE BOOL "" FORCE) set(Kokkos_ENABLE_HIP ON CACHE BOOL "" FORCE) set(Kokkos_ARCH_VEGA90A on CACHE BOOL "" FORCE) @@ -11,11 +11,11 @@ set(BUILD_OMP ON CACHE BOOL "" FORCE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -munsafe-fp-atomics" CACHE STRING "" FORCE) -# If KSPACE is also enabled, use CUFFT for FFTs +# If KSPACE is also enabled, use HIPFFT for FFTs set(FFT_KOKKOS "HIPFFT" CACHE STRING "" FORCE) # hide deprecation warnings temporarily for stable release -set(Kokkos_ENABLE_DEPRECATION_WARNINGS OFF CACHE BOOL "" FORCE) +#set(Kokkos_ENABLE_DEPRECATION_WARNINGS OFF CACHE BOOL "" FORCE) # these flags are needed to build with Cray MPICH on OLCF Crusher #-D CMAKE_CXX_FLAGS="-I/${MPICH_DIR}/include" From 5a8da735f26c94e3b9a06274f388036525ac79a1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 19 May 2025 21:14:33 -0400 Subject: [PATCH 08/23] explicitly use the MPI::C imported target on the main executable --- cmake/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index d7f79974de..3568095d4d 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -421,6 +421,7 @@ if(BUILD_MPI) endif() endif() target_link_libraries(lammps PUBLIC MPI::MPI_C) + target_link_libraries(lmp PUBLIC MPI::MPI_C) else() target_sources(lammps PRIVATE ${LAMMPS_SOURCE_DIR}/STUBS/mpi.cpp) add_library(mpi_stubs INTERFACE) From 09b174d129e6b1596e75a08cf9be67601ea7e271 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 19 May 2025 21:15:00 -0400 Subject: [PATCH 09/23] turn off C++ support --- unittest/c-library/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unittest/c-library/CMakeLists.txt b/unittest/c-library/CMakeLists.txt index 62ec750a3f..5b5dd4f357 100644 --- a/unittest/c-library/CMakeLists.txt +++ b/unittest/c-library/CMakeLists.txt @@ -70,7 +70,7 @@ add_test(NAME LibraryConfig COMMAND test_library_config) add_executable(test_library_mpi test_library_mpi.cpp) target_link_libraries(test_library_mpi PRIVATE lammps GTest::GMock) -target_compile_definitions(test_library_mpi PRIVATE ${TEST_CONFIG_DEFS}) +target_compile_definitions(test_library_mpi PRIVATE "${TEST_CONFIG_DEFS};MPICH_SKIP_MPICXX;OMPI_SKIP_MPICXX=1") add_mpi_test(NAME LibraryMPI NUM_PROCS 4 COMMAND $) # simple run tests for coupling to the LAMMPS library From 186a6431f7a074fc7b1d5528d207ff299269b0c3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 19 May 2025 21:27:57 -0400 Subject: [PATCH 10/23] directly disable C++ support when compiling main.cpp --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 3568095d4d..1c79fef956 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -421,7 +421,7 @@ if(BUILD_MPI) endif() endif() target_link_libraries(lammps PUBLIC MPI::MPI_C) - target_link_libraries(lmp PUBLIC MPI::MPI_C) + target_compile_definitions(lmp PRIVATE -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1) else() target_sources(lammps PRIVATE ${LAMMPS_SOURCE_DIR}/STUBS/mpi.cpp) add_library(mpi_stubs INTERFACE) From 70e1bb50f182fc4acb328588d97a3502c0e4d014 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 19 May 2025 21:40:44 -0400 Subject: [PATCH 11/23] add skip C++ defines for LAMMPS library instead --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 1c79fef956..1d3ddc04da 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -421,7 +421,7 @@ if(BUILD_MPI) endif() endif() target_link_libraries(lammps PUBLIC MPI::MPI_C) - target_compile_definitions(lmp PRIVATE -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1) + target_compile_definitions(lammps PUBLIC -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1) else() target_sources(lammps PRIVATE ${LAMMPS_SOURCE_DIR}/STUBS/mpi.cpp) add_library(mpi_stubs INTERFACE) From 510563f5f3832cb5fd49b49cdc015ea62b76f95f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 19 May 2025 21:51:53 -0400 Subject: [PATCH 12/23] explicitly skip MPI C++ interface in colvars --- cmake/Modules/Packages/COLVARS.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/Modules/Packages/COLVARS.cmake b/cmake/Modules/Packages/COLVARS.cmake index 55fbc52abf..7b21c5804e 100644 --- a/cmake/Modules/Packages/COLVARS.cmake +++ b/cmake/Modules/Packages/COLVARS.cmake @@ -27,7 +27,7 @@ if(BUILD_OMP) endif() if(BUILD_MPI) - target_compile_definitions(colvars PUBLIC -DCOLVARS_MPI) + target_compile_definitions(colvars PUBLIC -DCOLVARS_MPI -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1) target_link_libraries(colvars PUBLIC MPI::MPI_C) endif() From 2cc1356384b5aba182f610a01462f0c1d9a4da4b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 19 May 2025 22:09:38 -0400 Subject: [PATCH 13/23] skip MPI C++ support also for libraries --- cmake/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 1d3ddc04da..b75dc92b63 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -717,6 +717,7 @@ 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") From adce5bef84caf48044f058b9853681e3a3b19759 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 19 May 2025 22:20:50 -0400 Subject: [PATCH 14/23] explicitly skip MPI C++ in GPU package library --- cmake/Modules/Packages/GPU.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/Modules/Packages/GPU.cmake b/cmake/Modules/Packages/GPU.cmake index f32e97c3eb..4c4ace1abd 100644 --- a/cmake/Modules/Packages/GPU.cmake +++ b/cmake/Modules/Packages/GPU.cmake @@ -489,7 +489,7 @@ else() target_link_libraries(gpu PRIVATE mpi_stubs) endif() -target_compile_definitions(gpu PRIVATE -DLAMMPS_${LAMMPS_SIZES}) +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}) From 271bdc1af73fc14335e2442d6d3dbd707b72698b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 20 May 2025 13:56:36 -0400 Subject: [PATCH 15/23] alternate way to specify defines for MPI tests --- unittest/c-library/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unittest/c-library/CMakeLists.txt b/unittest/c-library/CMakeLists.txt index 5b5dd4f357..142c4d3523 100644 --- a/unittest/c-library/CMakeLists.txt +++ b/unittest/c-library/CMakeLists.txt @@ -70,7 +70,7 @@ add_test(NAME LibraryConfig COMMAND test_library_config) add_executable(test_library_mpi test_library_mpi.cpp) target_link_libraries(test_library_mpi PRIVATE lammps GTest::GMock) -target_compile_definitions(test_library_mpi PRIVATE "${TEST_CONFIG_DEFS};MPICH_SKIP_MPICXX;OMPI_SKIP_MPICXX=1") +target_compile_definitions(test_library_mpi PRIVATE "${TEST_CONFIG_DEFS};-DMPICH_SKIP_MPICXX;-DOMPI_SKIP_MPICXX=1") add_mpi_test(NAME LibraryMPI NUM_PROCS 4 COMMAND $) # simple run tests for coupling to the LAMMPS library From 35528479576faa04361d4ba68ccaeb3eedf083a2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 May 2025 21:35:33 -0400 Subject: [PATCH 16/23] consistent use of definitions to avoid CMake adding spurious '-D' prefixes --- unittest/c-library/CMakeLists.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/unittest/c-library/CMakeLists.txt b/unittest/c-library/CMakeLists.txt index 5b5dd4f357..240da8bcf3 100644 --- a/unittest/c-library/CMakeLists.txt +++ b/unittest/c-library/CMakeLists.txt @@ -31,28 +31,28 @@ target_compile_definitions(test_library_scatter_gather PRIVATE -DTEST_INPUT_FOLD add_test(NAME LibraryScatterGather COMMAND test_library_scatter_gather) set_tests_properties(LibraryScatterGather PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") -set(TEST_CONFIG_DEFS "-DTEST_INPUT_FOLDER=${CMAKE_CURRENT_SOURCE_DIR};-DLAMMPS_${LAMMPS_SIZES}") +set(TEST_CONFIG_DEFS "TEST_INPUT_FOLDER=${CMAKE_CURRENT_SOURCE_DIR};LAMMPS_${LAMMPS_SIZES}") set(PKG_COUNT 0) foreach(PKG ${STANDARD_PACKAGES} ${EXTRA_PACKAGES} ${SUFFIX_PACKAGES}) if(PKG_${PKG}) MATH(EXPR PKG_COUNT "${PKG_COUNT}+1") endif() endforeach() -list(APPEND TEST_CONFIG_DEFS -DNUM_LAMMPS_PACKAGES=${PKG_COUNT}) +list(APPEND TEST_CONFIG_DEFS NUM_LAMMPS_PACKAGES=${PKG_COUNT}) if(PKG_MANYBODY) set(HAS_MANYBODY 1) else() set(HAS_MANYBODY 0) endif() -list(APPEND TEST_CONFIG_DEFS -DLAMMPS_HAS_MANYBODY=${HAS_MANYBODY}) +list(APPEND TEST_CONFIG_DEFS LAMMPS_HAS_MANYBODY=${HAS_MANYBODY}) if(BUILD_MPI) set(HAS_MPI 1) else() set(HAS_MPI 0) endif() -list(APPEND TEST_CONFIG_DEFS -DLAMMPS_HAS_MPI=${HAS_MPI}) +list(APPEND TEST_CONFIG_DEFS LAMMPS_HAS_MPI=${HAS_MPI}) foreach(WITH "JPEG" "PNG" "GZIP" "FFMPEG") if(WITH_${WITH}) @@ -60,7 +60,7 @@ foreach(WITH "JPEG" "PNG" "GZIP" "FFMPEG") else() set(HAS_${WITH} 0) endif() - list(APPEND TEST_CONFIG_DEFS -DLAMMPS_HAS_${WITH}=${HAS_${WITH}}) + list(APPEND TEST_CONFIG_DEFS LAMMPS_HAS_${WITH}=${HAS_${WITH}}) endforeach() add_executable(test_library_config test_library_config.cpp test_main.cpp) From be59eb6a703361f1cbce51bc53b51d670f61d475 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 28 May 2025 21:38:14 -0400 Subject: [PATCH 17/23] fix up two more inconsistent definitions --- unittest/c-library/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unittest/c-library/CMakeLists.txt b/unittest/c-library/CMakeLists.txt index 811f7e2729..169aea91df 100644 --- a/unittest/c-library/CMakeLists.txt +++ b/unittest/c-library/CMakeLists.txt @@ -70,7 +70,7 @@ add_test(NAME LibraryConfig COMMAND test_library_config) add_executable(test_library_mpi test_library_mpi.cpp) target_link_libraries(test_library_mpi PRIVATE lammps GTest::GMock) -target_compile_definitions(test_library_mpi PRIVATE "${TEST_CONFIG_DEFS};-DMPICH_SKIP_MPICXX;-DOMPI_SKIP_MPICXX=1") +target_compile_definitions(test_library_mpi PRIVATE "${TEST_CONFIG_DEFS};MPICH_SKIP_MPICXX=1;OMPI_SKIP_MPICXX=1") add_mpi_test(NAME LibraryMPI NUM_PROCS 4 COMMAND $) # simple run tests for coupling to the LAMMPS library From 1fae7e3f9839a635e2b7aa36c97e850e02d4cce3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 2 Jun 2025 15:47:35 -0400 Subject: [PATCH 18/23] remove support for obsolete MPICH library binaries for Windows --- cmake/Modules/LAMMPSInterfacePlugin.cmake | 98 +++++++--------------- cmake/Modules/MPI4WIN.cmake | 99 +++++++---------------- examples/plugins/LAMMPSInterfaceCXX.cmake | 99 +++++++---------------- 3 files changed, 85 insertions(+), 211 deletions(-) diff --git a/cmake/Modules/LAMMPSInterfacePlugin.cmake b/cmake/Modules/LAMMPSInterfacePlugin.cmake index 2363937af5..7c71c6dae2 100644 --- a/cmake/Modules/LAMMPSInterfacePlugin.cmake +++ b/cmake/Modules/LAMMPSInterfacePlugin.cmake @@ -142,84 +142,44 @@ if(BUILD_MPI) 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) - # Download and configure MinGW compatible MPICH development files for Windows - option(USE_MSMPI "Use Microsoft's MS-MPI SDK instead of MPICH2-1.4.1" OFF) - if(USE_MSMPI) - message(STATUS "Downloading and configuring MS-MPI 10.1 for Windows cross-compilation") - set(MPICH2_WIN64_DEVEL_URL "${LAMMPS_THIRDPARTY_URL}/msmpi-win64-devel.tar.gz" CACHE STRING "URL for MS-MPI (win64) tarball") - set(MPICH2_WIN64_DEVEL_MD5 "86314daf1bffb809f1fcbefb8a547490" CACHE STRING "MD5 checksum of MS-MPI (win64) tarball") - mark_as_advanced(MPICH2_WIN64_DEVEL_URL) - mark_as_advanced(MPICH2_WIN64_DEVEL_MD5) + message(STATUS "Downloading and configuring MS-MPI 10.1 for Windows cross-compilation") + set(MPICH2_WIN64_DEVEL_URL "${LAMMPS_THIRDPARTY_URL}/msmpi-win64-devel.tar.gz" CACHE STRING "URL for MS-MPI (win64) tarball") + set(MPICH2_WIN64_DEVEL_MD5 "86314daf1bffb809f1fcbefb8a547490" CACHE STRING "MD5 checksum of MS-MPI (win64) tarball") + mark_as_advanced(MPICH2_WIN64_DEVEL_URL) + mark_as_advanced(MPICH2_WIN64_DEVEL_MD5) - include(ExternalProject) - if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") - ExternalProject_Add(mpi4win_build - URL ${MPICH2_WIN64_DEVEL_URL} - URL_MD5 ${MPICH2_WIN64_DEVEL_MD5} - CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" - BUILD_BYPRODUCTS /lib/libmsmpi.a) - else() - message(FATAL_ERROR "Only x86 64-bit builds are supported with MS-MPI") - endif() - - ExternalProject_get_property(mpi4win_build SOURCE_DIR) - file(MAKE_DIRECTORY "${SOURCE_DIR}/include") - add_library(MPI::MPI_C UNKNOWN IMPORTED) - set_target_properties(MPI::MPI_C PROPERTIES - IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmsmpi.a" - INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include" - INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - add_dependencies(MPI::MPI_C mpi4win_build) - - # set variables for status reporting at the end of CMake run - set(MPI_CXX_INCLUDE_PATH "${SOURCE_DIR}/include") - set(MPI_CXX_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - set(MPI_CXX_LIBRARIES "${SOURCE_DIR}/lib/libmsmpi.a") + include(ExternalProject) + if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + ExternalProject_Add(mpi4win_build + URL ${MPICH2_WIN64_DEVEL_URL} + URL_MD5 ${MPICH2_WIN64_DEVEL_MD5} + CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" + BUILD_BYPRODUCTS /lib/libmsmpi.a) else() - # Download and configure custom MPICH files for Windows - message(STATUS "Downloading and configuring MPICH-1.4.1 for Windows") - set(MPICH2_WIN64_DEVEL_URL "${LAMMPS_THIRDPARTY_URL}/mpich2-win64-devel.tar.gz" CACHE STRING "URL for MPICH2 (win64) tarball") - set(MPICH2_WIN64_DEVEL_MD5 "4939fdb59d13182fd5dd65211e469f14" CACHE STRING "MD5 checksum of MPICH2 (win64) tarball") - mark_as_advanced(MPICH2_WIN64_DEVEL_URL) - mark_as_advanced(MPICH2_WIN64_DEVEL_MD5) - - include(ExternalProject) - if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") - ExternalProject_Add(mpi4win_build - URL ${MPICH2_WIN64_DEVEL_URL} - URL_MD5 ${MPICH2_WIN64_DEVEL_MD5} - CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" - BUILD_BYPRODUCTS /lib/libmpi.a) - else() - ExternalProject_Add(mpi4win_build - URL ${MPICH2_WIN32_DEVEL_URL} - URL_MD5 ${MPICH2_WIN32_DEVEL_MD5} - CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" - BUILD_BYPRODUCTS /lib/libmpi.a) - endif() - - ExternalProject_get_property(mpi4win_build SOURCE_DIR) - file(MAKE_DIRECTORY "${SOURCE_DIR}/include") - add_library(MPI::MPI_C UNKNOWN IMPORTED) - set_target_properties(MPI::MPI_C PROPERTIES - IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmpi.a" - INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include" - INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - add_dependencies(MPI::MPI_C mpi4win_build) - - # set variables for status reporting at the end of CMake run - set(MPI_CXX_INCLUDE_PATH "${SOURCE_DIR}/include") - set(MPI_CXX_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - set(MPI_CXX_LIBRARIES "${SOURCE_DIR}/lib/libmpi.a") + message(FATAL_ERROR "Only x86 64-bit builds are supported with MS-MPI") endif() + + ExternalProject_get_property(mpi4win_build SOURCE_DIR) + file(MAKE_DIRECTORY "${SOURCE_DIR}/include") + add_library(MPI::MPI_CXX UNKNOWN IMPORTED) + set_target_properties(MPI::MPI_CXX PROPERTIES + IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmsmpi.a" + INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include" + INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX=1") + add_dependencies(MPI::MPI_CXX mpi4win_build) + + # set variables for status reporting at the end of CMake run + set(MPI_CXX_INCLUDE_PATH "${SOURCE_DIR}/include") + set(MPI_CXX_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX=1") + set(MPI_CXX_LIBRARIES "${SOURCE_DIR}/lib/libmsmpi.a") 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 INTERFACE -DLAMMPS_LONGLONG_TO_LONG) endif() endif() - target_link_libraries(lammps INTERFACE MPI::MPI_C) + target_link_libraries(lammps INTERFACE MPI::MPI_CXX) else() add_library(mpi_stubs INTERFACE) target_include_directories(mpi_stubs INTERFACE $) diff --git a/cmake/Modules/MPI4WIN.cmake b/cmake/Modules/MPI4WIN.cmake index 18a551b1c7..b5e60616ea 100644 --- a/cmake/Modules/MPI4WIN.cmake +++ b/cmake/Modules/MPI4WIN.cmake @@ -1,74 +1,31 @@ -# Download and configure MinGW compatible MPICH development files for Windows -option(USE_MSMPI "Use Microsoft's MS-MPI SDK instead of MPICH2-1.4.1" OFF) +# set-up MS-MPI library for Windows with MinGW compatibility +message(STATUS "Downloading and configuring MS-MPI 10.1 for Windows cross-compilation") +set(MPICH2_WIN64_DEVEL_URL "${LAMMPS_THIRDPARTY_URL}/msmpi-win64-devel.tar.gz" CACHE STRING "URL for MS-MPI (win64) tarball") +set(MPICH2_WIN64_DEVEL_MD5 "86314daf1bffb809f1fcbefb8a547490" CACHE STRING "MD5 checksum of MS-MPI (win64) tarball") +mark_as_advanced(MPICH2_WIN64_DEVEL_URL) +mark_as_advanced(MPICH2_WIN64_DEVEL_MD5) -if(USE_MSMPI) - message(STATUS "Downloading and configuring MS-MPI 10.1 for Windows cross-compilation") - set(MPICH2_WIN64_DEVEL_URL "${LAMMPS_THIRDPARTY_URL}/msmpi-win64-devel.tar.gz" CACHE STRING "URL for MS-MPI (win64) tarball") - set(MPICH2_WIN64_DEVEL_MD5 "86314daf1bffb809f1fcbefb8a547490" CACHE STRING "MD5 checksum of MS-MPI (win64) tarball") - mark_as_advanced(MPICH2_WIN64_DEVEL_URL) - mark_as_advanced(MPICH2_WIN64_DEVEL_MD5) - - include(ExternalProject) - if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") - ExternalProject_Add(mpi4win_build - URL ${MPICH2_WIN64_DEVEL_URL} - URL_MD5 ${MPICH2_WIN64_DEVEL_MD5} - CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" - BUILD_BYPRODUCTS /lib/libmsmpi.a) - else() - message(FATAL_ERROR "Only x86 64-bit builds are supported with MS-MPI") - endif() - - ExternalProject_get_property(mpi4win_build SOURCE_DIR) - file(MAKE_DIRECTORY "${SOURCE_DIR}/include") - add_library(MPI::MPI_C UNKNOWN IMPORTED) - set_target_properties(MPI::MPI_C PROPERTIES - IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmsmpi.a" - INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include" - INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - add_dependencies(MPI::MPI_C mpi4win_build) - - # set variables for status reporting at the end of CMake run - set(MPI_C_INCLUDE_PATH "${SOURCE_DIR}/include") - set(MPI_C_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - set(MPI_C_LIBRARIES "${SOURCE_DIR}/lib/libmsmpi.a") +include(ExternalProject) +if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + ExternalProject_Add(mpi4win_build + URL ${MPICH2_WIN64_DEVEL_URL} + URL_MD5 ${MPICH2_WIN64_DEVEL_MD5} + CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" + BUILD_BYPRODUCTS /lib/libmsmpi.a) else() - message(STATUS "Downloading and configuring MPICH2-1.4.1 for Windows cross-compilation") - set(MPICH2_WIN64_DEVEL_URL "${LAMMPS_THIRDPARTY_URL}/mpich2-win64-devel.tar.gz" CACHE STRING "URL for MPICH2 (win64) tarball") - set(MPICH2_WIN32_DEVEL_URL "${LAMMPS_THIRDPARTY_URL}/mpich2-win32-devel.tar.gz" CACHE STRING "URL for MPICH2 (win32) tarball") - set(MPICH2_WIN64_DEVEL_MD5 "4939fdb59d13182fd5dd65211e469f14" CACHE STRING "MD5 checksum of MPICH2 (win64) tarball") - set(MPICH2_WIN32_DEVEL_MD5 "a61d153500dce44e21b755ee7257e031" CACHE STRING "MD5 checksum of MPICH2 (win32) tarball") - mark_as_advanced(MPICH2_WIN64_DEVEL_URL) - mark_as_advanced(MPICH2_WIN32_DEVEL_URL) - mark_as_advanced(MPICH2_WIN64_DEVEL_MD5) - mark_as_advanced(MPICH2_WIN32_DEVEL_MD5) - - include(ExternalProject) - if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") - ExternalProject_Add(mpi4win_build - URL ${MPICH2_WIN64_DEVEL_URL} - URL_MD5 ${MPICH2_WIN64_DEVEL_MD5} - CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" - BUILD_BYPRODUCTS /lib/libmpi.a) - else() - ExternalProject_Add(mpi4win_build - URL ${MPICH2_WIN32_DEVEL_URL} - URL_MD5 ${MPICH2_WIN32_DEVEL_MD5} - CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" - BUILD_BYPRODUCTS /lib/libmpi.a) - endif() - - ExternalProject_get_property(mpi4win_build SOURCE_DIR) - file(MAKE_DIRECTORY "${SOURCE_DIR}/include") - add_library(MPI::MPI_C UNKNOWN IMPORTED) - set_target_properties(MPI::MPI_C PROPERTIES - IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmpi.a" - INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include" - INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - add_dependencies(MPI::MPI_C mpi4win_build) - - # set variables for status reporting at the end of CMake run - set(MPI_C_INCLUDE_PATH "${SOURCE_DIR}/include") - set(MPI_C_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - set(MPI_C_LIBRARIES "${SOURCE_DIR}/lib/libmpi.a") + message(FATAL_ERROR "Only x86 64-bit builds are supported with MS-MPI") endif() + +ExternalProject_get_property(mpi4win_build SOURCE_DIR) +file(MAKE_DIRECTORY "${SOURCE_DIR}/include") +add_library(MPI::MPI_C UNKNOWN IMPORTED) +set_target_properties(MPI::MPI_CXXx PROPERTIES + IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmsmpi.a" + INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include" + INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX=1") +add_dependencies(MPI::MPI_CXX mpi4win_build) + +# set variables for status reporting at the end of CMake run +set(MPI_CXX_INCLUDE_PATH "${SOURCE_DIR}/include") +set(MPI_CXX_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX=1") +set(MPI_CXX_LIBRARIES "${SOURCE_DIR}/lib/libmsmpi.a") diff --git a/examples/plugins/LAMMPSInterfaceCXX.cmake b/examples/plugins/LAMMPSInterfaceCXX.cmake index cdfcb498fe..207b579c89 100644 --- a/examples/plugins/LAMMPSInterfaceCXX.cmake +++ b/examples/plugins/LAMMPSInterfaceCXX.cmake @@ -43,81 +43,38 @@ else() 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) - # Download and configure MinGW compatible MPICH development files for Windows - option(USE_MSMPI "Use Microsoft's MS-MPI SDK instead of MPICH2-1.4.1" OFF) - if(USE_MSMPI) - message(STATUS "Downloading and configuring MS-MPI 10.1 for Windows cross-compilation") - set(MPICH2_WIN64_DEVEL_URL "${LAMMPS_THIRDPARTY_URL}/msmpi-win64-devel.tar.gz" CACHE STRING "URL for MS-MPI (win64) tarball") - set(MPICH2_WIN64_DEVEL_MD5 "86314daf1bffb809f1fcbefb8a547490" CACHE STRING "MD5 checksum of MS-MPI (win64) tarball") - mark_as_advanced(MPICH2_WIN64_DEVEL_URL) - mark_as_advanced(MPICH2_WIN64_DEVEL_MD5) + message(STATUS "Downloading and configuring MS-MPI 10.1 for Windows cross-compilation") + set(MPICH2_WIN64_DEVEL_URL "${LAMMPS_THIRDPARTY_URL}/msmpi-win64-devel.tar.gz" CACHE STRING "URL for MS-MPI (win64) tarball") + set(MPICH2_WIN64_DEVEL_MD5 "86314daf1bffb809f1fcbefb8a547490" CACHE STRING "MD5 checksum of MS-MPI (win64) tarball") + mark_as_advanced(MPICH2_WIN64_DEVEL_URL) + mark_as_advanced(MPICH2_WIN64_DEVEL_MD5) - include(ExternalProject) - if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") - ExternalProject_Add(mpi4win_build - URL ${MPICH2_WIN64_DEVEL_URL} - URL_MD5 ${MPICH2_WIN64_DEVEL_MD5} - CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" - BUILD_BYPRODUCTS /lib/libmsmpi.a) - else() - message(FATAL_ERROR "Only x86 64-bit builds are supported with MS-MPI") - endif() - - ExternalProject_get_property(mpi4win_build SOURCE_DIR) - file(MAKE_DIRECTORY "${SOURCE_DIR}/include") - add_library(MPI::MPI_C UNKNOWN IMPORTED) - set_target_properties(MPI::MPI_C PROPERTIES - IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmsmpi.a" - INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include" - INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - add_dependencies(MPI::MPI_C mpi4win_build) - - # set variables for status reporting at the end of CMake run - set(MPI_C_INCLUDE_PATH "${SOURCE_DIR}/include") - set(MPI_C_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - set(MPI_C_LIBRARIES "${SOURCE_DIR}/lib/libmsmpi.a") + include(ExternalProject) + if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + ExternalProject_Add(mpi4win_build + URL ${MPICH2_WIN64_DEVEL_URL} + URL_MD5 ${MPICH2_WIN64_DEVEL_MD5} + CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" + BUILD_BYPRODUCTS /lib/libmsmpi.a) else() - # Download and configure custom MPICH files for Windows - message(STATUS "Downloading and configuring MPICH-1.4.1 for Windows") - set(MPICH2_WIN64_DEVEL_URL "${LAMMPS_THIRDPARTY_URL}/mpich2-win64-devel.tar.gz" CACHE STRING "URL for MPICH2 (win64) tarball") - set(MPICH2_WIN64_DEVEL_MD5 "4939fdb59d13182fd5dd65211e469f14" CACHE STRING "MD5 checksum of MPICH2 (win64) tarball") - mark_as_advanced(MPICH2_WIN64_DEVEL_URL) - mark_as_advanced(MPICH2_WIN64_DEVEL_MD5) - - include(ExternalProject) - if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") - ExternalProject_Add(mpi4win_build - URL ${MPICH2_WIN64_DEVEL_URL} - URL_MD5 ${MPICH2_WIN64_DEVEL_MD5} - CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" - BUILD_BYPRODUCTS /lib/libmpi.a) - else() - ExternalProject_Add(mpi4win_build - URL ${MPICH2_WIN32_DEVEL_URL} - URL_MD5 ${MPICH2_WIN32_DEVEL_MD5} - CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" - BUILD_BYPRODUCTS /lib/libmpi.a) - endif() - - ExternalProject_get_property(mpi4win_build SOURCE_DIR) - file(MAKE_DIRECTORY "${SOURCE_DIR}/include") - add_library(MPI::MPI_C UNKNOWN IMPORTED) - set_target_properties(MPI::MPI_C PROPERTIES - IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmpi.a" - INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include" - INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - add_dependencies(MPI::MPI_C mpi4win_build) - - # set variables for status reporting at the end of CMake run - set(MPI_C_INCLUDE_PATH "${SOURCE_DIR}/include") - set(MPI_C_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") - set(MPI_C_LIBRARIES "${SOURCE_DIR}/lib/libmpi.a") + message(FATAL_ERROR "Only x86 64-bit builds are supported with MS-MPI") endif() + + ExternalProject_get_property(mpi4win_build SOURCE_DIR) + file(MAKE_DIRECTORY "${SOURCE_DIR}/include") + add_library(MPI::MPI_CXX UNKNOWN IMPORTED) + set_target_properties(MPI::MPI_CXX PROPERTIES + IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmsmpi.a" + INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include" + INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX=1") + add_dependencies(MPI::MPI_CXX mpi4win_build) + + # set variables for status reporting at the end of CMake run + set(MPI_CXX_INCLUDE_PATH "${SOURCE_DIR}/include") + set(MPI_CXX_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX=1") + set(MPI_CXX_LIBRARIES "${SOURCE_DIR}/lib/libmsmpi.a") else() find_package(MPI REQUIRED) option(LAMMPS_LONGLONG_TO_LONG "Workaround if your system or MPI version does not recognize 'long long' data types" OFF) @@ -125,7 +82,7 @@ if(BUILD_MPI) target_compile_definitions(lammps INTERFACE -DLAMMPS_LONGLONG_TO_LONG) endif() endif() - target_link_libraries(lammps INTERFACE MPI::MPI_C) + target_link_libraries(lammps INTERFACE MPI::MPI_CXX) else() target_include_directories(lammps INTERFACE "${LAMMPS_SOURCE_DIR}/STUBS") endif() From 1fc8e0564200d645a2891ea723afba8b8f6e6ef0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 2 Jun 2025 15:48:40 -0400 Subject: [PATCH 19/23] 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) From 60c33bfb957a98b3cb41bf43b667374e7a58083c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 2 Jun 2025 16:37:21 -0400 Subject: [PATCH 20/23] correct typos --- cmake/Modules/MPI4WIN.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/Modules/MPI4WIN.cmake b/cmake/Modules/MPI4WIN.cmake index b5e60616ea..cd48ab279e 100644 --- a/cmake/Modules/MPI4WIN.cmake +++ b/cmake/Modules/MPI4WIN.cmake @@ -18,8 +18,8 @@ endif() ExternalProject_get_property(mpi4win_build SOURCE_DIR) file(MAKE_DIRECTORY "${SOURCE_DIR}/include") -add_library(MPI::MPI_C UNKNOWN IMPORTED) -set_target_properties(MPI::MPI_CXXx PROPERTIES +add_library(MPI::MPI_CXX UNKNOWN IMPORTED) +set_target_properties(MPI::MPI_CXX PROPERTIES IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmsmpi.a" INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include" INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX=1") From 07f650a98249d7c5bf08a0e4610edc31fce89872 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 2 Jun 2025 17:02:38 -0400 Subject: [PATCH 21/23] try to work around compilation issues --- cmake/Modules/Packages/GPU.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/Modules/Packages/GPU.cmake b/cmake/Modules/Packages/GPU.cmake index efc9f1f764..6ce85f10c5 100644 --- a/cmake/Modules/Packages/GPU.cmake +++ b/cmake/Modules/Packages/GPU.cmake @@ -484,9 +484,9 @@ 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_CXX) + target_link_libraries(gpu PUBLIC MPI::MPI_CXX) else() - target_link_libraries(gpu PRIVATE mpi_stubs) + target_link_libraries(gpu PUBLIC mpi_stubs) endif() set_target_properties(gpu PROPERTIES OUTPUT_NAME lammps_gpu${LAMMPS_MACHINE}) From 688800038af0c8ee1b924362d22475d0369055ef Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 2 Jun 2025 20:14:11 -0400 Subject: [PATCH 22/23] force skip MPI for C++ setting into cache --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index cca609d8aa..954bd7b4ac 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -205,7 +205,7 @@ 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) +set(MPI_CXX_SKIP_MPICXX TRUE CACHE BOOL "Skip MPI C++ Bindings" FORCE) ######################################################################## # User input options # From 8a8fc2f1d8a3da601b991a60f730b677491cf905 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 2 Jun 2025 20:29:00 -0400 Subject: [PATCH 23/23] apply `-DLAMMPS_${LAMMPS_SIZES}` consistently across all platforms --- cmake/Modules/Packages/GPU.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/Modules/Packages/GPU.cmake b/cmake/Modules/Packages/GPU.cmake index 6ce85f10c5..67d2221ec4 100644 --- a/cmake/Modules/Packages/GPU.cmake +++ b/cmake/Modules/Packages/GPU.cmake @@ -254,7 +254,7 @@ elseif(GPU_API STREQUAL "OPENCL") add_library(gpu STATIC ${GPU_LIB_SOURCES}) target_link_libraries(gpu PRIVATE OpenCL::OpenCL) target_include_directories(gpu PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/gpu) - target_compile_definitions(gpu PRIVATE -DUSE_OPENCL -D_${GPU_PREC_SETTING}) + target_compile_definitions(gpu PRIVATE -DUSE_OPENCL -D_${GPU_PREC_SETTING} -DLAMMPS_${LAMMPS_SIZES}) if(GPU_DEBUG) target_compile_definitions(gpu PRIVATE -DUCL_DEBUG -DGERYON_KERNEL_DUMP) else() @@ -484,9 +484,9 @@ RegisterFixStyle(${GPU_SOURCES_DIR}/fix_gpu.h) get_property(GPU_SOURCES GLOBAL PROPERTY GPU_SOURCES) if(BUILD_MPI) - target_link_libraries(gpu PUBLIC MPI::MPI_CXX) + target_link_libraries(gpu PRIVATE MPI::MPI_CXX) else() - target_link_libraries(gpu PUBLIC mpi_stubs) + target_link_libraries(gpu PRIVATE mpi_stubs) endif() set_target_properties(gpu PROPERTIES OUTPUT_NAME lammps_gpu${LAMMPS_MACHINE})