|
|
|
|
@ -80,51 +80,34 @@ endif()
|
|
|
|
|
########################################################################
|
|
|
|
|
# User input options #
|
|
|
|
|
########################################################################
|
|
|
|
|
option(BUILD_EXE "Build lmp binary" ON)
|
|
|
|
|
if(BUILD_EXE)
|
|
|
|
|
set(LAMMPS_MACHINE "" CACHE STRING "Suffix to append to lmp binary (WON'T enable any features automatically")
|
|
|
|
|
mark_as_advanced(LAMMPS_MACHINE)
|
|
|
|
|
if(LAMMPS_MACHINE)
|
|
|
|
|
set(LAMMPS_MACHINE "_${LAMMPS_MACHINE}")
|
|
|
|
|
endif()
|
|
|
|
|
set(LAMMPS_BINARY lmp${LAMMPS_MACHINE})
|
|
|
|
|
set(LAMMPS_MACHINE "" CACHE STRING "Suffix to append to lmp binary (WON'T enable any features automatically")
|
|
|
|
|
mark_as_advanced(LAMMPS_MACHINE)
|
|
|
|
|
if(LAMMPS_MACHINE)
|
|
|
|
|
set(LAMMPS_MACHINE "_${LAMMPS_MACHINE}")
|
|
|
|
|
endif()
|
|
|
|
|
set(LAMMPS_BINARY lmp${LAMMPS_MACHINE})
|
|
|
|
|
|
|
|
|
|
option(BUILD_LIB "Build LAMMPS library" OFF)
|
|
|
|
|
if(BUILD_LIB)
|
|
|
|
|
option(BUILD_SHARED_LIBS "Build shared library" OFF)
|
|
|
|
|
if(BUILD_SHARED_LIBS) # for all pkg libs, mpi_stubs and linalg
|
|
|
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
|
|
|
endif()
|
|
|
|
|
set(LAMMPS_LIB_SUFFIX "" CACHE STRING "Suffix to append to liblammps and pkg-config file")
|
|
|
|
|
mark_as_advanced(LAMMPS_LIB_SUFFIX)
|
|
|
|
|
if(LAMMPS_LIB_SUFFIX)
|
|
|
|
|
set(LAMMPS_LIB_SUFFIX "_${LAMMPS_LIB_SUFFIX}")
|
|
|
|
|
endif()
|
|
|
|
|
option(BUILD_SHARED_LIBS "Build shared library" OFF)
|
|
|
|
|
if(BUILD_SHARED_LIBS) # for all pkg libs, mpi_stubs and linalg
|
|
|
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
|
|
|
endif()
|
|
|
|
|
set(LAMMPS_LIB_SUFFIX "" CACHE STRING "Suffix to append to liblammps and pkg-config file")
|
|
|
|
|
mark_as_advanced(LAMMPS_LIB_SUFFIX)
|
|
|
|
|
if(LAMMPS_LIB_SUFFIX)
|
|
|
|
|
set(LAMMPS_LIB_SUFFIX "_${LAMMPS_LIB_SUFFIX}")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
option(BUILD_TOOLS "Build and install LAMMPS tools (msi2lmp, binary2txt, chain)" OFF)
|
|
|
|
|
|
|
|
|
|
include(GNUInstallDirs)
|
|
|
|
|
file(GLOB ALL_SOURCES ${LAMMPS_SOURCE_DIR}/[^.]*.cpp)
|
|
|
|
|
if(BUILD_LIB)
|
|
|
|
|
file(GLOB MAIN_SOURCES ${LAMMPS_SOURCE_DIR}/main.cpp)
|
|
|
|
|
list(REMOVE_ITEM ALL_SOURCES ${MAIN_SOURCES})
|
|
|
|
|
add_library(lammps ${ALL_SOURCES})
|
|
|
|
|
if(BUILD_EXE)
|
|
|
|
|
add_executable(lmp ${MAIN_SOURCES})
|
|
|
|
|
target_link_libraries(lmp PRIVATE lammps)
|
|
|
|
|
set_target_properties(lmp PROPERTIES OUTPUT_NAME ${LAMMPS_BINARY})
|
|
|
|
|
install(TARGETS lmp EXPORT LAMMPS_Targets DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
|
endif()
|
|
|
|
|
else()
|
|
|
|
|
if(NOT BUILD_EXE)
|
|
|
|
|
message(FATAL_ERROR "You need to at least enable one of two following options: BUILD_LIB or BUILD_EXE")
|
|
|
|
|
endif()
|
|
|
|
|
add_executable(lammps ${ALL_SOURCES})
|
|
|
|
|
set_target_properties(lammps PROPERTIES OUTPUT_NAME ${LAMMPS_BINARY})
|
|
|
|
|
install(TARGETS lammps DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
|
endif()
|
|
|
|
|
file(GLOB MAIN_SOURCES ${LAMMPS_SOURCE_DIR}/main.cpp)
|
|
|
|
|
list(REMOVE_ITEM ALL_SOURCES ${MAIN_SOURCES})
|
|
|
|
|
add_library(lammps ${ALL_SOURCES})
|
|
|
|
|
add_executable(lmp ${MAIN_SOURCES})
|
|
|
|
|
target_link_libraries(lmp PRIVATE lammps)
|
|
|
|
|
set_target_properties(lmp PROPERTIES OUTPUT_NAME ${LAMMPS_BINARY})
|
|
|
|
|
install(TARGETS lmp EXPORT LAMMPS_Targets DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
|
|
|
|
|
|
option(CMAKE_VERBOSE_MAKEFILE "Generate verbose Makefiles" OFF)
|
|
|
|
|
|
|
|
|
|
@ -184,7 +167,7 @@ else()
|
|
|
|
|
enable_language(C)
|
|
|
|
|
file(GLOB MPI_SOURCES ${LAMMPS_SOURCE_DIR}/STUBS/mpi.c)
|
|
|
|
|
add_library(mpi_stubs STATIC ${MPI_SOURCES})
|
|
|
|
|
if(BUILD_LIB AND NOT BUILD_SHARED_LIBS)
|
|
|
|
|
if(NOT BUILD_SHARED_LIBS)
|
|
|
|
|
install(TARGETS mpi_stubs EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
|
|
|
endif()
|
|
|
|
|
set_target_properties(mpi_stubs PROPERTIES OUTPUT_NAME lammps_mpi_stubs${LAMMPS_LIB_SUFFIX})
|
|
|
|
|
@ -271,7 +254,7 @@ if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-QUIP OR PKG_LATTE)
|
|
|
|
|
enable_language(Fortran)
|
|
|
|
|
file(GLOB LAPACK_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/linalg/[^.]*.[fF])
|
|
|
|
|
add_library(linalg STATIC ${LAPACK_SOURCES})
|
|
|
|
|
if(BUILD_LIB AND NOT BUILD_SHARED_LIBS)
|
|
|
|
|
if(NOT BUILD_SHARED_LIBS)
|
|
|
|
|
install(TARGETS linalg EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
|
|
|
endif()
|
|
|
|
|
set_target_properties(linalg PROPERTIES OUTPUT_NAME lammps_linalg${LAMMPS_LIB_SUFFIX})
|
|
|
|
|
@ -432,7 +415,7 @@ foreach(SIMPLE_LIB POEMS USER-ATC USER-AWPMD USER-H5MD)
|
|
|
|
|
${LAMMPS_LIB_SOURCE_DIR}/${PKG_LIB}/[^.]*.c
|
|
|
|
|
${LAMMPS_LIB_SOURCE_DIR}/${PKG_LIB}/[^.]*.cpp)
|
|
|
|
|
add_library(${PKG_LIB} STATIC ${${PKG_LIB}_SOURCES})
|
|
|
|
|
if(BUILD_LIB AND NOT BUILD_SHARED_LIBS)
|
|
|
|
|
if(NOT BUILD_SHARED_LIBS)
|
|
|
|
|
install(TARGETS ${PKG_LIB} EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
|
|
|
endif()
|
|
|
|
|
set_target_properties(${PKG_LIB} PROPERTIES OUTPUT_NAME lammps_${PKG_LIB}${LAMMPS_LIB_SUFFIX})
|
|
|
|
|
@ -532,44 +515,39 @@ list (FIND LANGUAGES "Fortran" _index)
|
|
|
|
|
if (${_index} GREATER -1)
|
|
|
|
|
target_link_libraries(lammps PRIVATE ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES})
|
|
|
|
|
endif()
|
|
|
|
|
if(BUILD_LIB)
|
|
|
|
|
set(LAMMPS_CXX_HEADERS angle.h atom.h bond.h citeme.h comm.h compute.h dihedral.h domain.h error.h fix.h force.h group.h improper.h
|
|
|
|
|
input.h info.h kspace.h lammps.h lattice.h library.h lmppython.h lmptype.h memory.h modify.h neighbor.h neigh_list.h output.h
|
|
|
|
|
pair.h pointers.h region.h timer.h universe.h update.h variable.h)
|
|
|
|
|
if(LAMMPS_EXCEPTIONS)
|
|
|
|
|
list(APPEND LAMMPS_CXX_HEADERS exceptions.h)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
set_target_properties(lammps PROPERTIES OUTPUT_NAME lammps${LAMMPS_LIB_SUFFIX})
|
|
|
|
|
set_target_properties(lammps PROPERTIES SOVERSION ${SOVERSION})
|
|
|
|
|
install(TARGETS lammps EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
|
|
|
target_include_directories(lammps PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
|
|
|
|
|
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps)
|
|
|
|
|
foreach(_HEADER ${LAMMPS_CXX_HEADERS})
|
|
|
|
|
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/${_HEADER} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${LAMMPS_SOURCE_DIR}/${_HEADER} ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/${_HEADER} DEPENDS ${LAMMPS_SOURCE_DIR}/${_HEADER})
|
|
|
|
|
add_custom_target(${_HEADER} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/${_HEADER})
|
|
|
|
|
add_dependencies(lammps ${_HEADER})
|
|
|
|
|
install(FILES ${LAMMPS_SOURCE_DIR}/${_HEADER} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lammps)
|
|
|
|
|
endforeach()
|
|
|
|
|
target_include_directories(lammps INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/includes>)
|
|
|
|
|
add_library(LAMMPS::lammps ALIAS lammps)
|
|
|
|
|
get_target_property(LAMMPS_DEFINES lammps INTERFACE_COMPILE_DEFINITIONS)
|
|
|
|
|
set(LAMMPS_API_DEFINES)
|
|
|
|
|
foreach(_DEF ${LAMMPS_DEFINES})
|
|
|
|
|
set(LAMMPS_API_DEFINES "${LAMMPS_API_DEFINES} -D${_DEF}")
|
|
|
|
|
endforeach()
|
|
|
|
|
configure_file(pkgconfig/liblammps.pc.in ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LAMMPS_LIB_SUFFIX}.pc @ONLY)
|
|
|
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LAMMPS_LIB_SUFFIX}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
|
|
|
|
install(EXPORT LAMMPS_Targets FILE LAMMPS_Targets.cmake NAMESPACE LAMMPS:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/LAMMPS)
|
|
|
|
|
include(CMakePackageConfigHelpers)
|
|
|
|
|
configure_file(LAMMPSConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/LAMMPSConfig.cmake @ONLY)
|
|
|
|
|
write_basic_package_version_file("LAMMPSConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY ExactVersion)
|
|
|
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/LAMMPSConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/LAMMPSConfigVersion.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/LAMMPS)
|
|
|
|
|
set(LAMMPS_CXX_HEADERS angle.h atom.h bond.h citeme.h comm.h compute.h dihedral.h domain.h error.h fix.h force.h group.h improper.h
|
|
|
|
|
input.h info.h kspace.h lammps.h lattice.h library.h lmppython.h lmptype.h memory.h modify.h neighbor.h neigh_list.h output.h
|
|
|
|
|
pair.h pointers.h region.h timer.h universe.h update.h variable.h)
|
|
|
|
|
if(LAMMPS_EXCEPTIONS)
|
|
|
|
|
list(APPEND LAMMPS_CXX_HEADERS exceptions.h)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(BUILD_EXE)
|
|
|
|
|
install(FILES ${LAMMPS_DOC_DIR}/lammps.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 RENAME ${LAMMPS_BINARY}.1)
|
|
|
|
|
endif()
|
|
|
|
|
set_target_properties(lammps PROPERTIES OUTPUT_NAME lammps${LAMMPS_LIB_SUFFIX})
|
|
|
|
|
set_target_properties(lammps PROPERTIES SOVERSION ${SOVERSION})
|
|
|
|
|
install(TARGETS lammps EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
|
|
|
target_include_directories(lammps PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
|
|
|
|
|
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps)
|
|
|
|
|
foreach(_HEADER ${LAMMPS_CXX_HEADERS})
|
|
|
|
|
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/${_HEADER} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${LAMMPS_SOURCE_DIR}/${_HEADER} ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/${_HEADER} DEPENDS ${LAMMPS_SOURCE_DIR}/${_HEADER})
|
|
|
|
|
add_custom_target(${_HEADER} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/${_HEADER})
|
|
|
|
|
add_dependencies(lammps ${_HEADER})
|
|
|
|
|
install(FILES ${LAMMPS_SOURCE_DIR}/${_HEADER} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lammps)
|
|
|
|
|
endforeach()
|
|
|
|
|
target_include_directories(lammps INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/includes>)
|
|
|
|
|
add_library(LAMMPS::lammps ALIAS lammps)
|
|
|
|
|
get_target_property(LAMMPS_DEFINES lammps INTERFACE_COMPILE_DEFINITIONS)
|
|
|
|
|
set(LAMMPS_API_DEFINES)
|
|
|
|
|
foreach(_DEF ${LAMMPS_DEFINES})
|
|
|
|
|
set(LAMMPS_API_DEFINES "${LAMMPS_API_DEFINES} -D${_DEF}")
|
|
|
|
|
endforeach()
|
|
|
|
|
configure_file(pkgconfig/liblammps.pc.in ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LAMMPS_LIB_SUFFIX}.pc @ONLY)
|
|
|
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LAMMPS_LIB_SUFFIX}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
|
|
|
|
install(EXPORT LAMMPS_Targets FILE LAMMPS_Targets.cmake NAMESPACE LAMMPS:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/LAMMPS)
|
|
|
|
|
include(CMakePackageConfigHelpers)
|
|
|
|
|
configure_file(LAMMPSConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/LAMMPSConfig.cmake @ONLY)
|
|
|
|
|
write_basic_package_version_file("LAMMPSConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY ExactVersion)
|
|
|
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/LAMMPSConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/LAMMPSConfigVersion.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/LAMMPS)
|
|
|
|
|
install(FILES ${LAMMPS_DOC_DIR}/lammps.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 RENAME ${LAMMPS_BINARY}.1)
|
|
|
|
|
|
|
|
|
|
if(BUILD_TOOLS)
|
|
|
|
|
add_executable(binary2txt ${LAMMPS_TOOLS_DIR}/binary2txt.cpp)
|
|
|
|
|
@ -620,7 +598,7 @@ install(
|
|
|
|
|
# conventional build. Only available, if a shared library is built.
|
|
|
|
|
# This is primarily for people that only want to use the Python wrapper.
|
|
|
|
|
###############################################################################
|
|
|
|
|
if(BUILD_LIB AND BUILD_SHARED_LIBS)
|
|
|
|
|
if(BUILD_SHARED_LIBS)
|
|
|
|
|
if(CMAKE_VERSION VERSION_LESS 3.12)
|
|
|
|
|
find_package(PythonInterp) # Deprecated since version 3.12
|
|
|
|
|
else()
|
|
|
|
|
@ -650,7 +628,7 @@ endif()
|
|
|
|
|
# LAMMPS for package managers and with different prefix settings.
|
|
|
|
|
# This requires either a shared library or that the PYTHON package is included.
|
|
|
|
|
###############################################################################
|
|
|
|
|
if((BUILD_LIB AND BUILD_SHARED_LIBS) OR (PKG_PYTHON))
|
|
|
|
|
if(BUILD_SHARED_LIBS) OR (PKG_PYTHON))
|
|
|
|
|
if(CMAKE_VERSION VERSION_LESS 3.12)
|
|
|
|
|
find_package(PythonInterp) # Deprecated since version 3.12
|
|
|
|
|
else()
|
|
|
|
|
@ -710,9 +688,7 @@ if (${_index} GREATER -1)
|
|
|
|
|
C Flags: ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${BTYPE}}")
|
|
|
|
|
endif()
|
|
|
|
|
message(STATUS "<<< Linker flags: >>>")
|
|
|
|
|
if(BUILD_EXE)
|
|
|
|
|
message(STATUS "Executable name: ${LAMMPS_BINARY}")
|
|
|
|
|
endif()
|
|
|
|
|
message(STATUS "Executable name: ${LAMMPS_BINARY}")
|
|
|
|
|
if(CMAKE_EXE_LINKER_FLAGS)
|
|
|
|
|
message(STATUS "Executable linker flags: ${CMAKE_EXE_LINKER_FLAGS}")
|
|
|
|
|
endif()
|
|
|
|
|
|