add support for building the PLUMED package as plugin
This commit is contained in:
@ -81,6 +81,9 @@ if((CMAKE_SYSTEM_NAME STREQUAL "Windows") AND (CMAKE_CROSSCOMPILING))
|
|||||||
DEPENDS plumed_build
|
DEPENDS plumed_build
|
||||||
COMMENT "Copying Plumed files"
|
COMMENT "Copying Plumed files"
|
||||||
)
|
)
|
||||||
|
if(CMAKE_PROJECT_NAME STREQUAL "lammps")
|
||||||
|
target_link_libraries(lammps INTERFACE LAMMPS::PLUMED)
|
||||||
|
endif()
|
||||||
|
|
||||||
else()
|
else()
|
||||||
|
|
||||||
@ -155,6 +158,9 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include)
|
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include)
|
||||||
file(MAKE_DIRECTORY ${INSTALL_DIR}/include)
|
file(MAKE_DIRECTORY ${INSTALL_DIR}/include)
|
||||||
|
if(CMAKE_PROJECT_NAME STREQUAL "lammps")
|
||||||
|
target_link_libraries(lammps PRIVATE LAMMPS::PLUMED)
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
find_package(PkgConfig REQUIRED)
|
find_package(PkgConfig REQUIRED)
|
||||||
pkg_check_modules(PLUMED REQUIRED plumed${PLUMED_SUFFIX})
|
pkg_check_modules(PLUMED REQUIRED plumed${PLUMED_SUFFIX})
|
||||||
@ -169,7 +175,9 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_LINK_LIBRARIES "${PLUMED_LOAD}")
|
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_LINK_LIBRARIES "${PLUMED_LOAD}")
|
||||||
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${PLUMED_INCLUDE_DIRS}")
|
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${PLUMED_INCLUDE_DIRS}")
|
||||||
|
if(CMAKE_PROJECT_NAME STREQUAL "lammps")
|
||||||
|
target_link_libraries(lammps PUBLIC LAMMPS::PLUMED)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_link_libraries(lammps PRIVATE LAMMPS::PLUMED)
|
|
||||||
|
|||||||
59
examples/PACKAGES/plumed/plugin/CMakeLists.txt
Normal file
59
examples/PACKAGES/plumed/plugin/CMakeLists.txt
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
# -*- CMake -*- build system for plugin examples.
|
||||||
|
# The is meant to be used as a template for plugins that are
|
||||||
|
# distributed independent from the LAMMPS package.
|
||||||
|
##########################################
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
|
project(plumedplugin VERSION 1.0 LANGUAGES CXX)
|
||||||
|
|
||||||
|
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
include(CheckIncludeFileCXX)
|
||||||
|
include(LAMMPSInterfacePlugin)
|
||||||
|
include(PLUMED)
|
||||||
|
|
||||||
|
##########################
|
||||||
|
# building the plugins
|
||||||
|
|
||||||
|
add_library(plumedplugin MODULE plumedplugin.cpp ${LAMMPS_SOURCE_DIR}/PLUMED/fix_plumed.cpp)
|
||||||
|
target_link_libraries(plumedplugin PRIVATE LAMMPS::PLUMED)
|
||||||
|
target_link_libraries(plumedplugin PRIVATE lammps)
|
||||||
|
target_include_directories(plumedplugin PRIVATE ${LAMMPS_SOURCE_DIR}/PLUMED)
|
||||||
|
set_target_properties(plumedplugin PROPERTIES PREFIX "" SUFFIX ".so")
|
||||||
|
|
||||||
|
# MacOS seems to need this
|
||||||
|
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
|
||||||
|
set_target_properties(plumedplugin PROPERTIES LINK_FLAGS "-Wl,-undefined,dynamic_lookup")
|
||||||
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||||
|
# tell CMake to export all symbols to a .dll on Windows with special case for MinGW cross-compilers
|
||||||
|
set_target_properties(plumedplugin PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
|
||||||
|
if(CMAKE_CROSSCOMPILING)
|
||||||
|
set_target_properties(plumedplugin PROPERTIES LINK_FLAGS "-Wl,--export-all-symbols")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
get_lammps_version(${LAMMPS_SOURCE_DIR}/version.h LAMMPS_VERSION)
|
||||||
|
find_program(MAKENSIS_PATH makensis)
|
||||||
|
if(MAKENSIS_PATH)
|
||||||
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/lammps.ico
|
||||||
|
${CMAKE_SOURCE_DIR}/lammps-text-logo-wide.bmp ${CMAKE_SOURCE_DIR}/plumedplugin.nsis
|
||||||
|
${CMAKE_SOURCE_DIR}/patches ${CMAKE_BINARY_DIR})
|
||||||
|
if(BUILD_MPI)
|
||||||
|
if(USE_MSMPI)
|
||||||
|
add_custom_target(package ${MAKENSIS_PATH} -V1 -DVERSION=${LAMMPS_VERSION}-MSMPI plumedplugin.nsis
|
||||||
|
DEPENDS plumedplugin
|
||||||
|
BYPRODUCTS LAMMPS-PLUMED-plugin-${LAMMPS_VERSION}-MSMPI.exe)
|
||||||
|
else()
|
||||||
|
add_custom_target(package ${MAKENSIS_PATH} -V1 -DVERSION=${LAMMPS_VERSION}-MPI plumedplugin.nsis
|
||||||
|
DEPENDS plumedplugin
|
||||||
|
BYPRODUCTS LAMMPS-PLUMED-plugin-${LAMMPS_VERSION}-MPI.exe)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
add_custom_target(package ${MAKENSIS_PATH} -V1 -DVERSION=${LAMMPS_VERSION} plumedplugin.nsis
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E echo ${PWD}
|
||||||
|
DEPENDS plumedplugin lammps.ico lammps-text-logo-wide.bmp plumedplugin.nsis
|
||||||
|
BYPRODUCTS LAMMPS-PLUMED-plugin-${LAMMPS_VERSION}.exe)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set_target_properties(plumedplugin PROPERTIES LINK_FLAGS "-rdynamic")
|
||||||
|
endif()
|
||||||
1
examples/PACKAGES/plumed/plugin/LAMMPSInterfacePlugin.cmake
Symbolic link
1
examples/PACKAGES/plumed/plugin/LAMMPSInterfacePlugin.cmake
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../../cmake/Modules/LAMMPSInterfacePlugin.cmake
|
||||||
1
examples/PACKAGES/plumed/plugin/PLUMED.cmake
Symbolic link
1
examples/PACKAGES/plumed/plugin/PLUMED.cmake
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../../cmake/Modules/Packages/PLUMED.cmake
|
||||||
2
examples/PACKAGES/plumed/plugin/README.txt
Normal file
2
examples/PACKAGES/plumed/plugin/README.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
This folder contains a loader and support files to build the PLUMED package as plugin.
|
||||||
|
For more information please see: https://docs.lammps.org/Developer_plugins.html
|
||||||
BIN
examples/PACKAGES/plumed/plugin/lammps-text-logo-wide.bmp
Normal file
BIN
examples/PACKAGES/plumed/plugin/lammps-text-logo-wide.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
BIN
examples/PACKAGES/plumed/plugin/lammps.ico
Normal file
BIN
examples/PACKAGES/plumed/plugin/lammps.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 204 KiB |
28
examples/PACKAGES/plumed/plugin/plumedplugin.cpp
Normal file
28
examples/PACKAGES/plumed/plugin/plumedplugin.cpp
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
|
||||||
|
#include "lammpsplugin.h"
|
||||||
|
#include "version.h"
|
||||||
|
|
||||||
|
#include "fix_plumed.h"
|
||||||
|
|
||||||
|
using namespace LAMMPS_NS;
|
||||||
|
|
||||||
|
static Fix *fix_plumed_creator(LAMMPS *lmp, int argc, char **argv)
|
||||||
|
{
|
||||||
|
return new FixPlumed(lmp, argc, argv);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" void lammpsplugin_init(void *lmp, void *handle, void *regfunc)
|
||||||
|
{
|
||||||
|
lammpsplugin_t plugin;
|
||||||
|
lammpsplugin_regfunc register_plugin = (lammpsplugin_regfunc) regfunc;
|
||||||
|
|
||||||
|
// register plumed fix style
|
||||||
|
plugin.version = LAMMPS_VERSION;
|
||||||
|
plugin.style = "fix";
|
||||||
|
plugin.name = "plumed";
|
||||||
|
plugin.info = "Plumed2 plugin fix style v1.0";
|
||||||
|
plugin.author = "Axel Kohlmeyer (akohlmey@gmail.com)";
|
||||||
|
plugin.creator.v1 = (lammpsplugin_factory1 *) &fix_plumed_creator;
|
||||||
|
plugin.handle = handle;
|
||||||
|
(*register_plugin)(&plugin, lmp);
|
||||||
|
}
|
||||||
167
examples/PACKAGES/plumed/plugin/plumedplugin.nsis
Normal file
167
examples/PACKAGES/plumed/plugin/plumedplugin.nsis
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
#!Nsis Installer Command Script
|
||||||
|
#
|
||||||
|
# The following external defines are recognized:
|
||||||
|
# ${VERSION} = YYYYMMDD
|
||||||
|
|
||||||
|
!include "MUI2.nsh"
|
||||||
|
!include "FileFunc.nsh"
|
||||||
|
|
||||||
|
!define MUI_ICON "lammps.ico"
|
||||||
|
!define MUI_UNICON "lammps.ico"
|
||||||
|
!define MUI_HEADERIMAGE
|
||||||
|
!define MUI_HEADERIMAGE_BITMAP "lammps-text-logo-wide.bmp"
|
||||||
|
!define MUI_HEADERIMAGE_RIGHT
|
||||||
|
|
||||||
|
Unicode true
|
||||||
|
XPStyle on
|
||||||
|
|
||||||
|
!include "LogicLib.nsh"
|
||||||
|
!addplugindir "envvar/Plugins/x86-unicode"
|
||||||
|
!include "x64.nsh"
|
||||||
|
|
||||||
|
RequestExecutionLevel user
|
||||||
|
|
||||||
|
!macro VerifyUserIsAdmin
|
||||||
|
UserInfo::GetAccountType
|
||||||
|
pop $0
|
||||||
|
${If} $0 != "admin"
|
||||||
|
messageBox mb_iconstop "Administrator rights required!"
|
||||||
|
setErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
|
||||||
|
quit
|
||||||
|
${EndIf}
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!define PLUMEDPLUGIN "LAMMPS PLUMED Plugin ${VERSION}"
|
||||||
|
OutFile "LAMMPS-PLUMED-plugin-${VERSION}.exe"
|
||||||
|
|
||||||
|
Name "${PLUMEDPLUGIN}"
|
||||||
|
InstallDir "$LOCALAPPDATA\${PLUMEDPLUGIN}"
|
||||||
|
|
||||||
|
ShowInstDetails show
|
||||||
|
ShowUninstDetails show
|
||||||
|
SetCompressor lzma
|
||||||
|
|
||||||
|
!define MUI_ABORTWARNING
|
||||||
|
|
||||||
|
!insertmacro MUI_PAGE_DIRECTORY
|
||||||
|
!insertmacro MUI_PAGE_INSTFILES
|
||||||
|
|
||||||
|
!insertmacro MUI_UNPAGE_CONFIRM
|
||||||
|
!insertmacro MUI_UNPAGE_INSTFILES
|
||||||
|
|
||||||
|
!insertmacro MUI_LANGUAGE "English"
|
||||||
|
|
||||||
|
function .onInit
|
||||||
|
# Determine if LAMMPS was already installed and check whether it was in 32-bit
|
||||||
|
# or 64-bit. Then look up path to uninstaller and offer to uninstall or quit
|
||||||
|
SetRegView 32
|
||||||
|
ReadRegDWORD $0 HKCU "Software\LAMMPS-PLUMED" "Bits"
|
||||||
|
SetRegView LastUsed
|
||||||
|
${If} $0 == "32"
|
||||||
|
SetRegView 32
|
||||||
|
${ElseIf} $0 == "64"
|
||||||
|
SetRegView 64
|
||||||
|
${Else}
|
||||||
|
SetRegView 64
|
||||||
|
${EndIf}
|
||||||
|
ClearErrors
|
||||||
|
ReadRegStr $R0 HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" "UninstallString"
|
||||||
|
SetRegView LastUsed
|
||||||
|
${If} ${Errors}
|
||||||
|
DetailPrint "LAMMPS PLUMED plugin not (yet) installed"
|
||||||
|
${Else}
|
||||||
|
MessageBox MB_YESNO "LAMMPS PLUMED plugin ($0 bit) is already installed. Uninstall existing version?" /SD IDYES IDNO Quit
|
||||||
|
Pop $R1
|
||||||
|
StrCmp $R1 2 Quit +1
|
||||||
|
Exec $R0
|
||||||
|
Quit:
|
||||||
|
Quit
|
||||||
|
${EndIf}
|
||||||
|
setShellVarContext all
|
||||||
|
functionEnd
|
||||||
|
|
||||||
|
Section "${PLUMEDPLUGIN}" SecPlumedplugin
|
||||||
|
SectionIn RO
|
||||||
|
# Write LAMMPS installation bitness marker. Always use 32-bit registry view
|
||||||
|
SetRegView 32
|
||||||
|
IntFmt $0 "0x%08X" 64
|
||||||
|
WriteRegDWORD HKCU "Software\LAMMPS-PLUMED" "Bits" $0
|
||||||
|
|
||||||
|
# Switch to "native" registry view
|
||||||
|
SetRegView 64
|
||||||
|
SetShellVarContext current
|
||||||
|
|
||||||
|
SetOutPath "$INSTDIR"
|
||||||
|
CreateDirectory "$INSTDIR\patches"
|
||||||
|
File lammps.ico
|
||||||
|
File plumedplugin.so
|
||||||
|
|
||||||
|
SetOutPath "$INSTDIR\patches"
|
||||||
|
File /r patches/*
|
||||||
|
|
||||||
|
|
||||||
|
# Register Application and its uninstaller
|
||||||
|
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" \
|
||||||
|
"DisplayName" "${PLUMEDPLUGIN}"
|
||||||
|
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" \
|
||||||
|
"Publisher" "The LAMMPS and PLUMED Developers"
|
||||||
|
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" \
|
||||||
|
"URLInfoAbout" "lammps.org"
|
||||||
|
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" \
|
||||||
|
"DisplayIcon" "$INSTDIR\lammps.ico"
|
||||||
|
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" \
|
||||||
|
"DisplayVersion" "${VERSION}"
|
||||||
|
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" \
|
||||||
|
"InstallLocation" "$INSTDIR"
|
||||||
|
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" \
|
||||||
|
"UninstallString" "$\"$INSTDIR\uninstall.exe$\""
|
||||||
|
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" \
|
||||||
|
"QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S"
|
||||||
|
|
||||||
|
${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
|
||||||
|
IntFmt $0 "0x%08X" $0
|
||||||
|
WriteRegDWORD HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" \
|
||||||
|
"EstimatedSize" "$0"
|
||||||
|
|
||||||
|
# update path variables
|
||||||
|
EnVar::SetHKCU
|
||||||
|
# add to LAMMPS plugin search path
|
||||||
|
EnVar::AddValue "LAMMPS_PLUGIN_PATH" "$INSTDIR"
|
||||||
|
# add plumed2 patch files
|
||||||
|
EnVar::AddValue "PLUMED_ROOT" "$INSTDIR"
|
||||||
|
|
||||||
|
WriteUninstaller "$INSTDIR\Uninstall.exe"
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
function un.onInit
|
||||||
|
SetShellVarContext current
|
||||||
|
functionEnd
|
||||||
|
|
||||||
|
Section "Uninstall"
|
||||||
|
# remove LAMMPS bitness/installation indicator always in 32-bit registry view
|
||||||
|
SetRegView 32
|
||||||
|
DeleteRegKey HKCU "Software\LAMMPS-PLUMED"
|
||||||
|
|
||||||
|
# unregister extension, and uninstall info
|
||||||
|
SetRegView 64
|
||||||
|
SetShellVarContext current
|
||||||
|
# unregister installation
|
||||||
|
DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED"
|
||||||
|
|
||||||
|
# update path variables
|
||||||
|
EnVar::SetHKCU
|
||||||
|
# remove entry from LAMMPS plugin search path
|
||||||
|
EnVar::DeleteValue "LAMMPS_PLUGIN_PATH" "$INSTDIR"
|
||||||
|
# remove plumed patch environment
|
||||||
|
EnVar::Delete "PLUMED_ROOT"
|
||||||
|
|
||||||
|
RMDir /r /REBOOTOK "$INSTDIR\patches"
|
||||||
|
Delete /REBOOTOK "$INSTDIR\plumedplugin.so"
|
||||||
|
Delete /REBOOTOK "$INSTDIR\Uninstall.exe"
|
||||||
|
Delete /REBOOTOK "$INSTDIR\lammps.ico"
|
||||||
|
RMDir /REBOOTOK "$INSTDIR"
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
# Local Variables:
|
||||||
|
# mode: sh
|
||||||
|
# End:
|
||||||
Reference in New Issue
Block a user