From f1471725e9ddcc806c5d4e7b4644cc75de721438 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 6 Jan 2023 21:43:29 -0500 Subject: [PATCH] allow to always build the C++-only parts of the MESONT package --- cmake/CMakeLists.txt | 23 +++------ cmake/Modules/Packages/MESONT.cmake | 73 +++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 16 deletions(-) create mode 100644 cmake/Modules/Packages/MESONT.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index ff07edae4c..0b4fb2c7a4 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -265,7 +265,6 @@ set(STANDARD_PACKAGES MC MDI MEAM - MESONT MGPT MISC ML-HDNNP @@ -309,8 +308,9 @@ set(STANDARD_PACKAGES YAFF) set(SUFFIX_PACKAGES CORESHELL GPU KOKKOS OPT INTEL OPENMP) +set(EXTRA_PACKAGES MESONT) -foreach(PKG ${STANDARD_PACKAGES} ${SUFFIX_PACKAGES}) +foreach(PKG ${STANDARD_PACKAGES} ${EXTRA_PACKAGES} ${SUFFIX_PACKAGES}) option(PKG_${PKG} "Build ${PKG} Package" OFF) endforeach() @@ -520,7 +520,7 @@ else() set(CUDA_REQUEST_PIC) endif() -foreach(PKG_WITH_INCL KSPACE PYTHON ML-IAP VORONOI COLVARS ML-HDNNP MDI MOLFILE NETCDF +foreach(PKG_WITH_INCL KSPACE PYTHON ML-IAP VORONOI COLVARS ML-HDNNP MDI MOLFILE MESONT NETCDF PLUMED QMMM ML-QUIP SCAFACOS MACHDYN VTK KIM LATTE MSCG COMPRESS ML-PACE LEPTON) if(PKG_${PKG_WITH_INCL}) include(Packages/${PKG_WITH_INCL}) @@ -566,7 +566,7 @@ RegisterStyles(${LAMMPS_SOURCE_DIR}) ######################################################## # Fetch missing external files and archives for packages ######################################################## -foreach(PKG ${STANDARD_PACKAGES} ${SUFFIX_PACKAGES}) +foreach(PKG ${STANDARD_PACKAGES} ${EXTRA_PACKAGES} ${SUFFIX_PACKAGES}) if(PKG_${PKG}) FetchPotentials(${LAMMPS_SOURCE_DIR}/${PKG} ${LAMMPS_POTENTIALS_DIR}) endif() @@ -618,18 +618,9 @@ endforeach() ############################################## # add lib sources of (simple) enabled packages ############################################ -foreach(PKG_LIB POEMS ATC AWPMD H5MD MESONT) +foreach(PKG_LIB POEMS ATC AWPMD H5MD) if(PKG_${PKG_LIB}) string(TOLOWER "${PKG_LIB}" PKG_LIB) - if(PKG_LIB STREQUAL "mesont") - enable_language(Fortran) - file(GLOB_RECURSE ${PKG_LIB}_SOURCES ${CONFIGURE_DEPENDS} - ${LAMMPS_LIB_SOURCE_DIR}/${PKG_LIB}/[^.]*.f90) - else() - file(GLOB_RECURSE ${PKG_LIB}_SOURCES ${CONFIGURE_DEPENDS} - ${LAMMPS_LIB_SOURCE_DIR}/${PKG_LIB}/[^.]*.c - ${LAMMPS_LIB_SOURCE_DIR}/${PKG_LIB}/[^.]*.cpp) - endif() add_library(${PKG_LIB} STATIC ${${PKG_LIB}_SOURCES}) set_target_properties(${PKG_LIB} PROPERTIES OUTPUT_NAME lammps_${PKG_LIB}${LAMMPS_MACHINE}) target_link_libraries(lammps PRIVATE ${PKG_LIB}) @@ -713,7 +704,7 @@ target_include_directories(lammps PRIVATE ${LAMMPS_STYLE_HEADERS_DIR}) ###################################### set(temp "#ifndef LMP_INSTALLED_PKGS_H\n#define LMP_INSTALLED_PKGS_H\n") set(temp "${temp}const char * LAMMPS_NS::LAMMPS::installed_packages[] = {\n") -set(temp_PKG_LIST ${STANDARD_PACKAGES} ${SUFFIX_PACKAGES}) +set(temp_PKG_LIST ${STANDARD_PACKAGES} ${EXTRA_PACKAGES} ${SUFFIX_PACKAGES}) list(SORT temp_PKG_LIST) foreach(PKG ${temp_PKG_LIST}) if(PKG_${PKG}) @@ -917,7 +908,7 @@ message(STATUS "<<< Build configuration >>> # Print package summary ############################################################################### set(ENABLED_PACKAGES) -foreach(PKG ${STANDARD_PACKAGES} ${SUFFIX_PACKAGES}) +foreach(PKG ${STANDARD_PACKAGES} ${EXTRA_PACKAGES} ${SUFFIX_PACKAGES}) if(PKG_${PKG}) list(APPEND ENABLED_PACKAGES ${PKG}) endif() diff --git a/cmake/Modules/Packages/MESONT.cmake b/cmake/Modules/Packages/MESONT.cmake new file mode 100644 index 0000000000..ea867234a0 --- /dev/null +++ b/cmake/Modules/Packages/MESONT.cmake @@ -0,0 +1,73 @@ + + +set(MESONT_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/MESONT) +include(StyleHeaderUtils) +include(CheckLanguage) + +# always include C++-only sources +file(GLOB MESONT_SOURCES ${CONFIGURE_DEPENDS} ${MESONT_SOURCES_DIR}/[^.]*mesocnt*.cpp) +file(GLOB MESONT_HEADERS ${CONFIGURE_DEPENDS} ${MESONT_SOURCES_DIR}/[^.]*mesocnt*.h) +# remove derived class when base class is not available +if(NOT PKG_MOLECULE) + list(REMOVE_ITEM MESONT_SOURCES ${MESONT_SOURCES_DIR}/bond_mesocnt.cpp) + list(REMOVE_ITEM MESONT_HEADERS ${MESONT_SOURCES_DIR}/bond_mesocnt.h) +endif() + +# include styles dependent on Fortran library only when Fortran is available. +check_language(Fortran) +if(CMAKE_Fortran_COMPILER) + enable_language(Fortran) + file(GLOB MESONT_LIB_SOURCES ${CONFIGURE_DEPENDS} ${LAMMPS_LIB_SOURCE_DIR}/mesont/[^.]*.f90) + add_library(mesont STATIC ${MESONT_LIB_SOURCES}) + set_target_properties(mesont PROPERTIES OUTPUT_NAME lammps_mesont${LAMMPS_MACHINE}) + target_link_libraries(lammps PRIVATE mesont) + + list(APPEND MESONT_SOURCES ${MESONT_SOURCES_DIR}/pair_mesont_tpm.cpp) + list(APPEND MESONT_SOURCES ${MESONT_SOURCES_DIR}/atom_vec_mesont.cpp) + list(APPEND MESONT_SOURCES ${MESONT_SOURCES_DIR}/compute_mesont.cpp) + list(APPEND MESONT_HEADERS ${MESONT_SOURCES_DIR}/pair_mesont_tpm.h) + list(APPEND MESONT_HEADERS ${MESONT_SOURCES_DIR}/atom_vec_mesont.h) + list(APPEND MESONT_HEADERS ${MESONT_SOURCES_DIR}/compute_mesont.h) +endif() + +# check for package files in src directory due to old make system +DetectBuildSystemConflict(${LAMMPS_SOURCE_DIR} ${MESONT_SOURCES} ${MESONT_HEADERS}) + +# manually register style headers +get_property(alist GLOBAL PROPERTY ANGLE) +get_property(blist GLOBAL PROPERTY BOND) +get_property(clist GLOBAL PROPERTY COMPUTE) +get_property(plist GLOBAL PROPERTY PAIR) +get_property(vlist GLOBAL PROPERTY ATOM_VEC) +foreach(fname ${MESONT_HEADERS}) + file(STRINGS ${fname} is_style LIMIT_COUNT 1 REGEX ANGLE_CLASS) + if(is_style) + list(APPEND alist ${fname}) + endif() + file(STRINGS ${fname} is_style LIMIT_COUNT 1 REGEX BOND_CLASS) + if(is_style) + list(APPEND blist ${fname}) + endif() + file(STRINGS ${fname} is_style LIMIT_COUNT 1 REGEX COMPUTE_CLASS) + if(is_style) + list(APPEND clist ${fname}) + endif() + file(STRINGS ${fname} is_style LIMIT_COUNT 1 REGEX PAIR_CLASS) + if(is_style) + list(APPEND plist ${fname}) + endif() + file(STRINGS ${fname} is_style LIMIT_COUNT 1 REGEX ATOM_CLASS) + if(is_style) + list(APPEND vlist ${fname}) + endif() +endforeach() +set_property(GLOBAL PROPERTY ANGLE "${alist}") +set_property(GLOBAL PROPERTY BOND "${blist}") +set_property(GLOBAL PROPERTY COMPUTE "${clist}") +set_property(GLOBAL PROPERTY PAIR "${plist}") +set_property(GLOBAL PROPERTY ATOM_VEC "${vlist}") + +target_sources(lammps PRIVATE ${MESONT_SOURCES}) +target_include_directories(lammps PRIVATE ${MESONT_SOURCES_DIR}) + +RegisterPackages(${MESONT_SOURCES_DIR})