From e5b521e01111a854f8ec43c69f16b29bc54077de Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 8 Apr 2020 18:31:46 -0400 Subject: [PATCH 01/39] remove BUILD_EXE and BUILD_LIB options from CMake files. we always build both. --- cmake/CMakeLists.txt | 138 +++++++++------------- cmake/Modules/Packages/GPU.cmake | 2 +- cmake/Modules/Packages/MESSAGE.cmake | 2 +- cmake/Modules/Packages/USER-COLVARS.cmake | 4 +- cmake/Modules/Packages/USER-MOLFILE.cmake | 2 +- cmake/Modules/Packages/USER-QMMM.cmake | 5 +- cmake/Modules/Testing.cmake | 2 +- cmake/README.md | 20 ---- 8 files changed, 64 insertions(+), 111 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index b26689dd1f..a22d0fbfaf 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -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 $) - 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 $) - 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 $) +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 $) +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() diff --git a/cmake/Modules/Packages/GPU.cmake b/cmake/Modules/Packages/GPU.cmake index 7c05c02b68..b9e63f55da 100644 --- a/cmake/Modules/Packages/GPU.cmake +++ b/cmake/Modules/Packages/GPU.cmake @@ -200,7 +200,7 @@ get_property(GPU_SOURCES GLOBAL PROPERTY GPU_SOURCES) target_link_libraries(gpu PRIVATE MPI::MPI_CXX) - if(BUILD_LIB AND NOT BUILD_SHARED_LIBS) + if(NOT BUILD_SHARED_LIBS) install(TARGETS gpu EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() target_compile_definitions(gpu PRIVATE -DLAMMPS_${LAMMPS_SIZES}) diff --git a/cmake/Modules/Packages/MESSAGE.cmake b/cmake/Modules/Packages/MESSAGE.cmake index 231c5d8aa0..28657aca07 100644 --- a/cmake/Modules/Packages/MESSAGE.cmake +++ b/cmake/Modules/Packages/MESSAGE.cmake @@ -7,7 +7,7 @@ file(GLOB_RECURSE cslib_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.F ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.cpp) add_library(cslib STATIC ${cslib_SOURCES}) -if(BUILD_LIB AND NOT BUILD_SHARED_LIBS) +if(NOT BUILD_SHARED_LIBS) install(TARGETS cslib EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() target_compile_definitions(cslib PRIVATE -DLAMMPS_${LAMMPS_SIZES}) diff --git a/cmake/Modules/Packages/USER-COLVARS.cmake b/cmake/Modules/Packages/USER-COLVARS.cmake index 18931ae60b..1aa1c954b9 100644 --- a/cmake/Modules/Packages/USER-COLVARS.cmake +++ b/cmake/Modules/Packages/USER-COLVARS.cmake @@ -9,7 +9,7 @@ if(COLVARS_LEPTON) set(LEPTON_DIR ${LAMMPS_LIB_SOURCE_DIR}/colvars/lepton) file(GLOB LEPTON_SOURCES ${LEPTON_DIR}/src/[^.]*.cpp) add_library(lepton STATIC ${LEPTON_SOURCES}) - if(BUILD_LIB AND NOT BUILD_SHARED_LIBS) + if(NOT BUILD_SHARED_LIBS) install(TARGETS lepton EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() set_target_properties(lepton PROPERTIES OUTPUT_NAME lammps_lepton${LAMMPS_LIB_SUFFIX}) @@ -17,7 +17,7 @@ if(COLVARS_LEPTON) endif() add_library(colvars STATIC ${COLVARS_SOURCES}) -if(BUILD_LIB AND NOT BUILD_SHARED_LIBS) +if(NOT BUILD_SHARED_LIBS) install(TARGETS colvars EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() target_compile_definitions(colvars PRIVATE -DLAMMPS_${LAMMPS_SIZES}) diff --git a/cmake/Modules/Packages/USER-MOLFILE.cmake b/cmake/Modules/Packages/USER-MOLFILE.cmake index 1a2061918f..dd6435e56b 100644 --- a/cmake/Modules/Packages/USER-MOLFILE.cmake +++ b/cmake/Modules/Packages/USER-MOLFILE.cmake @@ -1,6 +1,6 @@ set(MOLFILE_INCLUDE_DIRS "${LAMMPS_LIB_SOURCE_DIR}/molfile" CACHE STRING "Path to VMD molfile plugin headers") add_library(molfile INTERFACE) -if(BUILD_LIB AND NOT BUILD_SHARED_LIBS) +if(NOT BUILD_SHARED_LIBS) install(TARGETS molfile EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() target_include_directories(molfile INTERFACE ${MOLFILE_INCLUDE_DIRS}) diff --git a/cmake/Modules/Packages/USER-QMMM.cmake b/cmake/Modules/Packages/USER-QMMM.cmake index 60ca488817..06728386c0 100644 --- a/cmake/Modules/Packages/USER-QMMM.cmake +++ b/cmake/Modules/Packages/USER-QMMM.cmake @@ -1,13 +1,10 @@ enable_language(C) -if(NOT BUILD_LIB) - message(FATAL_ERROR "Building a QM/MM executable with USER-QMMM requires BUILD_LIB=yes") -endif() if(NOT BUILD_SHARED_LIBS) message(WARNING "It is recommended to use BUILD_SHARED_LIBS=yes with USER-QMMM") endif() add_library(qmmm STATIC ${LAMMPS_LIB_SOURCE_DIR}/qmmm/libqmmm.c) -if(BUILD_LIB AND NOT BUILD_SHARED_LIBS) +if(NOT BUILD_SHARED_LIBS) install(TARGETS qmmm EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() set_target_properties(qmmm PROPERTIES OUTPUT_NAME lammps_qmmm${LAMMPS_LIB_SUFFIX}) diff --git a/cmake/Modules/Testing.cmake b/cmake/Modules/Testing.cmake index 0eeef00fe9..0a57056b18 100644 --- a/cmake/Modules/Testing.cmake +++ b/cmake/Modules/Testing.cmake @@ -2,7 +2,7 @@ # Testing ############################################################################### option(ENABLE_TESTING "Enable testing" OFF) -if(ENABLE_TESTING AND BUILD_EXE) +if(ENABLE_TESTING) enable_testing() option(LAMMPS_TESTING_SOURCE_DIR "Location of lammps-testing source directory" "") option(LAMMPS_TESTING_GIT_TAG "Git tag of lammps-testing" "master") diff --git a/cmake/README.md b/cmake/README.md index b9dd6d4373..4eb6492cd2 100644 --- a/cmake/README.md +++ b/cmake/README.md @@ -302,26 +302,6 @@ cmake -C ../cmake/presets/all_on.cmake -C ../cmake/presets/nolib.cmake -D PKG_GP - - BUILD_LIB - control whether to build LAMMPS as a library - -
-
off (default)
-
on
-
- - - - BUILD_EXE - control whether to build LAMMPS executable - -
-
on (default)
-
off
-
- - BUILD_SHARED_LIBS control whether to build LAMMPS as a shared-library From 686aba9fd86a570220a33eabb159dd5985b5dc4a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 8 Apr 2020 18:36:30 -0400 Subject: [PATCH 02/39] include options to link to the LAMMPS library in mode=print output --- src/Makefile.print | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Makefile.print b/src/Makefile.print index 8398eb2589..d6e4976061 100644 --- a/src/Makefile.print +++ b/src/Makefile.print @@ -6,6 +6,7 @@ include Makefile # get location of the LAMMPS tree LMPDIR=$(shell echo $${PWD} | sed -e 's,/src/Obj_[+0-9a-z_-]\+$$,,') +LMPLIB=$(shell echo $(EXE) | sed -e 's,\.\./lib\([+0-9a-z_-]\+\)\.a$$,-L${LMPDIR}/src -l\1,') do-print: @echo '# LAMMPS source tree is in:' $(LMPDIR) @@ -18,5 +19,5 @@ do-print: @echo '# Linking: ' @echo LDFLAGS=$(LINKFLAGS) @echo '# Libraries: ' - @echo LDLIBS=$(EXTRA_PATH) $(EXTRA_LIB) $(LIB) | sed -e s,-L\\.\\./\\.\\./,-L${LMPDIR}/,g -e s,-L\\.\\./,-L${LMPDIR}/src/,g -e s,$(HOME),\\$$\\{HOME\\},g + @echo LDLIBS=$(LMPLIB) $(EXTRA_PATH) $(EXTRA_LIB) $(LIB) | sed -e s,-L\\.\\./\\.\\./,-L${LMPDIR}/,g -e s,-L\\.\\./,-L${LMPDIR}/src/,g -e s,$(HOME),\\$$\\{HOME\\},g From 61147d75b55e838f3a5615335c0d1f0935ab0bdd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 8 Apr 2020 18:37:11 -0400 Subject: [PATCH 03/39] change build settings to have only mode=static and mode=shared and always build library and executable --- src/MAKE/Makefile.mpi | 34 ++++++++++---------- src/MAKE/Makefile.serial | 14 ++++---- src/Makefile | 69 +++++++++++++++++----------------------- 3 files changed, 53 insertions(+), 64 deletions(-) diff --git a/src/MAKE/Makefile.mpi b/src/MAKE/Makefile.mpi index 3be2e20f95..762ced9b0d 100644 --- a/src/MAKE/Makefile.mpi +++ b/src/MAKE/Makefile.mpi @@ -40,8 +40,8 @@ LMP_INC = -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 # -DLAMMPS_CXX98 # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library # see discussion in Section 2.2 (step 6) of manual @@ -50,9 +50,9 @@ MPI_LIB = # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library # see discussion in Section 2.2 (step 7) of manual @@ -61,16 +61,16 @@ FFT_LIB = # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,18 +85,18 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLIB) $(EXTRA_LIB) $(LIB) -o $(EXE) $(SIZE) $(EXE) # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) $(ARLIB) $(OBJ) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) # Compilation rules diff --git a/src/MAKE/Makefile.serial b/src/MAKE/Makefile.serial index 86ddd05053..8bd97820d3 100644 --- a/src/MAKE/Makefile.serial +++ b/src/MAKE/Makefile.serial @@ -85,18 +85,18 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLIB) $(EXTRA_LIB) $(LIB) -o $(EXE) $(SIZE) $(EXE) # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) $(ARLIB) $(OBJ) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) # Compilation rules diff --git a/src/Makefile b/src/Makefile index bce5089500..5f7f57ce3c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -25,20 +25,12 @@ OBJ = $(SRC:.cpp=.o) SRCLIB = $(filter-out main.cpp,$(SRC)) OBJLIB = $(filter-out main.o,$(OBJ)) -# Command-line options for mode: exe (default), shexe, lib, shlib +# Command-line options for mode: static (default), shared, or print -mode = exe +mode = static objdir = $(OBJDIR) -ifeq ($(mode),shexe) -objdir = $(OBJSHDIR) -endif - -ifeq ($(mode),lib) -objdir = $(OBJDIR) -endif - -ifeq ($(mode),shlib) +ifeq ($(mode),shared) objdir = $(OBJSHDIR) endif @@ -124,12 +116,10 @@ help: @echo 'make lib-package args="..." download/build/install a package library' @echo 'make purge purge obsolete copies of source files' @echo '' - @echo 'make machine build LAMMPS for machine' - @echo 'make mode=lib machine build LAMMPS as static lib for machine' - @echo 'make mode=shlib machine build LAMMPS as shared lib for machine' - @echo 'make mode=shexe machine build LAMMPS as shared exe for machine' - @echo 'make makelist create Makefile.list used by old makes' - @echo 'make -f Makefile.list machine build LAMMPS for machine (old)' + @echo 'make machine build LAMMPS for machine with static library' + @echo 'make mode=static machine same as above' + @echo 'make mode=shared machine build LAMMPS for machine with shared library' + @echo 'make mode=print machine print compiler/linker flags' @echo '' @echo 'machine is one of these from src/MAKE:' @echo '' @@ -223,34 +213,39 @@ gitversion: @cp Makefile.package Makefile.package.settings $(objdir) @cd $(objdir); rm -f .depend; \ $(MAKE) $(MFLAGS) "SRC = $(SRC)" "INC = $(INC)" depend || : -ifeq ($(mode),exe) - @cd $(objdir); \ - $(MAKE) $(MFLAGS) "OBJ = $(OBJ)" "INC = $(INC)" "SHFLAGS =" \ - "EXE = ../$(EXE)" ../$(EXE) -endif -ifeq ($(mode),shexe) - @cd $(objdir); \ - $(MAKE) $(MFLAGS) "OBJ = $(OBJ)" "INC = $(INC)" \ - "EXE = ../$(EXE)" ../$(EXE) -endif -ifeq ($(mode),lib) + @rm -f $(ARLINK) $(SHLINK) $(EXE) +ifeq ($(mode),static) @cd $(objdir); \ $(MAKE) $(MFLAGS) "OBJ = $(OBJLIB)" "INC = $(INC)" "SHFLAGS =" \ - "EXE = ../$(ARLIB)" lib - @rm -f $(ARLINK) + "LMPLIB = $(PWD)/$(ARLIB)" "ARLIB = $(PWD)/$(ARLIB)" "SHLIB = $(PWD)/$(SHLIB)" \ + "EXE = ../$(EXE)" ../$(EXE) @ln -s $(ARLIB) $(ARLINK) endif -ifeq ($(mode),shlib) +ifeq ($(mode),shared) @cd $(objdir); \ $(MAKE) $(MFLAGS) "OBJ = $(OBJLIB)" "INC = $(INC)" \ - "EXE = ../$(SHLIB)" shlib - @rm -f $(SHLINK) + "LMPLIB = $(PWD)/$(SHLIB)" "ARLIB = $(PWD)/$(ARLIB)" "SHLIB = $(PWD)/$(SHLIB)" \ + "EXE = ../$(EXE)" ../$(EXE) @ln -s $(SHLIB) $(SHLINK) endif +# backward compatibility +ifeq ($(mode),exe) + $(MAKE) $(MFLAGS) mode=static $@ +endif +ifeq ($(mode),lib) + $(MAKE) $(MFLAGS) mode=static $@ +endif +ifeq ($(mode),shexe) + $(MAKE) $(MFLAGS) mode=shared $@ +endif +ifeq ($(mode),shlib) + $(MAKE) $(MFLAGS) mode=shared $@ +endif + ifeq ($(mode),print) @cd $(objdir); \ $(MAKE) $(MFLAGS) "OBJ = $(OBJLIB)" "INC = $(INC)" \ - "EXE = ../$(SHLIB)" -f ../Makefile.print + "EXE = ../$(ARLIB)" -f ../Makefile.print endif # Remove machine-specific object files @@ -267,12 +262,6 @@ clean-%: then cd STUBS; $(MAKE) clean; cd ..; fi rm -rf Obj_$(@:clean-%=%) Obj_shared_$(@:clean-%=%) -# Create Makefile.list - -makelist: - @$(SHELL) Make.sh style - @$(SHELL) Make.sh Makefile.list - # Make MPI STUBS library mpi-stubs: From f3a280a9f48900ff6777ae96f3873e14b214b107 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 8 Apr 2020 18:49:16 -0400 Subject: [PATCH 04/39] fix typo --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index a22d0fbfaf..c119aa8431 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -628,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_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() From 79fc73d3a28a771d8f90c01483bd8e10b76f30dd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 9 Apr 2020 10:11:13 -0400 Subject: [PATCH 05/39] small hack to ensure that src/MAKE/MINE is included in the git checkout --- src/MAKE/MINE/... | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/MAKE/MINE/... diff --git a/src/MAKE/MINE/... b/src/MAKE/MINE/... new file mode 100644 index 0000000000..e69de29bb2 From 07d31f464399fdd0a16015a5bb6d101abe26eac8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 9 Apr 2020 10:42:11 -0400 Subject: [PATCH 06/39] remove LAMMPS_LIB_SUFFIX variable and use LAMMPS_MACHINE instead. we are now always building the executable and the library and thus they should have a consistent suffix or none. --- cmake/CMakeLists.txt | 17 ++++++----------- cmake/Modules/Packages/GPU.cmake | 2 +- cmake/Modules/Packages/MESSAGE.cmake | 2 +- cmake/Modules/Packages/USER-COLVARS.cmake | 4 ++-- cmake/Modules/Packages/USER-QMMM.cmake | 2 +- cmake/README.md | 9 --------- cmake/pkgconfig/liblammps.pc.in | 2 +- 7 files changed, 12 insertions(+), 26 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 80bbcf9a12..71510b018d 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -91,11 +91,6 @@ 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) @@ -170,7 +165,7 @@ else() 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}) + set_target_properties(mpi_stubs PROPERTIES OUTPUT_NAME lammps_mpi_stubs${LAMMPS_MACHINE}) target_include_directories(mpi_stubs PUBLIC $ $) install(FILES ${LAMMPS_SOURCE_DIR}/STUBS/mpi.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lammps/mpi) if(BUILD_SHARED_LIBS) @@ -257,7 +252,7 @@ if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-QUIP OR PKG_LATTE) 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}) + set_target_properties(linalg PROPERTIES OUTPUT_NAME lammps_linalg${LAMMPS_MACHINE}) set(BLAS_LIBRARIES "$") set(LAPACK_LIBRARIES "$") else() @@ -418,7 +413,7 @@ foreach(SIMPLE_LIB POEMS USER-ATC USER-AWPMD USER-H5MD) 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}) + 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) target_include_directories(awpmd PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/awpmd/systems/interact ${LAMMPS_LIB_SOURCE_DIR}/awpmd/ivutils/include) @@ -522,7 +517,7 @@ 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 OUTPUT_NAME lammps${LAMMPS_MACHINE}) 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 $) @@ -540,8 +535,8 @@ 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) +configure_file(pkgconfig/liblammps.pc.in ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LAMMPS_MACHINE}.pc @ONLY) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LAMMPS_MACHINE}.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) diff --git a/cmake/Modules/Packages/GPU.cmake b/cmake/Modules/Packages/GPU.cmake index b9e63f55da..2e609b63de 100644 --- a/cmake/Modules/Packages/GPU.cmake +++ b/cmake/Modules/Packages/GPU.cmake @@ -204,6 +204,6 @@ install(TARGETS gpu EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() target_compile_definitions(gpu PRIVATE -DLAMMPS_${LAMMPS_SIZES}) - set_target_properties(gpu PROPERTIES OUTPUT_NAME lammps_gpu${LAMMPS_LIB_SUFFIX}) + 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/MESSAGE.cmake b/cmake/Modules/Packages/MESSAGE.cmake index 28657aca07..e1dc4c1072 100644 --- a/cmake/Modules/Packages/MESSAGE.cmake +++ b/cmake/Modules/Packages/MESSAGE.cmake @@ -11,7 +11,7 @@ if(NOT BUILD_SHARED_LIBS) install(TARGETS cslib EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() target_compile_definitions(cslib PRIVATE -DLAMMPS_${LAMMPS_SIZES}) -set_target_properties(cslib PROPERTIES OUTPUT_NAME lammps_cslib${LAMMPS_LIB_SUFFIX}) +set_target_properties(cslib PROPERTIES OUTPUT_NAME lammps_cslib${LAMMPS_MACHINE}) if(BUILD_MPI) target_compile_definitions(cslib PRIVATE -DMPI_YES) set_target_properties(cslib PROPERTIES OUTPUT_NAME "csmpi") diff --git a/cmake/Modules/Packages/USER-COLVARS.cmake b/cmake/Modules/Packages/USER-COLVARS.cmake index 1aa1c954b9..281b497dea 100644 --- a/cmake/Modules/Packages/USER-COLVARS.cmake +++ b/cmake/Modules/Packages/USER-COLVARS.cmake @@ -12,7 +12,7 @@ if(COLVARS_LEPTON) if(NOT BUILD_SHARED_LIBS) install(TARGETS lepton EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() - set_target_properties(lepton PROPERTIES OUTPUT_NAME lammps_lepton${LAMMPS_LIB_SUFFIX}) + set_target_properties(lepton PROPERTIES OUTPUT_NAME lammps_lepton${LAMMPS_MACHINE}) target_include_directories(lepton PRIVATE ${LEPTON_DIR}/include) endif() @@ -21,7 +21,7 @@ if(NOT BUILD_SHARED_LIBS) install(TARGETS colvars EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() target_compile_definitions(colvars PRIVATE -DLAMMPS_${LAMMPS_SIZES}) -set_target_properties(colvars PROPERTIES OUTPUT_NAME lammps_colvars${LAMMPS_LIB_SUFFIX}) +set_target_properties(colvars PROPERTIES OUTPUT_NAME lammps_colvars${LAMMPS_MACHINE}) target_include_directories(colvars PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/colvars) target_link_libraries(lammps PRIVATE colvars) diff --git a/cmake/Modules/Packages/USER-QMMM.cmake b/cmake/Modules/Packages/USER-QMMM.cmake index 06728386c0..76bb76fa5a 100644 --- a/cmake/Modules/Packages/USER-QMMM.cmake +++ b/cmake/Modules/Packages/USER-QMMM.cmake @@ -7,6 +7,6 @@ add_library(qmmm STATIC ${LAMMPS_LIB_SOURCE_DIR}/qmmm/libqmmm.c) if(NOT BUILD_SHARED_LIBS) install(TARGETS qmmm EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() -set_target_properties(qmmm PROPERTIES OUTPUT_NAME lammps_qmmm${LAMMPS_LIB_SUFFIX}) +set_target_properties(qmmm PROPERTIES OUTPUT_NAME lammps_qmmm${LAMMPS_MACHINE}) target_link_libraries(lammps PRIVATE qmmm) target_include_directories(qmmm PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/qmmm) diff --git a/cmake/README.md b/cmake/README.md index 4eb6492cd2..cc2b2e8fad 100644 --- a/cmake/README.md +++ b/cmake/README.md @@ -293,15 +293,6 @@ cmake -C ../cmake/presets/all_on.cmake -C ../cmake/presets/nolib.cmake -D PKG_GP - - LAMMPS_LIB_SUFFIX - allows appending a suffix to the generated LAMMPS library - -
-
*none* (default)
-
- - BUILD_SHARED_LIBS control whether to build LAMMPS as a shared-library diff --git a/cmake/pkgconfig/liblammps.pc.in b/cmake/pkgconfig/liblammps.pc.in index 96dab89161..ca2c6191b7 100644 --- a/cmake/pkgconfig/liblammps.pc.in +++ b/cmake/pkgconfig/liblammps.pc.in @@ -27,6 +27,6 @@ Description: Large-scale Atomic/Molecular Massively Parallel Simulator Library URL: http://lammps.sandia.gov Version: @PROJECT_VERSION@ Requires: -Libs: -L${libdir} -llammps@LAMMPS_LIB_SUFFIX@ +Libs: -L${libdir} -llammps@LAMMPS_MACHINE@ Libs.private: -lm Cflags: -I${includedir} @LAMMPS_API_DEFINES@ From a1992ce01da7d3290abdf537f77ef0cea4f4bff0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 9 Apr 2020 14:16:00 -0400 Subject: [PATCH 07/39] tweak linking procedure to maximize shared code and have the least issues with rpath --- src/MAKE/Makefile.mpi | 14 +++++++++----- src/MAKE/Makefile.serial | 14 +++++++++----- src/Makefile | 29 ++++++++++++++--------------- 3 files changed, 32 insertions(+), 25 deletions(-) diff --git a/src/MAKE/Makefile.mpi b/src/MAKE/Makefile.mpi index 762ced9b0d..fba9789724 100644 --- a/src/MAKE/Makefile.mpi +++ b/src/MAKE/Makefile.mpi @@ -85,18 +85,22 @@ vpath %.h .. # Link target -$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLIB) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets $(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(ARLIB) $(OBJ) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) $(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(SHLIB) \ + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules diff --git a/src/MAKE/Makefile.serial b/src/MAKE/Makefile.serial index 8bd97820d3..ee07041bf4 100644 --- a/src/MAKE/Makefile.serial +++ b/src/MAKE/Makefile.serial @@ -85,18 +85,22 @@ vpath %.h .. # Link target -$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLIB) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets $(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(ARLIB) $(OBJ) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) $(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(SHLIB) \ + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules diff --git a/src/Makefile b/src/Makefile index 5f7f57ce3c..d111636ee3 100644 --- a/src/Makefile +++ b/src/Makefile @@ -7,20 +7,21 @@ PYTHON = python # Definitions -ROOT = lmp -EXE = lmp_$@ +ROOT = lmp +EXE = lmp_$@ ARLIB = liblammps_$@.a -SHLIB = liblammps_$@.so +SHLIB = liblammps_$@.so ARLINK = liblammps.a SHLINK = liblammps.so TMPNAME= tmp_$@_name +LMPLINK=$(shell echo $(ARLIB) | sed -e 's,lib\([+0-9a-z_-]\+\)\.a$$,-L. -l\1,') OBJDIR = Obj_$@ OBJSHDIR = Obj_shared_$@ -SRC = $(wildcard *.cpp) -INC = $(filter-out lmpinstalledpkgs.h lmpgitversion.h,$(wildcard *.h)) -OBJ = $(SRC:.cpp=.o) +SRC = $(wildcard *.cpp) +INC = $(filter-out lmpinstalledpkgs.h lmpgitversion.h,$(wildcard *.h)) +OBJ = $(SRC:.cpp=.o) SRCLIB = $(filter-out main.cpp,$(SRC)) OBJLIB = $(filter-out main.o,$(OBJ)) @@ -181,11 +182,9 @@ gitversion: mv ${TMPNAME}.lmpgitversion lmpgitversion.h || rm ${TMPNAME}.lmpgitversion ; \ else mv ${TMPNAME}.lmpgitversion lmpgitversion.h ; fi -# Build LAMMPS in one of 4 modes -# exe = exe with static compile in Obj_machine (default) -# shexe = exe with shared compile in Obj_shared_machine -# lib = static lib in Obj_machine -# shlib = shared lib in Obj_shared_machine +# Build LAMMPS in one of 2 modes +# static = static compile in Obj_machine (default) +# shared = shared compile in Obj_shared_machine .DEFAULT: @if [ $@ = "serial" ]; \ @@ -217,15 +216,15 @@ gitversion: ifeq ($(mode),static) @cd $(objdir); \ $(MAKE) $(MFLAGS) "OBJ = $(OBJLIB)" "INC = $(INC)" "SHFLAGS =" \ - "LMPLIB = $(PWD)/$(ARLIB)" "ARLIB = $(PWD)/$(ARLIB)" "SHLIB = $(PWD)/$(SHLIB)" \ - "EXE = ../$(EXE)" ../$(EXE) + "LMPLIB = $(ARLIB)" "ARLIB = $(ARLIB)" "SHLIB = $(SHLIB)" \ + "LMPLINK = $(LMPLINK)" "EXE = $(EXE)" ../$(EXE) @ln -s $(ARLIB) $(ARLINK) endif ifeq ($(mode),shared) @cd $(objdir); \ $(MAKE) $(MFLAGS) "OBJ = $(OBJLIB)" "INC = $(INC)" \ - "LMPLIB = $(PWD)/$(SHLIB)" "ARLIB = $(PWD)/$(ARLIB)" "SHLIB = $(PWD)/$(SHLIB)" \ - "EXE = ../$(EXE)" ../$(EXE) + "LMPLIB = $(SHLIB)" "ARLIB = $(ARLIB)" "SHLIB = $(SHLIB)" \ + "LMPLINK = $(LMPLINK)" "EXE = $(EXE)" ../$(EXE) @ln -s $(SHLIB) $(SHLINK) endif # backward compatibility From 3d2d2cb6689e94a53ea1a2daacdcda39b3126f34 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 9 Apr 2020 15:43:05 -0400 Subject: [PATCH 08/39] update documentation for the changes to the build procedure --- doc/src/Build_basics.rst | 235 +++++++++++++++++++++------------------ doc/src/Build_link.rst | 147 ++++++++++++------------ 2 files changed, 205 insertions(+), 177 deletions(-) diff --git a/doc/src/Build_basics.rst b/doc/src/Build_basics.rst index 8ad48b0810..8a81836614 100644 --- a/doc/src/Build_basics.rst +++ b/doc/src/Build_basics.rst @@ -6,7 +6,7 @@ CMake and make: * :ref:`Serial vs parallel build ` * :ref:`Choice of compiler and compile/link options ` -* :ref:`Build LAMMPS as an executable or a library ` +* :ref:`Build the LAMMPS executable and library ` * :ref:`Build the LAMMPS documentation ` * :ref:`Install LAMMPS after a build ` @@ -28,8 +28,8 @@ MPI STUBS library. Independent of the distributed memory MPI parallelization, parts of LAMMPS are also written with support for shared memory parallelization -using the OpenMP threading standard. A more detailed discussion of that -is below. +using the `OpenMP `_ threading +standard. A more detailed discussion of that is below. **CMake build**\ : @@ -41,7 +41,7 @@ is below. # no default value The executable created by CMake (after running make) is named ``lmp`` unless -the LAMMPS_MACHINE option is set. When setting ``LAMMPS_MACHINE=name`` +the ``LAMMPS_MACHINE`` option is set. When setting ``LAMMPS_MACHINE=name`` the executable will be called ``lmp_name``. Using ``BUILD_MPI=no`` will enforce building a serial executable using the MPI STUBS library. @@ -55,18 +55,20 @@ The build with traditional makefiles has to be done inside the source folder ``s make serial # serial build, produces lmp_serial using Makefile/serial make mybox # uses Makefile.mybox to produce lmp_mybox -Any "make machine" command will look up the make settings from a file -Makefile.machine, create a folder Obj_machine with all objects and -generated files and an executable called ``lmp_machine``\ . The standard -parallel build with ``make mpi`` assumes a standard MPI installation with -MPI compiler wrappers where all necessary compiler and linker flags to -get access and link with the suitable MPI headers and libraries are set -by the wrapper programs. For other cases or the serial build, you have -to adjust the make file variables ``MPI_INC``, ``MPI_PATH``, ``MPI_LIB`` -as well as ``CC`` and ``LINK``\ . To enable OpenMP threading usually -a compiler specific flag needs to be added to the compile and link -commands. For the GNU compilers, this is ``-fopenmp``\ , which can be -added to the ``CC`` and ``LINK`` makefile variables. +Any ``make machine`` command will look up the make settings from a file +``Makefile.machine`` in the folder ``src/MAKE`` or one of its +subdirectories ``MINE``, ``MACHINES``, or ``OPTIONS``, create a folder +``Obj_machine`` with all objects and generated files and an executable +called ``lmp_machine``\ . The standard parallel build with ``make mpi`` +assumes a standard MPI installation with MPI compiler wrappers where all +necessary compiler and linker flags to get access and link with the +suitable MPI headers and libraries are set by the wrapper programs. For +other cases or the serial build, you have to adjust the make file +variables ``MPI_INC``, ``MPI_PATH``, ``MPI_LIB`` as well as ``CC`` and +``LINK``\ . To enable OpenMP threading usually a compiler specific flag +needs to be added to the compile and link commands. For the GNU +compilers, this is ``-fopenmp``\ , which can be added to the ``CC`` and +``LINK`` makefile variables. For the serial build the following make variables are set (see src/MAKE/Makefile.serial): @@ -80,18 +82,19 @@ For the serial build the following make variables are set (see src/MAKE/Makefile You also need to build the STUBS library for your platform before making LAMMPS itself. A ``make serial`` build does this for you automatically, -otherwise, type ``make mpi-stubs`` from the src directory, or ``make`` from -the src/STUBS dir. If the build fails, you will need to edit the -STUBS/Makefile for your platform. The stubs library does not provide -MPI/IO functions required by some LAMMPS packages, e.g. MPIIO or USER-LB, -and thus is not compatible with those packages. +otherwise, type ``make mpi-stubs`` from the src directory, or ``make`` +from the ``src/STUBS`` dir. If the build fails, you may need to edit +the ``STUBS/Makefile`` for your platform. The stubs library does not +provide MPI/IO functions required by some LAMMPS packages, +e.g. ``MPIIO`` or ``USER-LB``, and thus is not compatible with those +packages. .. note:: The file ``src/STUBS/mpi.c`` provides a CPU timer function called - MPI_Wtime() that calls gettimeofday() . If your operating system - does not support gettimeofday() , you will need to insert code to - call another timer. Note that the ANSI-standard function clock() + ``MPI_Wtime()`` that calls ``gettimeofday()``. If your operating system + does not support ``gettimeofday()``, you will need to insert code to + call another timer. Note that the ANSI-standard function ``clock()`` rolls over after an hour or so, and is therefore insufficient for timing long LAMMPS simulations. @@ -111,20 +114,22 @@ self-installed MPICH or OpenMPI, so you should study the provided documentation to find out how to build and link with it. The majority of OpenMP (threading) support in LAMMPS is provided by the -USER-OMP package; see the :doc:`Speed omp ` doc page for -details. The USER-INTEL package also includes OpenMP threading (it is -compatible with USER-OMP) and adds vectorization support when compiled -with compatible compilers, in particular the Intel compilers on top of -OpenMP. Also, the KOKKOS package can be compiled to include OpenMP -threading. +``USER-OMP`` package; see the :doc:`Speed omp ` doc page for +details. The ``USER-INTEL`` package also includes OpenMP threading (it +is compatible with ``USER-OMP`` and will usually fall back on styles +from that package, if a ``USER-INTEL`` does not exist) and adds +vectorization support when compiled with compatible compilers, in +particular the Intel compilers on top of OpenMP. Also, the ``KOKKOS`` +package can be compiled to include OpenMP threading. In addition, there are a few commands in LAMMPS that have native OpenMP -support included as well. These are commands in the MPIIO, SNAP, -USER-DIFFRACTION, and USER-DPD packages. In addition some packages -support OpenMP threading indirectly through the libraries they interface -to: e.g. LATTE and USER-COLVARS. See the :doc:`Packages details -` doc page for more info on these packages and the doc -pages for their respective commands for OpenMP threading info. +support included as well. These are commands in the ``MPIIO``, +``SNAP``, ``USER-DIFFRACTION``, and ``USER-DPD`` packages. In addition +some packages support OpenMP threading indirectly through the libraries +they interface to: e.g. ``LATTE``, ``KSPACE``, and ``USER-COLVARS``. +See the :doc:`Packages details ` doc page for more +info on these packages and the doc pages for their respective commands +for OpenMP threading info. For CMake, if you use ``BUILD_OMP=yes``, you can use these packages and turn on their native OpenMP support and turn on their native OpenMP @@ -158,15 +163,18 @@ this conversion. Choice of compiler and compile/link options --------------------------------------------------------- -The choice of compiler and compiler flags can be important for +The choice of compiler and compiler flags can be important for maximum performance. Vendor provided compilers for a specific hardware can produce faster code than open-source compilers like the GNU compilers. -On x86 hardware most popular compilers are quite similar in performance -of C/C++ code at high optimization levels. When using the USER-INTEL -package, there is a distinct advantage in using the `Intel C++ compiler -`_ due to much improved vectorization through SSE and AVX -instructions on compatible hardware as the source code includes changes -and compiler directives to enable high degrees of vectorization. +On the most common x86 hardware most popular C++ compilers are quite +similar in performance of C/C++ code at high optimization levels. When +using the ``USER-INTEL`` package, there is a distinct advantage in using +the `Intel C++ compiler `_ due to much improved vectorization +through SSE and AVX instructions on compatible hardware as the source +code includes changes and Intel compiler specific directives to enable +high degrees of vectorization. This may change over time as equivalent +vectorization directives are included into OpenMP standard revisions and +other compilers adopt them. .. _intel: https://software.intel.com/en-us/intel-compilers @@ -177,17 +185,20 @@ LAMMPS. **CMake build**\ : -By default CMake will use a compiler it finds and it will add -optimization flags appropriate to that compiler and any -:doc:`accelerator packages ` you have included in the -build. +By default CMake will use a compiler it finds according to internal +preferences and it will add optimization flags appropriate to that +compiler and any :doc:`accelerator packages ` you have +included in the build. -You can tell CMake to look for a specific compiler with these variable -settings. Likewise you can specify the corresponding ``CMAKE_*_FLAGS`` -variables if you want to experiment with alternate optimization flags. -You should specify all 3 compilers, so that the small number of LAMMPS -source files written in C or Fortran are built with a compiler consistent -with the one used for all the C++ files: +You can tell CMake to look for a specific compiler with setting CMake +variable during configuration. For a few common choices, there are also +presets in the ``cmake/presets`` folder. For convenience, there is a +``CMAKE_TUNE_FLAGS`` variable that can be set to apply global compiler +options. More on that below, but you can also specify the corresponding +``CMAKE_*_FLAGS`` variables individually if you want to experiment with +alternate optimization flags. You should specify all 3 compilers, so +that the (few) LAMMPS source files written in C or Fortran are built +with a compiler consistent with the one used for the C++ files: .. code-block:: bash @@ -210,16 +221,17 @@ A few example command lines are: # Building with LLVM/Clang Compilers: cmake ../cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_Fortran_COMPILER=flang -For compiling with the Clang/LLVM compilers a special CMake preset is -included that can be loaded with `-C ../cmake/presets/clang.cmake`. +For compiling with the Clang/LLVM compilers a CMake preset is provided that +can be loaded with `-C ../cmake/presets/clang.cmake`. Similarly, +`-C ../cmake/presets/intel.cmake` should switch the -In addition you can set ``CMAKE_TUNE_FLAGS`` to specifically add compiler -flags to tune for optimal performance on given hosts. By default these are -initialized to some compiler specific flags, where known, to optimize the -LAMMPS executable with optimizations and instructions available on the host -where LAMMPS is compiled. For example, for Intel compilers this would be -``-xHost`` and for GNU compilers this would be ``-march=native``. To turn -these flags off, set ``-D CMAKE_TUNE_FLAGS=``. +In addition you can set ``CMAKE_TUNE_FLAGS`` to specifically add +compiler flags to tune for optimal performance on given hosts. By +default these are initialized to some compiler specific flags, to +optimize the LAMMPS executable with optimizations and instructions +available on the host where LAMMPS is compiled. For example, for Intel +compilers this would be ``-xHost`` and for GNU compilers this would be +``-march=native``. To turn these flags off, do ``-D CMAKE_TUNE_FLAGS=``. .. note:: @@ -235,11 +247,11 @@ these flags off, set ``-D CMAKE_TUNE_FLAGS=``. The "compiler/linker settings" section of a Makefile.machine lists compiler and linker settings for your C++ compiler, including optimization flags. For a parallel build it is recommended to use -mpicxx or mpiCC, since these compiler wrappers will include a variety of -settings appropriate for your MPI installation and thus avoiding the -guesswork of finding the right flags. +``mpicxx`` or ``mpiCC``, since these compiler wrappers will include a +variety of settings appropriate for your MPI installation and thus +avoiding the guesswork of finding the right flags. -Parallel build (see src/MAKE/Makefile.mpi): +Parallel build (see ``src/MAKE/Makefile.mpi``): .. code-block:: bash @@ -248,7 +260,7 @@ Parallel build (see src/MAKE/Makefile.mpi): LINK = mpicxx LINKFLAGS = -g -O -Serial build (see src/MAKE/Makefile.serial): +Serial build with GNU gcc (see ``src/MAKE/Makefile.serial``): .. code-block:: make @@ -284,69 +296,74 @@ Serial build (see src/MAKE/Makefile.serial): .. _exe: -Build LAMMPS as an executable or a library ----------------------------------------------------- +Build the LAMMPS executable and library +--------------------------------------- -LAMMPS can be built as either an executable or as a static or shared -library. The LAMMPS library can be called from another application or -a scripting language. See the :doc:`Howto couple ` doc +LAMMPS is always built as a library of C++ classes plus an executable. +The executable is a simple ``main()`` function that sets up MPI and then +creates a LAMMPS class instance from the LAMMPS library, which +will then process commands provided via a file or from the console +input. The LAMMPS library can also be called from another application +or a scripting language. See the :doc:`Howto couple ` doc page for more info on coupling LAMMPS to other codes. See the :doc:`Python ` doc page for more info on wrapping and running LAMMPS from Python via its library interface. **CMake build**\ : -For CMake builds, you can select through setting CMake variables which -files the compilation produces during the configuration step. If none -are set, defaults are applied. +For CMake builds, you can select through setting CMake variables between +building a shared or a static LAMMPS library and what kind of suffix is +added to them (in case you want to concurrently install multiple variants +of binaries with different settings). If none are set, defaults are applied. .. code-block:: bash - -D BUILD_EXE=value # yes (default) or no - -D BUILD_LIB=value # yes or no (default) -D BUILD_SHARED_LIBS=value # yes or no (default) - -D LAMMPS_LIB_SUFFIX=name # name = mpi, serial, mybox, titan, laptop, etc + -D LAMMPS_MACHINE=name # name = mpi, serial, mybox, titan, laptop, etc # no default value -Setting ``BUILD_EXE=no`` will not produce an executable. Setting -``BUILD_LIB=yes`` will produce a static library named ``liblammps.a``\ . -Setting both ``BUILD_LIB=yes`` and ``BUILD_SHARED_LIBS=yes`` will produce a -shared library named ``liblammps.so`` instead. If ``LAMMPS_LIB_SUFFIX=name`` -is set in addition, the name of the generated libraries will be changed to -either ``liblammps_name.a`` or ``liblammps_name.so``\ , respectively. +The compilation will always produce a LAMMPS library and an executable +linked to it. By default this will be a static library named +``liblammps.a`` and an executable named ``lmp`` Setting +``BUILD_SHARED_LIBS=yes`` will instead produce a shared library called +``liblammps.so`` (or ``liblammps.dylib`` or ``liblammps.dll`` depending +on the platform) If ``LAMMPS_MACHINE=name`` is set in addition, the name +of the generated libraries will be changed to either +``liblammps_name.a`` or ``liblammps_name.so``\ , respectively and the +executable will be called ``lmp_name``. **Traditional make**\ : With the traditional makefile based build process, the choice of the generated executable or library depends on the "mode" setting. -Several options are available and ``mode=exe`` is the default. +Several options are available and ``mode=static`` is the default. .. code-block:: bash make machine # build LAMMPS executable lmp_machine - make mode=exe machine # same as "make machine" - make mode=lib machine # build LAMMPS static lib liblammps_machine.a - make mode=shlib machine # build LAMMPS shared lib liblammps_machine.so - make mode=shexe machine # same as "mode=exe" but uses objects from "mode=shlib" + make mode=static machine # same as "make machine" + make mode=shared machine # build LAMMPS shared lib liblammps_machine.so instead -The two "exe" builds will generate and executable ``lmp_machine``\ , -while the two library builds will create a file ``liblammps_machine.a`` -or ``liblammps_machine.so``\ . They will also create generic soft links, -named ``liblammps.a`` and ``liblammps.so``\ , which point to the specific +The "static" build will generate a static library called +``liblammps_machine.a`` and an executable named ``lmp_machine``\ , while +the "shared" build will generate a shared library +``liblammps_machine.so`` instead and ``lmp_machine`` will be linked to +it. The build step will also create generic soft links, named +``liblammps.a`` and ``liblammps.so``\ , which point to the specific ``liblammps_machine.a/so`` files. **CMake and make info**\ : -Note that for a shared library to be usable by a calling program, all -the auxiliary libraries it depends on must also exist as shared -libraries. This will be the case for libraries included with LAMMPS, -such as the dummy MPI library in src/STUBS or any package libraries in -the lib/packages directory, since they are always built in a shared -library compatible way using the ``-fPIC`` switch. However, if a library -like MPI or FFTW does not exist as a shared library, the shared library -build may generate an error. This means you will need to install a -shared library version of the auxiliary library. The build instructions -for the library should tell you how to do this. +Note that for creating a shared library, all the libraries it depends on +must be compiled to be compatible with shared libraries. This should be +the case for libraries included with LAMMPS, such as the dummy MPI +library in ``src/STUBS`` or any package libraries in the ``lib`` +directory, since they are always built in a shared library compatible +way using the ``-fPIC`` compiler switch. However, if an auxiliary +library (like MPI or FFTW) does not exist as a compatible format, the +shared library linking step may generate an error. This means you will +need to install a compatible version of the auxiliary library. The +build instructions for that library should tell you how to do this. As an example, here is how to build and install the `MPICH library `_, a popular open-source version of MPI, as a shared library @@ -360,10 +377,12 @@ in the default /usr/local/lib location: make make install -You may need to use ``sudo make install`` in place of the last line if you -do not have write privileges for ``/usr/local/lib``. The end result should -be the file ``/usr/local/lib/libmpich.so``. On many Linux installations the -folder ``${HOME}/.local`` is an alternative to using ``/usr/local`` and does +You may need to use ``sudo make install`` in place of the last line if +you do not have write privileges for ``/usr/local/lib`` or use the +``--prefix`` configuration option to select an installation folder, +where you do have write access. The end result should be the file +``/usr/local/lib/libmpich.so``. On many Linux installations the folder +``${HOME}/.local`` is an alternative to using ``/usr/local`` and does not require superuser or sudo access. In that case the configuration step becomes: @@ -371,7 +390,7 @@ step becomes: ./configure --enable-shared --prefix=${HOME}/.local -Avoiding using "sudo" for custom software installation (i.e. from source +Avoiding to use "sudo" for custom software installation (i.e. from source and not through a package manager tool provided by the OS) is generally recommended to ensure the integrity of the system software installation. diff --git a/doc/src/Build_link.rst b/doc/src/Build_link.rst index b18dc49e38..39fc4fe40a 100644 --- a/doc/src/Build_link.rst +++ b/doc/src/Build_link.rst @@ -1,33 +1,35 @@ Link LAMMPS as a library to another code ======================================== -LAMMPS can be used as a library by another application, including -Python scripts. The files src/library.cpp and library.h define the +LAMMPS is designed as a library of C++ objects and can thus be +integrated into other applications including Python scripts. +The files ``src/library.cpp`` and ``src/library.h`` define a C-style API for using LAMMPS as a library. See the :doc:`Howto library ` doc page for a description of the interface and how to extend it for your needs. The :doc:`Build basics ` doc page explains how to build -LAMMPS as either a shared or static library. This results in one of -these 2 files: - -.. code-block:: bash - - liblammps.so # shared library - liblammps.a # static library +LAMMPS as either a shared or static library. This results in a file +in the compilation folder called ``liblammps.a`` or ``liblammps_.a`` +in case of building a static library. In case of a shared library +the name is the same only that the suffix is going to be either ``.so`` +or ``.dylib`` or ``.dll`` instead of ``.a`` depending on the OS. +In some cases the ``.so`` file may be a symbolic link to a file with +the suffix ``.so.0`` (or some other number). .. note:: - Care should be taken to use the same MPI library for the calling - code and the LAMMPS library. The library.h file includes mpi.h and - uses definitions from it so those need to be available and - consistent. When LAMMPS is compiled with the MPI STUBS library, - then its mpi.h file needs to be included. While it is technically - possible to use a full MPI library in the calling code and link to - a serial LAMMPS library compiled with MPI STUBS, it is recommended - to use the *same* MPI library for both, and then use MPI_Comm_split() - in the calling code to pass a suitable communicator with a subset - of MPI ranks to the function creating the LAMMPS instance. + Care should be taken to use the same MPI library for the calling code + and the LAMMPS library. The ``library.h`` file includes ``mpi.h`` + and uses definitions from it so those need to be available and + consistent. When LAMMPS is compiled with the included STUBS MPI + library, then its ``mpi.h`` file needs to be included. While it is + technically possible to use a full MPI library in the calling code + and link to a serial LAMMPS library compiled with MPI STUBS, it is + recommended to use the *same* MPI library for both, and then use + ``MPI_Comm_split()`` in the calling code to pass a suitable + communicator with a subset of MPI ranks to the function creating the + LAMMPS instance. ---------- @@ -42,11 +44,11 @@ executable code from the library is copied into the calling executable. *CMake build*\ : -This assumes that LAMMPS has been configured with "-D BUILD_LIB=yes" -and installed with "make install" and the PKG_CONFIG_PATH environment -variable updated to include the *liblammps.pc* file installed into the -configured destination folder, if needed. The commands to compile and -link the coupled executable are then: +This assumes that LAMMPS has been configured without setting a +``LAMMPS_MACHINE`` name, installed with "make install", and the +``PKG_CONFIG_PATH`` environment variable has been updated to include the +``liblammps.pc`` file installed into the configured destination folder. +The commands to compile and link a coupled executable are then: .. code-block:: bash @@ -56,30 +58,35 @@ link the coupled executable are then: *Traditional make*\ : This assumes that LAMMPS has been compiled in the folder -"${HOME}/lammps/src" with "make mode=lib mpi". The commands to compile -and link the coupled executable are then: +``${HOME}/lammps/src`` with "make mpi". The commands to compile and link +a coupled executable are then: .. code-block:: bash mpicc -c -O -I${HOME}/lammps/src caller.c - mpicxx -o caller caller.o -L${HOME}/lammps/src -llammps + mpicxx -o caller caller.o -L${HOME}/lammps/src -llammps_mpi -The *-I* argument is the path to the location of the *library.h* +The *-I* argument is the path to the location of the ``library.h`` header file containing the interface to the LAMMPS C-style library -interface. The *-L* argument is the path to where the *liblammps.a* -file is located. The *-llammps* argument is shorthand for telling the -compiler to link the file *liblammps.a*\ . +interface. The *-L* argument is the path to where the ``liblammps_mpi.a`` +file is located. The *-llammps_mpi* argument is shorthand for telling the +compiler to link the file ``liblammps_mpi.a``. If LAMMPS has been +built as a shared library, then the linker will use ``liblammps_mpi.so`` +instead. If both files are available, the linker will usually prefer +the shared library. In case of a shared library, you may need to update +the ``LD_LIBRARY_PATH`` environment variable or running the ``caller`` +executable will fail since it cannot find the shared library at runtime. However, it is only as simple as shown above for the case of a plain LAMMPS library without any optional packages that depend on libraries -(bundled or external). Otherwise, you need to include all flags, -libraries, and paths for the coupled executable, that are also -required to link the LAMMPS executable. +(bundled or external) or when using a shared library. Otherwise, you +need to include all flags, libraries, and paths for the coupled +executable, that are also required to link the LAMMPS executable. *CMake build*\ : When using CMake, additional libraries with sources in the lib folder -are built, but not included in liblammps.a and (currently) not +are built, but not included in ``liblammps.a`` and (currently) not installed with "make install" and not included in the *pkgconfig* configuration file. They can be found in the top level build folder, but you have to determine the necessary link flags manually. It is @@ -87,23 +94,26 @@ therefore recommended to either use the traditional make procedure to build and link with a static library or build and link with a shared library instead. +.. TODO: this needs to be updated to reflect that latest CMake changes after they are complete. + *Traditional make*\ : After you have compiled a static LAMMPS library using the conventional -build system for example with "make mode=lib serial". And you also -have installed the POEMS package after building its bundled library in -lib/poems. Then the commands to build and link the coupled executable +build system for example with "make mode=static serial". And you also +have installed the ``POEMS`` package after building its bundled library +in ``lib/poems``. Then the commands to build and link the coupled executable change to: .. code-block:: bash gcc -c -O -I${HOME}/lammps/src/STUBS -I${HOME}/lammps/src -caller.c g++ -o caller caller.o -L${HOME}/lammps/lib/poems \ - -L${HOME}/lammps/src/STUBS -L${HOME}/lammps/src -llammps -lpoems -lmpi_stubs + -L${HOME}/lammps/src/STUBS -L${HOME}/lammps/src -llammps_serial -lpoems -lmpi_stubs -Note, that you need to link with "g++" instead of "gcc", since LAMMPS -is C++ code. You can display the currently applied settings for building -LAMMPS for the "serial" machine target by using the command: +Note, that you need to link with "g++" instead of "gcc", since the +LAMMPS library is C++ code. You can display the currently applied +settings for building LAMMPS for the "serial" machine target by using +the command: .. code-block:: bash @@ -113,16 +123,16 @@ Which should output something like: .. code-block:: bash - # Compiler: + # Compiler: CXX=g++ - # Linker: + # Linker: LD=g++ - # Compilation: - CXXFLAGS=-g -O3 -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 -I${HOME}/lammps/lib/poems -I${HOME}/lammps/src/STUBS - # Linking: + # Compilation: + CXXFLAGS=-g -O3 -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 -I${HOME}/compile/lammps/lib/poems -I${HOME}/compile/lammps/src/STUBS + # Linking: LDFLAGS=-g -O - # Libraries: - LDLIBS=-L${HOME}/lammps/lib/poems -L${HOME}/lammps/src/STUBS -lpoems -lmpi_stubs + # Libraries: + LDLIBS=-L${HOME}/compile/lammps/src -llammps_serial -L${HOME}/compile/lammps/lib/poems -L${HOME}/compile/lammps/src/STUBS -lpoems -lmpi_stubs From this you can gather the necessary paths and flags. With makefiles for other *machine* configurations you need to do the @@ -133,14 +143,13 @@ of the makefile. **Link with LAMMPS as a shared library**\ : -When linking to LAMMPS built as a shared library, the situation -becomes much simpler, as all dependent libraries and objects are -included in the shared library, which is - technically speaking - -effectively a regular LAMMPS executable that is missing the `main()` -function. Thus those libraries need not to be specified when linking -the calling executable. Only the *-I* flags are needed. So the -example case from above of the serial version static LAMMPS library -with the POEMS package installed becomes: +When linking to LAMMPS built as a shared library, the situation becomes +much simpler, as all dependent libraries and objects are either included +in the shared library or registered as a dependent library in the shared +library file. Thus those libraries need not to be specified when +linking the calling executable. Only the *-I* flags are needed. So the +example case from above of the serial version static LAMMPS library with +the POEMS package installed becomes: *CMake build*\ : @@ -155,19 +164,19 @@ build process are the same as for the static library. *Traditional make*\ : The commands with a shared LAMMPS library compiled with the -traditional make build using "make mode=shlib serial" becomes: +traditional make build using "make mode=shared serial" becomes: .. code-block:: bash gcc -c -O -I${HOME}/lammps/src/STUBS -I${HOME}/lammps/src -caller.c - g++ -o caller caller.o -L${HOME}/lammps/src -llammps + g++ -o caller caller.o -L${HOME}/lammps/src -llammps_serial *Locating liblammps.so at runtime*\ : -However, now the `liblammps.so` file is required at runtime and needs +However, now the ``liblammps.so`` file is required at runtime and needs to be in a folder, where the shared linker program of the operating -system can find it. This would be either a folder like "/usr/local/lib64" -or "${HOME}/.local/lib64" or a folder pointed to by the LD_LIBRARY_PATH +system can find it. This would be either a folder like ``/usr/local/lib64`` +or ``${HOME}/.local/lib64`` or a folder pointed to by the ``LD_LIBRARY_PATH`` environment variable. You can type .. code-block:: bash @@ -177,11 +186,11 @@ environment variable. You can type to see what directories are in that list. Or you can add the LAMMPS src directory (or the directory you performed -a CMake style build in) to your LD_LIBRARY_PATH, so that the current +a CMake style build in) to your ``LD_LIBRARY_PATH``, so that the current version of the shared library is always available to programs that use it. For the Bourne or Korn shells (/bin/sh, /bin/ksh, /bin/bash etc.), you -would add something like this to your ~/.profile file: +would add something like this to your ``${HOME}/.profile`` file: .. code-block:: bash @@ -189,14 +198,14 @@ would add something like this to your ~/.profile file: export LD_LIBRARY_PATH For the csh or tcsh shells, you would equivalently add something like this -to your ~/.cshrc file: +to your ``${HOME}/.cshrc`` file: .. code-block:: csh setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${HOME}/lammps/src You can verify whether all required shared libraries are found with the -`ldd` tool. Example: +``ldd`` tool. Example: .. code-block:: bash @@ -229,20 +238,20 @@ If a required library is missing, you would get a 'not found' entry: Either flavor of library (static or shared) allows one or more LAMMPS objects to be instantiated from the calling program. When used from a C++ program, most of the symbols and functions in LAMMPS are wrapped -in a LAMMPS_NS namespace; you can safely use any of its classes and +in a ``LAMMPS_NS`` namespace; you can safely use any of its classes and methods from within the calling code, as needed, and you will not incur conflicts with functions and variables in your code that share the name. This, however, does not extend to all additional libraries bundled with LAMMPS in the lib folder and some of the low-level code of some packages. To be compatible with C, Fortran, Python programs, the library has a simple -C-style interface, provided in src/library.cpp and src/library.h. +C-style interface, provided in ``src/library.cpp`` and ``src/library.h``. See the :doc:`Python library ` doc page for a description of the Python interface to LAMMPS, which wraps the C-style interface from a shared library through the `ctypes python module `_. -See the sample codes in examples/COUPLE/simple for examples of C++ and +See the sample codes in ``examples/COUPLE/simple`` for examples of C++ and C and Fortran codes that invoke LAMMPS through its library interface. Other examples in the COUPLE directory use coupling ideas discussed on the :doc:`Howto couple ` doc page. From a585142de042d45d512e942279a2ea3f3207bb34 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 9 Apr 2020 17:18:29 -0400 Subject: [PATCH 09/39] update makefiles in src/MAKE/MACHINES --- .../Makefile.aarch64_arm_openmpi_armpl | 48 ++++--- .../Makefile.aarch64_arm_serial_armpl | 48 ++++--- .../Makefile.aarch64_g++_openmpi_armpl | 46 ++++--- .../Makefile.aarch64_g++_serial_armpl | 48 ++++--- src/MAKE/MACHINES/Makefile.astra_arm | 46 ++++--- src/MAKE/MACHINES/Makefile.astra_gcc | 46 ++++--- src/MAKE/MACHINES/Makefile.beacon | 42 +++--- src/MAKE/MACHINES/Makefile.bgl | 52 ++++---- src/MAKE/MACHINES/Makefile.bgq | 30 ++--- src/MAKE/MACHINES/Makefile.chama | 56 ++++---- src/MAKE/MACHINES/Makefile.cori2 | 40 +++--- src/MAKE/MACHINES/Makefile.cygwin | 52 ++++---- src/MAKE/MACHINES/Makefile.glory | 52 ++++---- src/MAKE/MACHINES/Makefile.icex | 50 ++++---- src/MAKE/MACHINES/Makefile.jaguar | 46 ++++--- src/MAKE/MACHINES/Makefile.lassen_kokkos | 46 ++++--- src/MAKE/MACHINES/Makefile.mac | 54 ++++---- src/MAKE/MACHINES/Makefile.mac_mpi | 48 ++++--- src/MAKE/MACHINES/Makefile.mingw32-cross | 42 +++--- src/MAKE/MACHINES/Makefile.mingw32-cross-mpi | 42 +++--- src/MAKE/MACHINES/Makefile.mingw64-cross | 40 +++--- src/MAKE/MACHINES/Makefile.mingw64-cross-mpi | 42 +++--- src/MAKE/MACHINES/Makefile.myrinet | 48 ++++--- src/MAKE/MACHINES/Makefile.power | 46 ++++--- src/MAKE/MACHINES/Makefile.redsky | 52 ++++---- src/MAKE/MACHINES/Makefile.serial | 120 ------------------ src/MAKE/MACHINES/Makefile.stampede | 40 +++--- src/MAKE/MACHINES/Makefile.storm | 52 ++++---- src/MAKE/MACHINES/Makefile.tacc | 55 ++++---- src/MAKE/MACHINES/Makefile.theta | 36 +++--- src/MAKE/MACHINES/Makefile.ubuntu | 40 +++--- src/MAKE/MACHINES/Makefile.ubuntu_simple | 50 ++++---- src/MAKE/MACHINES/Makefile.white | 54 ++++---- src/MAKE/MACHINES/Makefile.xe6 | 52 ++++---- src/MAKE/MACHINES/Makefile.xt3 | 52 ++++---- src/MAKE/MACHINES/Makefile.xt5 | 52 ++++---- ...{Makefile.bgq.details => bgq.make.details} | 14 +- src/MAKE/Makefile.mpi | 4 +- src/MAKE/Makefile.serial | 8 +- 39 files changed, 803 insertions(+), 988 deletions(-) delete mode 100644 src/MAKE/MACHINES/Makefile.serial rename src/MAKE/MACHINES/{Makefile.bgq.details => bgq.make.details} (93%) diff --git a/src/MAKE/MACHINES/Makefile.aarch64_arm_openmpi_armpl b/src/MAKE/MACHINES/Makefile.aarch64_arm_openmpi_armpl index 9f29e9a87e..cffdcf9b30 100644 --- a/src/MAKE/MACHINES/Makefile.aarch64_arm_openmpi_armpl +++ b/src/MAKE/MACHINES/Makefile.aarch64_arm_openmpi_armpl @@ -1,4 +1,4 @@ -# g++_openmpi = OpenMPI with compiler set to GNU g++ +# aarch64_arm_openmpi_armpl = OpenMPI with compiler set to GNU g++ on 64-bit ARM SHELL = /bin/sh @@ -27,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -45,7 +45,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -56,22 +56,22 @@ FFT_PATH = -L$(ARMPL_LIBRARIES) FFT_LIB = -larmpl_lp64 # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.aarch64_arm_serial_armpl b/src/MAKE/MACHINES/Makefile.aarch64_arm_serial_armpl index 6397118357..eed872e565 100644 --- a/src/MAKE/MACHINES/Makefile.aarch64_arm_serial_armpl +++ b/src/MAKE/MACHINES/Makefile.aarch64_arm_serial_armpl @@ -1,4 +1,4 @@ -# arm_serial = Arm armclang compiler, no MPI +# aarch64_arm_serial_armpl = ARM 64-bit, armclang compiler, no MPI SHELL = /bin/sh @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,7 +44,7 @@ MPI_PATH = -L../STUBS MPI_LIB = -lmpi_stubs # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -55,22 +55,22 @@ FFT_PATH = -L$(ARMPL_LIBRARIES) FFT_LIB = -larmpl_lp64 # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.aarch64_g++_openmpi_armpl b/src/MAKE/MACHINES/Makefile.aarch64_g++_openmpi_armpl index 933c97cba4..b433755c1a 100644 --- a/src/MAKE/MACHINES/Makefile.aarch64_g++_openmpi_armpl +++ b/src/MAKE/MACHINES/Makefile.aarch64_g++_openmpi_armpl @@ -1,4 +1,4 @@ -# g++_openmpi = OpenMPI with compiler set to GNU g++ +# aarch64_g++_openmpi_armpl = ARM 64-bit using OpenMPI with compiler set to GNU g++ SHELL = /bin/sh @@ -32,7 +32,7 @@ SHLIBFLAGS = -shared LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -45,7 +45,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -56,22 +56,22 @@ FFT_PATH = -L$(ARMPL_LIBRARIES) FFT_LIB = -larmpl_lp64 # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.aarch64_g++_serial_armpl b/src/MAKE/MACHINES/Makefile.aarch64_g++_serial_armpl index e7f1a81f3b..3b148ba3d2 100644 --- a/src/MAKE/MACHINES/Makefile.aarch64_g++_serial_armpl +++ b/src/MAKE/MACHINES/Makefile.aarch64_g++_serial_armpl @@ -1,4 +1,4 @@ -# g++_serial = GNU g++ compiler, no MPI +# aarch64_g++_serial_armpl = ARM 64-bit GNU g++ compiler, no MPI SHELL = /bin/sh @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,7 +44,7 @@ MPI_PATH = -L../STUBS MPI_LIB = -lmpi_stubs # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -55,22 +55,22 @@ FFT_PATH = -L$(ARMPL_LIBRARIES) FFT_LIB = -larmpl_lp64 # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.astra_arm b/src/MAKE/MACHINES/Makefile.astra_arm index 3734208936..d66e786eac 100644 --- a/src/MAKE/MACHINES/Makefile.astra_arm +++ b/src/MAKE/MACHINES/Makefile.astra_arm @@ -1,4 +1,4 @@ -# astra_arm - ThunderX2 ARM/OpenMPI Based, use Arm-PL for FFTW +# astra_arm = ThunderX2 ARM/OpenMPI Based, use Arm-PL for FFTW # need to load the following modules: # 1) arm-based developer pack @@ -25,12 +25,12 @@ SIZE = size # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -43,7 +43,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -54,22 +54,22 @@ FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = +JPG_INC = +JPG_PATH = JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -84,28 +84,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.astra_gcc b/src/MAKE/MACHINES/Makefile.astra_gcc index 3ee43800fc..f983eafaf5 100644 --- a/src/MAKE/MACHINES/Makefile.astra_gcc +++ b/src/MAKE/MACHINES/Makefile.astra_gcc @@ -1,4 +1,4 @@ -# astra-gcc - ThunderX2 GCC/OpenMPI Based, FFTW +# astra_gcc = ThunderX2 GCC/OpenMPI Based, FFTW # need to load the following modules: # 1) arm-based developer pack @@ -25,12 +25,12 @@ SIZE = size # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -43,7 +43,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -54,22 +54,22 @@ FFT_PATH = -I${FFTW_INC} FFT_LIB = -L${FFTW_LIB} -lfftw3 # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = +JPG_INC = +JPG_PATH = JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -84,28 +84,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.beacon b/src/MAKE/MACHINES/Makefile.beacon index 522d7b1859..6c1022b011 100644 --- a/src/MAKE/MACHINES/Makefile.beacon +++ b/src/MAKE/MACHINES/Makefile.beacon @@ -1,4 +1,4 @@ -# linux = RedHat Linux box, Intel icc, MPICH2, FFTW +# beacon = RedHat Linux box, Intel icc, MPICH2, FFTW SHELL = /bin/sh @@ -27,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -45,7 +45,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -56,7 +56,7 @@ FFT_PATH = FFT_LIB = -L$(MKLROOT) -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -70,8 +70,8 @@ JPG_LIB = -ljpeg # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.bgl b/src/MAKE/MACHINES/Makefile.bgl index 4759cde1ff..4932076cd6 100644 --- a/src/MAKE/MACHINES/Makefile.bgl +++ b/src/MAKE/MACHINES/Makefile.bgl @@ -32,12 +32,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -50,33 +50,33 @@ MPI_PATH = MPI_LIB = -lmpich.rts # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -DFFT_FFTW2 -FFT_PATH = -FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -91,28 +91,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.bgq b/src/MAKE/MACHINES/Makefile.bgq index c995f41108..be2ea2dc47 100644 --- a/src/MAKE/MACHINES/Makefile.bgq +++ b/src/MAKE/MACHINES/Makefile.bgq @@ -8,7 +8,7 @@ SHELL = /bin/bash # do not edit this section # select which compiler by editing Makefile.bgq.details -include ../MAKE/MACHINES/Makefile.bgq.details +include ../MAKE/MACHINES/bgq.make.details include Makefile.package.settings include Makefile.package @@ -26,28 +26,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.chama b/src/MAKE/MACHINES/Makefile.chama index aab5bb3d22..89bd178dee 100644 --- a/src/MAKE/MACHINES/Makefile.chama +++ b/src/MAKE/MACHINES/Makefile.chama @@ -1,4 +1,4 @@ -# chama - Intel SandyBridge, mpic++, openmpi, no FFTW +# chama = Intel SandyBridge, mpic++, openmpi, no FFTW # need to load the following modules: # 1) intel/12.1 @@ -26,12 +26,12 @@ SIZE = size # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -39,38 +39,38 @@ LMP_INC = -DLAMMPS_GZIP # PATH = path for MPI library # LIB = name of MPI library -MPI_INC = -MPI_PATH = +MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 +MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -#FFT_INC = -DFFT_FFTW2 -I${FFTW_INCLUDE} -#FFT_PATH = -L${FFTW_LIB} -#FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = +JPG_INC = +JPG_PATH = JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.cori2 b/src/MAKE/MACHINES/Makefile.cori2 index 45e1ab1f8a..3c0f44e465 100644 --- a/src/MAKE/MACHINES/Makefile.cori2 +++ b/src/MAKE/MACHINES/Makefile.cori2 @@ -36,12 +36,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = #-DLAMMPS_GZIP -DLAMMPS_JPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -50,11 +50,11 @@ LMP_INC = #-DLAMMPS_GZIP -DLAMMPS_JPEG # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = +MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -65,7 +65,7 @@ FFT_PATH = FFT_LIB = -lfftw3f # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -79,8 +79,8 @@ JPG_LIB = #-ljpeg # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -93,30 +93,28 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules %.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< -%.d:%.cpp - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - # Individual dependencies depend : fastdep.exe $(SRC) diff --git a/src/MAKE/MACHINES/Makefile.cygwin b/src/MAKE/MACHINES/Makefile.cygwin index 53e94d975e..4cc9ace7bc 100644 --- a/src/MAKE/MACHINES/Makefile.cygwin +++ b/src/MAKE/MACHINES/Makefile.cygwin @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,33 +44,33 @@ MPI_PATH = -L/cygdrive/c/cygwin/mpich2-1.0.4p1/lib MPI_LIB = -lmpich # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -DFFT_FFTW2 -I/cygdrive/c/cygwin/usr/local/include -FFT_PATH = -L/cygdrive/c/cygwin/usr/local/lib -FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.glory b/src/MAKE/MACHINES/Makefile.glory index d856b1a07d..809d166432 100644 --- a/src/MAKE/MACHINES/Makefile.glory +++ b/src/MAKE/MACHINES/Makefile.glory @@ -43,12 +43,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -61,33 +61,33 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -DFFT_FFTW2 -I${FFTW_INCLUDE} -FFT_PATH = -L${FFTW_LIB} -FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -102,28 +102,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.icex b/src/MAKE/MACHINES/Makefile.icex index ceeec48870..df3f7ffb2e 100644 --- a/src/MAKE/MACHINES/Makefile.icex +++ b/src/MAKE/MACHINES/Makefile.icex @@ -1,4 +1,4 @@ -# mpi = MPI with its default compiler +# icex = unknown 64-bit x86_64 machine SHELL = /bin/sh @@ -26,14 +26,14 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP #LMP_INC += -DLAMMPS_JPEG LMP_INC += -DLAMMPS_MEMALIGN=64 # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -42,37 +42,37 @@ LMP_INC += -DLAMMPS_MEMALIGN=64 # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -87,18 +87,22 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules diff --git a/src/MAKE/MACHINES/Makefile.jaguar b/src/MAKE/MACHINES/Makefile.jaguar index 7f2ce560df..ee83b87120 100644 --- a/src/MAKE/MACHINES/Makefile.jaguar +++ b/src/MAKE/MACHINES/Makefile.jaguar @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP -DNODE_PARTITION # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,7 +44,7 @@ MPI_PATH = MPI_LIB = -lmpich -lpthread # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -55,22 +55,22 @@ FFT_PATH = -L$(FFTW_DIR) FFT_LIB = -lfftw3 # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.lassen_kokkos b/src/MAKE/MACHINES/Makefile.lassen_kokkos index 7484f25a4b..db993fd9e3 100644 --- a/src/MAKE/MACHINES/Makefile.lassen_kokkos +++ b/src/MAKE/MACHINES/Makefile.lassen_kokkos @@ -31,12 +31,12 @@ KOKKOS_ARCH = Power9,Volta70 # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -52,7 +52,7 @@ MPI_PATH = MPI_LIB = -L${MY_MPI_PATH}../lib -lmpi_ibm # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -63,22 +63,22 @@ FFT_PATH = FFT_LIB = -lcufft # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -93,28 +93,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.mac b/src/MAKE/MACHINES/Makefile.mac index d38ec202db..b6b84efa88 100644 --- a/src/MAKE/MACHINES/Makefile.mac +++ b/src/MAKE/MACHINES/Makefile.mac @@ -1,4 +1,4 @@ -# mac = Apple PowerBook G4 laptop, c++, no MPI, FFTW 2.1.5 +# mac = Apple PowerBook G4 laptop, c++, no MPI SHELL = /bin/sh @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,33 +44,33 @@ MPI_PATH = -L../STUBS MPI_LIB = -lmpi_stubs # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -DFFT_FFTW2 -FFT_PATH = -FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.mac_mpi b/src/MAKE/MACHINES/Makefile.mac_mpi index 3437de017b..f43fd8d971 100644 --- a/src/MAKE/MACHINES/Makefile.mac_mpi +++ b/src/MAKE/MACHINES/Makefile.mac_mpi @@ -1,4 +1,4 @@ -# mac_mpi = Apple laptop, MacPorts Open MPI 1.4.3, gcc 4.8, fftw, jpeg +# mac_mpi = Apple laptop, MacPorts Open MPI 1.4.3, gcc 4.8, jpeg SHELL = /bin/sh @@ -27,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -51,14 +51,12 @@ MPI_LIB = # PATH = path for FFT library # LIB = name of FFT library -FFTW = /usr/local - -FFT_INC = -DFFT_FFTW2 -I${FFTW}/include -FFT_PATH = -L${FFTW}/lib -FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -72,8 +70,8 @@ JPG_LIB = -ljpeg # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -88,28 +86,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.mingw32-cross b/src/MAKE/MACHINES/Makefile.mingw32-cross index 405c370574..6dce892aef 100644 --- a/src/MAKE/MACHINES/Makefile.mingw32-cross +++ b/src/MAKE/MACHINES/Makefile.mingw32-cross @@ -31,12 +31,12 @@ LIBOBJDIR = /Obj_mingw32 # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_SMALLSMALL -DLAMMPS_JPEG -DLAMMPS_PNG -DLAMMPS_XDR -DLAMMPS_GZIP -DLAMMPS_FFMPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -49,18 +49,18 @@ MPI_PATH = -L../STUBS MPI_LIB = -lmpi_mingw32 # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library FFT_INC = -FFT_PATH = +FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -74,8 +74,8 @@ JPG_LIB = -ljpeg -lpng -lz # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -90,28 +90,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.mingw32-cross-mpi b/src/MAKE/MACHINES/Makefile.mingw32-cross-mpi index ab54c6e794..acba9b1811 100644 --- a/src/MAKE/MACHINES/Makefile.mingw32-cross-mpi +++ b/src/MAKE/MACHINES/Makefile.mingw32-cross-mpi @@ -31,12 +31,12 @@ LIBOBJDIR = /Obj_mingw32-mpi # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_SMALLSMALL -DLAMMPS_JPEG -DLAMMPS_PNG -DLAMMPS_XDR -DLAMMPS_GZIP -DLAMMPS_FFMPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -49,18 +49,18 @@ MPI_PATH = -L../../tools/mingw-cross/mpich2-win32/lib MPI_LIB = -lmpi # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library FFT_INC = -FFT_PATH = +FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -74,8 +74,8 @@ JPG_LIB = -ljpeg -lpng -lz # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -90,28 +90,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.mingw64-cross b/src/MAKE/MACHINES/Makefile.mingw64-cross index 21403dc630..1e6c46c3a0 100644 --- a/src/MAKE/MACHINES/Makefile.mingw64-cross +++ b/src/MAKE/MACHINES/Makefile.mingw64-cross @@ -31,12 +31,12 @@ LIBOBJDIR = /Obj_mingw64 # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_SMALLBIG -DLAMMPS_JPEG -DLAMMPS_PNG -DLAMMPS_XDR -DLAMMPS_GZIP -DLAMMPS_FFMPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -49,7 +49,7 @@ MPI_PATH = -L../STUBS MPI_LIB = -lmpi_mingw64 # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -60,7 +60,7 @@ FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -74,8 +74,8 @@ JPG_LIB = -ljpeg -lpng -lz # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -90,28 +90,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.mingw64-cross-mpi b/src/MAKE/MACHINES/Makefile.mingw64-cross-mpi index 084b51680f..b01ee99969 100644 --- a/src/MAKE/MACHINES/Makefile.mingw64-cross-mpi +++ b/src/MAKE/MACHINES/Makefile.mingw64-cross-mpi @@ -31,12 +31,12 @@ LIBOBJDIR = /Obj_mingw64-mpi # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_SMALLBIG -DLAMMPS_JPEG -DLAMMPS_PNG -DLAMMPS_XDR -DLAMMPS_GZIP -DLAMMPS_FFMPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -49,18 +49,18 @@ MPI_PATH = -L../../tools/mingw-cross/mpich2-win64/lib MPI_LIB = -lmpi # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library FFT_INC = -FFT_PATH = +FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -74,8 +74,8 @@ JPG_LIB = -ljpeg -lpng -lz # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -90,28 +90,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.myrinet b/src/MAKE/MACHINES/Makefile.myrinet index 7cf09f30c7..f9a034ebfd 100644 --- a/src/MAKE/MACHINES/Makefile.myrinet +++ b/src/MAKE/MACHINES/Makefile.myrinet @@ -11,7 +11,7 @@ CCFLAGS = -O SHFLAGS = -fPIC DEPFLAGS = -M -LINK = G++ +LINK = g++ LINKFLAGS = -O LIB = SIZE = size @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,7 +44,7 @@ MPI_PATH = -L/opt/mpich-mx/lib -L/opt/mx/lib MPI_LIB = -lmpich -lmyriexpress # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -55,22 +55,22 @@ FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.power b/src/MAKE/MACHINES/Makefile.power index cbad7149df..bb4b4f545c 100644 --- a/src/MAKE/MACHINES/Makefile.power +++ b/src/MAKE/MACHINES/Makefile.power @@ -27,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -45,7 +45,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -56,22 +56,22 @@ FFT_PATH = -L/scr/oppe/LAMMPS/fftw-2.1.5/lib FFT_LIB = -lfftw # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.redsky b/src/MAKE/MACHINES/Makefile.redsky index 8e943bbb78..76e21d4f17 100644 --- a/src/MAKE/MACHINES/Makefile.redsky +++ b/src/MAKE/MACHINES/Makefile.redsky @@ -46,12 +46,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -64,33 +64,33 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -#FFT_INC = -DFFT_FFTW2 -I${FFTW_INCLUDE} -#FFT_PATH = -L${FFTW_LIB} -#FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -105,28 +105,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.serial b/src/MAKE/MACHINES/Makefile.serial deleted file mode 100644 index 0c4515dcd1..0000000000 --- a/src/MAKE/MACHINES/Makefile.serial +++ /dev/null @@ -1,120 +0,0 @@ -# serial = RedHat Linux box, g++4, no MPI, no FFTs - -SHELL = /bin/sh - -# --------------------------------------------------------------------- -# compiler/linker settings -# specify flags and libraries needed for your compiler - -CC = g++ -CCFLAGS = -O -SHFLAGS = -fPIC -DEPFLAGS = -M - -LINK = g++ -LINKFLAGS = -O -LIB = -SIZE = size - -ARCHIVE = ar -ARFLAGS = -rc -SHLIBFLAGS = -shared - -# --------------------------------------------------------------------- -# LAMMPS-specific settings, all OPTIONAL -# specify settings for LAMMPS features you will use -# if you change any -D setting, do full re-compile after "make clean" - -# LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual - -LMP_INC = -DLAMMPS_GZIP - -# MPI library -# see discussion in Section 2.2 (step 5) of manual -# MPI wrapper compiler/linker can provide this info -# can point to dummy MPI library in src/STUBS as in Makefile.serial -# use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts -# INC = path for mpi.h, MPI compiler settings -# PATH = path for MPI library -# LIB = name of MPI library - -MPI_INC = -I../STUBS -MPI_PATH = -L../STUBS -MPI_LIB = -lmpi_stubs - -# FFT library -# see discussion in Section 2.2 (step 6) of manaul -# can be left blank to use provided KISS FFT library -# INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings -# PATH = path for FFT library -# LIB = name of FFT library - -FFT_INC = -FFT_PATH = -FFT_LIB = - -# JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual -# only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC -# INC = path(s) for jpeglib.h and/or png.h -# PATH = path(s) for JPEG library and/or PNG library -# LIB = name(s) of JPEG library and/or PNG library - -JPG_INC = -JPG_PATH = -JPG_LIB = - -# --------------------------------------------------------------------- -# build rules and dependencies -# do not edit this section - -include Makefile.package.settings -include Makefile.package - -EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) -EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) -EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) -EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) - -# Path to src files - -vpath %.cpp .. -vpath %.h .. - -# Link target - -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) - -# Library targets - -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) - -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) - -# Compilation rules - -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -# Individual dependencies - -depend : fastdep.exe $(SRC) - @./fastdep.exe $(EXTRA_INC) -- $^ > .depend || exit 1 - -fastdep.exe: ../DEPEND/fastdep.c - cc -O -o $@ $< - -sinclude .depend diff --git a/src/MAKE/MACHINES/Makefile.stampede b/src/MAKE/MACHINES/Makefile.stampede index ecd0810d1d..8eb6e8d15a 100644 --- a/src/MAKE/MACHINES/Makefile.stampede +++ b/src/MAKE/MACHINES/Makefile.stampede @@ -27,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -45,7 +45,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -56,7 +56,7 @@ FFT_PATH = FFT_LIB = -L$(TACC_MKL_LIB) -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -70,12 +70,14 @@ JPG_LIB = -ljpeg # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) +EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) # Path to src files @@ -84,30 +86,28 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules %.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< -%.d:%.cpp - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - # Individual dependencies depend : fastdep.exe $(SRC) diff --git a/src/MAKE/MACHINES/Makefile.storm b/src/MAKE/MACHINES/Makefile.storm index e5e379e5ce..999c49e686 100644 --- a/src/MAKE/MACHINES/Makefile.storm +++ b/src/MAKE/MACHINES/Makefile.storm @@ -27,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -45,33 +45,33 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -DFFT_FFTW2 -I/projects/fftw/fftw-2.1.5/include -FFT_PATH = -FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.tacc b/src/MAKE/MACHINES/Makefile.tacc index f684c19ecf..f5d8080f4c 100644 --- a/src/MAKE/MACHINES/Makefile.tacc +++ b/src/MAKE/MACHINES/Makefile.tacc @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,36 +44,33 @@ MPI_PATH = MPI_LIB = -lmpich -lpthread # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFTW_INC = ${TACC_FFTW2_INC} -FFTW_LIB = ${TACC_FFTW2_LIB} - -FFT_INC = -DFFT_FFTW2 -I${FFTW_INC} -FFT_PATH = -L${FFTW_LIB} -FFT_LIB = ${FFTW_LIB}/libfftw.a +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -88,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.theta b/src/MAKE/MACHINES/Makefile.theta index 663f212020..084139899a 100644 --- a/src/MAKE/MACHINES/Makefile.theta +++ b/src/MAKE/MACHINES/Makefile.theta @@ -30,12 +30,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP #-DLAMMPS_JPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -48,7 +48,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -60,7 +60,7 @@ FFT_LIB = -L$(MKLROOT)/lib/intel64/ -Wl,--start-group -lmkl_intel_ilp64 \ -lmkl_intel_thread -lmkl_core -Wl,--end-group # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -80,6 +80,8 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) +EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) # Path to src files @@ -88,30 +90,28 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules %.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< -%.d:%.cpp - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - # Individual dependencies depend : fastdep.exe $(SRC) diff --git a/src/MAKE/MACHINES/Makefile.ubuntu b/src/MAKE/MACHINES/Makefile.ubuntu index f274780f8e..1821a1af7c 100644 --- a/src/MAKE/MACHINES/Makefile.ubuntu +++ b/src/MAKE/MACHINES/Makefile.ubuntu @@ -30,12 +30,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG -DLAMMPS_PNG -DLAMMPS_FFMPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -48,7 +48,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -59,7 +59,7 @@ FFT_PATH = FFT_LIB = -lfftw3 # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -73,8 +73,8 @@ JPG_LIB = -ljpeg -lpng # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -89,28 +89,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.ubuntu_simple b/src/MAKE/MACHINES/Makefile.ubuntu_simple index d4ac53a145..7dda5a95f4 100644 --- a/src/MAKE/MACHINES/Makefile.ubuntu_simple +++ b/src/MAKE/MACHINES/Makefile.ubuntu_simple @@ -29,12 +29,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -42,38 +42,38 @@ LMP_INC = -DLAMMPS_GZIP # PATH = path for MPI library # LIB = name of MPI library -MPI_INC = -MPI_PATH = +MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 +MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library FFT_INC = -FFT_PATH = +FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = +JPG_INC = +JPG_PATH = JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -88,28 +88,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.white b/src/MAKE/MACHINES/Makefile.white index 42daf850f3..6704f865a4 100644 --- a/src/MAKE/MACHINES/Makefile.white +++ b/src/MAKE/MACHINES/Makefile.white @@ -1,4 +1,4 @@ -# kokkos_cuda = KOKKOS/CUDA package, OpenMPI with nvcc compiler, Kepler GPU +# white = KOKKOS/CUDA package, OpenMPI with nvcc compiler, Pascal GPU, Power8 CPU SHELL = /bin/sh @@ -30,12 +30,12 @@ KOKKOS_ARCH = Pascal60,Power8 # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -48,33 +48,33 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -89,28 +89,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.xe6 b/src/MAKE/MACHINES/Makefile.xe6 index 6b8b9595bf..326fde4a8c 100644 --- a/src/MAKE/MACHINES/Makefile.xe6 +++ b/src/MAKE/MACHINES/Makefile.xe6 @@ -27,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -45,33 +45,33 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -DFFT_FFTW2 -FFT_PATH = -FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.xt3 b/src/MAKE/MACHINES/Makefile.xt3 index 615bad3611..68ba20dcbe 100644 --- a/src/MAKE/MACHINES/Makefile.xt3 +++ b/src/MAKE/MACHINES/Makefile.xt3 @@ -28,12 +28,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP -DLAMMPS_XDR # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -46,33 +46,33 @@ MPI_PATH = MPI_LIB = -lmpich -lpthread # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -DFFT_FFTW2 -I$(FFTW_INC) -FFT_PATH = -L$(FFTW_LIB) -FFT_LIB = -ldfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -87,28 +87,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.xt5 b/src/MAKE/MACHINES/Makefile.xt5 index 2552a7060a..fba4991163 100644 --- a/src/MAKE/MACHINES/Makefile.xt5 +++ b/src/MAKE/MACHINES/Makefile.xt5 @@ -27,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -45,33 +45,33 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -DFFT_FFTW2 -I/home/sjplimp/fftw/fftw -FFT_PATH = -L/home/sjplimp/fftw/fftw/.libs -FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.bgq.details b/src/MAKE/MACHINES/bgq.make.details similarity index 93% rename from src/MAKE/MACHINES/Makefile.bgq.details rename to src/MAKE/MACHINES/bgq.make.details index be20b43880..0febd69d26 100644 --- a/src/MAKE/MACHINES/Makefile.bgq.details +++ b/src/MAKE/MACHINES/bgq.make.details @@ -74,12 +74,12 @@ SHLIBFLAGS = # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -95,7 +95,7 @@ MPI_INC += -DMPICH_SKIP_MPICXX MPI_LIB += #/home/jhammond/OSPRI/branches/marpn/wrap/libmpiarbrpn.a # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -106,15 +106,15 @@ FFT_PATH = #/soft/libraries/alcf/current/xl/FFTW2 FFT_LIB = -L/soft/libraries/alcf/current/xl/FFTW2/lib -ldfftw # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = depend : fastdep.exe $(SRC) @./fastdep.exe $(EXTRA_INC) -- $^ > .depend || exit 1 diff --git a/src/MAKE/Makefile.mpi b/src/MAKE/Makefile.mpi index fba9789724..c720ac49b5 100644 --- a/src/MAKE/Makefile.mpi +++ b/src/MAKE/Makefile.mpi @@ -44,7 +44,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -55,7 +55,7 @@ FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library diff --git a/src/MAKE/Makefile.serial b/src/MAKE/Makefile.serial index ee07041bf4..ef370264ed 100644 --- a/src/MAKE/Makefile.serial +++ b/src/MAKE/Makefile.serial @@ -44,7 +44,7 @@ MPI_PATH = -L../STUBS MPI_LIB = -lmpi_stubs # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -55,7 +55,7 @@ FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -69,8 +69,8 @@ JPG_LIB = # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) From fc3011c1b2abeff551818da830bbb1f491ca9567 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 9 Apr 2020 17:59:42 -0400 Subject: [PATCH 10/39] complete adapting makefiles and add a minor simplification tweak --- doc/src/Python_shlib.rst | 2 + .../Makefile.aarch64_arm_openmpi_armpl | 2 +- .../Makefile.aarch64_arm_serial_armpl | 2 +- .../Makefile.aarch64_g++_openmpi_armpl | 2 +- .../Makefile.aarch64_g++_serial_armpl | 2 +- src/MAKE/MACHINES/Makefile.astra_arm | 2 +- src/MAKE/MACHINES/Makefile.astra_gcc | 2 +- src/MAKE/MACHINES/Makefile.beacon | 2 +- src/MAKE/MACHINES/Makefile.bgl | 2 +- src/MAKE/MACHINES/Makefile.bgq | 2 +- src/MAKE/MACHINES/Makefile.chama | 2 +- src/MAKE/MACHINES/Makefile.cori2 | 2 +- src/MAKE/MACHINES/Makefile.cygwin | 2 +- src/MAKE/MACHINES/Makefile.glory | 2 +- src/MAKE/MACHINES/Makefile.icex | 2 +- src/MAKE/MACHINES/Makefile.jaguar | 2 +- src/MAKE/MACHINES/Makefile.lassen_kokkos | 2 +- src/MAKE/MACHINES/Makefile.mac | 2 +- src/MAKE/MACHINES/Makefile.mac_mpi | 2 +- src/MAKE/MACHINES/Makefile.mingw32-cross | 2 +- src/MAKE/MACHINES/Makefile.mingw32-cross-mpi | 2 +- src/MAKE/MACHINES/Makefile.mingw64-cross | 2 +- src/MAKE/MACHINES/Makefile.mingw64-cross-mpi | 2 +- src/MAKE/MACHINES/Makefile.myrinet | 2 +- src/MAKE/MACHINES/Makefile.power | 2 +- src/MAKE/MACHINES/Makefile.redsky | 2 +- src/MAKE/MACHINES/Makefile.stampede | 2 +- src/MAKE/MACHINES/Makefile.storm | 2 +- src/MAKE/MACHINES/Makefile.tacc | 2 +- src/MAKE/MACHINES/Makefile.theta | 2 +- src/MAKE/MACHINES/Makefile.ubuntu | 2 +- src/MAKE/MACHINES/Makefile.ubuntu_simple | 2 +- src/MAKE/MACHINES/Makefile.white | 2 +- src/MAKE/MACHINES/Makefile.xe6 | 2 +- src/MAKE/MACHINES/Makefile.xt3 | 2 +- src/MAKE/MACHINES/Makefile.xt5 | 2 +- src/MAKE/Makefile.mpi | 2 +- src/MAKE/Makefile.serial | 2 +- src/MAKE/OPTIONS/Makefile.big | 56 ++++++++------- src/MAKE/OPTIONS/Makefile.fftw | 50 +++++++------- src/MAKE/OPTIONS/Makefile.g++_mpich | 56 ++++++++------- src/MAKE/OPTIONS/Makefile.g++_mpich_link | 52 +++++++------- src/MAKE/OPTIONS/Makefile.g++_openmpi | 56 ++++++++------- src/MAKE/OPTIONS/Makefile.g++_openmpi_link | 52 +++++++------- src/MAKE/OPTIONS/Makefile.g++_serial | 52 +++++++------- src/MAKE/OPTIONS/Makefile.gpu | 56 ++++++++------- src/MAKE/OPTIONS/Makefile.icc_mpich | 56 ++++++++------- src/MAKE/OPTIONS/Makefile.icc_mpich_link | 52 +++++++------- src/MAKE/OPTIONS/Makefile.icc_openmpi | 56 ++++++++------- src/MAKE/OPTIONS/Makefile.icc_openmpi_link | 52 +++++++------- src/MAKE/OPTIONS/Makefile.icc_serial | 52 +++++++------- src/MAKE/OPTIONS/Makefile.intel_coprocessor | 44 ++++++------ src/MAKE/OPTIONS/Makefile.intel_cpu | 44 ++++++------ src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi | 46 ++++++------- src/MAKE/OPTIONS/Makefile.intel_cpu_mpich | 38 +++++----- src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi | 46 ++++++------- src/MAKE/OPTIONS/Makefile.jpeg | 50 +++++++------- src/MAKE/OPTIONS/Makefile.knl | 42 +++++------ src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi | 48 +++++++------ src/MAKE/OPTIONS/Makefile.kokkos_mpi_only | 56 ++++++++------- src/MAKE/OPTIONS/Makefile.kokkos_omp | 56 ++++++++------- src/MAKE/OPTIONS/Makefile.kokkos_phi | 69 +++++++++---------- src/MAKE/OPTIONS/Makefile.mgptfast | 56 ++++++++------- src/MAKE/OPTIONS/Makefile.omp | 56 ++++++++------- src/MAKE/OPTIONS/Makefile.opt | 56 ++++++++------- src/MAKE/OPTIONS/Makefile.pgi_mpich_link | 52 +++++++------- src/MAKE/OPTIONS/Makefile.png | 44 ++++++------ src/Makefile | 4 +- 68 files changed, 762 insertions(+), 819 deletions(-) diff --git a/doc/src/Python_shlib.rst b/doc/src/Python_shlib.rst index 0c86362e12..87820f4771 100644 --- a/doc/src/Python_shlib.rst +++ b/doc/src/Python_shlib.rst @@ -1,6 +1,8 @@ Build LAMMPS as a shared library ================================ +.. TODO this is mostly redundant and should be addressed in the 'progguide' branch if it has not already + Build LAMMPS as a shared library using make ------------------------------------------- diff --git a/src/MAKE/MACHINES/Makefile.aarch64_arm_openmpi_armpl b/src/MAKE/MACHINES/Makefile.aarch64_arm_openmpi_armpl index cffdcf9b30..07dedba32a 100644 --- a/src/MAKE/MACHINES/Makefile.aarch64_arm_openmpi_armpl +++ b/src/MAKE/MACHINES/Makefile.aarch64_arm_openmpi_armpl @@ -86,7 +86,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.aarch64_arm_serial_armpl b/src/MAKE/MACHINES/Makefile.aarch64_arm_serial_armpl index eed872e565..d415f69397 100644 --- a/src/MAKE/MACHINES/Makefile.aarch64_arm_serial_armpl +++ b/src/MAKE/MACHINES/Makefile.aarch64_arm_serial_armpl @@ -85,7 +85,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.aarch64_g++_openmpi_armpl b/src/MAKE/MACHINES/Makefile.aarch64_g++_openmpi_armpl index b433755c1a..b75d9ee06a 100644 --- a/src/MAKE/MACHINES/Makefile.aarch64_g++_openmpi_armpl +++ b/src/MAKE/MACHINES/Makefile.aarch64_g++_openmpi_armpl @@ -86,7 +86,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.aarch64_g++_serial_armpl b/src/MAKE/MACHINES/Makefile.aarch64_g++_serial_armpl index 3b148ba3d2..73cd0d6bed 100644 --- a/src/MAKE/MACHINES/Makefile.aarch64_g++_serial_armpl +++ b/src/MAKE/MACHINES/Makefile.aarch64_g++_serial_armpl @@ -85,7 +85,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.astra_arm b/src/MAKE/MACHINES/Makefile.astra_arm index d66e786eac..3ea3e00935 100644 --- a/src/MAKE/MACHINES/Makefile.astra_arm +++ b/src/MAKE/MACHINES/Makefile.astra_arm @@ -84,7 +84,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.astra_gcc b/src/MAKE/MACHINES/Makefile.astra_gcc index f983eafaf5..d607fbec84 100644 --- a/src/MAKE/MACHINES/Makefile.astra_gcc +++ b/src/MAKE/MACHINES/Makefile.astra_gcc @@ -84,7 +84,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.beacon b/src/MAKE/MACHINES/Makefile.beacon index 6c1022b011..87ef35b248 100644 --- a/src/MAKE/MACHINES/Makefile.beacon +++ b/src/MAKE/MACHINES/Makefile.beacon @@ -86,7 +86,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.bgl b/src/MAKE/MACHINES/Makefile.bgl index 4932076cd6..06d243e83a 100644 --- a/src/MAKE/MACHINES/Makefile.bgl +++ b/src/MAKE/MACHINES/Makefile.bgl @@ -91,7 +91,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.bgq b/src/MAKE/MACHINES/Makefile.bgq index be2ea2dc47..3d8ea41f5f 100644 --- a/src/MAKE/MACHINES/Makefile.bgq +++ b/src/MAKE/MACHINES/Makefile.bgq @@ -26,7 +26,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.chama b/src/MAKE/MACHINES/Makefile.chama index 89bd178dee..a8a9cebfdb 100644 --- a/src/MAKE/MACHINES/Makefile.chama +++ b/src/MAKE/MACHINES/Makefile.chama @@ -85,7 +85,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.cori2 b/src/MAKE/MACHINES/Makefile.cori2 index 3c0f44e465..86d38d7726 100644 --- a/src/MAKE/MACHINES/Makefile.cori2 +++ b/src/MAKE/MACHINES/Makefile.cori2 @@ -93,7 +93,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.cygwin b/src/MAKE/MACHINES/Makefile.cygwin index 4cc9ace7bc..5cd6e79b69 100644 --- a/src/MAKE/MACHINES/Makefile.cygwin +++ b/src/MAKE/MACHINES/Makefile.cygwin @@ -85,7 +85,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.glory b/src/MAKE/MACHINES/Makefile.glory index 809d166432..a128f88515 100644 --- a/src/MAKE/MACHINES/Makefile.glory +++ b/src/MAKE/MACHINES/Makefile.glory @@ -102,7 +102,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.icex b/src/MAKE/MACHINES/Makefile.icex index df3f7ffb2e..6c3db3fb43 100644 --- a/src/MAKE/MACHINES/Makefile.icex +++ b/src/MAKE/MACHINES/Makefile.icex @@ -87,7 +87,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.jaguar b/src/MAKE/MACHINES/Makefile.jaguar index ee83b87120..4a78205c61 100644 --- a/src/MAKE/MACHINES/Makefile.jaguar +++ b/src/MAKE/MACHINES/Makefile.jaguar @@ -85,7 +85,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.lassen_kokkos b/src/MAKE/MACHINES/Makefile.lassen_kokkos index db993fd9e3..982d53933e 100644 --- a/src/MAKE/MACHINES/Makefile.lassen_kokkos +++ b/src/MAKE/MACHINES/Makefile.lassen_kokkos @@ -93,7 +93,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.mac b/src/MAKE/MACHINES/Makefile.mac index b6b84efa88..1bbd805c65 100644 --- a/src/MAKE/MACHINES/Makefile.mac +++ b/src/MAKE/MACHINES/Makefile.mac @@ -85,7 +85,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.mac_mpi b/src/MAKE/MACHINES/Makefile.mac_mpi index f43fd8d971..7c4fa6aa6d 100644 --- a/src/MAKE/MACHINES/Makefile.mac_mpi +++ b/src/MAKE/MACHINES/Makefile.mac_mpi @@ -86,7 +86,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.mingw32-cross b/src/MAKE/MACHINES/Makefile.mingw32-cross index 6dce892aef..c463d7df26 100644 --- a/src/MAKE/MACHINES/Makefile.mingw32-cross +++ b/src/MAKE/MACHINES/Makefile.mingw32-cross @@ -90,7 +90,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.mingw32-cross-mpi b/src/MAKE/MACHINES/Makefile.mingw32-cross-mpi index acba9b1811..7badd3bb79 100644 --- a/src/MAKE/MACHINES/Makefile.mingw32-cross-mpi +++ b/src/MAKE/MACHINES/Makefile.mingw32-cross-mpi @@ -90,7 +90,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.mingw64-cross b/src/MAKE/MACHINES/Makefile.mingw64-cross index 1e6c46c3a0..66de4dedaf 100644 --- a/src/MAKE/MACHINES/Makefile.mingw64-cross +++ b/src/MAKE/MACHINES/Makefile.mingw64-cross @@ -90,7 +90,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.mingw64-cross-mpi b/src/MAKE/MACHINES/Makefile.mingw64-cross-mpi index b01ee99969..40c52b6a73 100644 --- a/src/MAKE/MACHINES/Makefile.mingw64-cross-mpi +++ b/src/MAKE/MACHINES/Makefile.mingw64-cross-mpi @@ -90,7 +90,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.myrinet b/src/MAKE/MACHINES/Makefile.myrinet index f9a034ebfd..82030fbeae 100644 --- a/src/MAKE/MACHINES/Makefile.myrinet +++ b/src/MAKE/MACHINES/Makefile.myrinet @@ -85,7 +85,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.power b/src/MAKE/MACHINES/Makefile.power index bb4b4f545c..d4d0f67fa5 100644 --- a/src/MAKE/MACHINES/Makefile.power +++ b/src/MAKE/MACHINES/Makefile.power @@ -86,7 +86,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.redsky b/src/MAKE/MACHINES/Makefile.redsky index 76e21d4f17..461139e2e9 100644 --- a/src/MAKE/MACHINES/Makefile.redsky +++ b/src/MAKE/MACHINES/Makefile.redsky @@ -105,7 +105,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.stampede b/src/MAKE/MACHINES/Makefile.stampede index 8eb6e8d15a..5966907d44 100644 --- a/src/MAKE/MACHINES/Makefile.stampede +++ b/src/MAKE/MACHINES/Makefile.stampede @@ -86,7 +86,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.storm b/src/MAKE/MACHINES/Makefile.storm index 999c49e686..3178d840e9 100644 --- a/src/MAKE/MACHINES/Makefile.storm +++ b/src/MAKE/MACHINES/Makefile.storm @@ -86,7 +86,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.tacc b/src/MAKE/MACHINES/Makefile.tacc index f5d8080f4c..2cf263a8db 100644 --- a/src/MAKE/MACHINES/Makefile.tacc +++ b/src/MAKE/MACHINES/Makefile.tacc @@ -85,7 +85,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.theta b/src/MAKE/MACHINES/Makefile.theta index 084139899a..52f8260711 100644 --- a/src/MAKE/MACHINES/Makefile.theta +++ b/src/MAKE/MACHINES/Makefile.theta @@ -90,7 +90,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.ubuntu b/src/MAKE/MACHINES/Makefile.ubuntu index 1821a1af7c..2764f457a7 100644 --- a/src/MAKE/MACHINES/Makefile.ubuntu +++ b/src/MAKE/MACHINES/Makefile.ubuntu @@ -89,7 +89,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.ubuntu_simple b/src/MAKE/MACHINES/Makefile.ubuntu_simple index 7dda5a95f4..e162830ec5 100644 --- a/src/MAKE/MACHINES/Makefile.ubuntu_simple +++ b/src/MAKE/MACHINES/Makefile.ubuntu_simple @@ -88,7 +88,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.white b/src/MAKE/MACHINES/Makefile.white index 6704f865a4..b07e14a30e 100644 --- a/src/MAKE/MACHINES/Makefile.white +++ b/src/MAKE/MACHINES/Makefile.white @@ -89,7 +89,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.xe6 b/src/MAKE/MACHINES/Makefile.xe6 index 326fde4a8c..0971965bbf 100644 --- a/src/MAKE/MACHINES/Makefile.xe6 +++ b/src/MAKE/MACHINES/Makefile.xe6 @@ -86,7 +86,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.xt3 b/src/MAKE/MACHINES/Makefile.xt3 index 68ba20dcbe..5752e61692 100644 --- a/src/MAKE/MACHINES/Makefile.xt3 +++ b/src/MAKE/MACHINES/Makefile.xt3 @@ -87,7 +87,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/MACHINES/Makefile.xt5 b/src/MAKE/MACHINES/Makefile.xt5 index fba4991163..9c4cbe6ee6 100644 --- a/src/MAKE/MACHINES/Makefile.xt5 +++ b/src/MAKE/MACHINES/Makefile.xt5 @@ -86,7 +86,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/Makefile.mpi b/src/MAKE/Makefile.mpi index c720ac49b5..b79cfbb3fd 100644 --- a/src/MAKE/Makefile.mpi +++ b/src/MAKE/Makefile.mpi @@ -85,7 +85,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/Makefile.serial b/src/MAKE/Makefile.serial index ef370264ed..01a160df33 100644 --- a/src/MAKE/Makefile.serial +++ b/src/MAKE/Makefile.serial @@ -85,7 +85,7 @@ vpath %.h .. # Link target -../$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ $(SIZE) $@ diff --git a/src/MAKE/OPTIONS/Makefile.big b/src/MAKE/OPTIONS/Makefile.big index 59de28cad7..56b0c48249 100644 --- a/src/MAKE/OPTIONS/Makefile.big +++ b/src/MAKE/OPTIONS/Makefile.big @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP -DLAMMPS_BIGBIG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,37 +40,37 @@ LMP_INC = -DLAMMPS_GZIP -DLAMMPS_BIGBIG # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.fftw b/src/MAKE/OPTIONS/Makefile.fftw index 75c3a1b92c..1abb96f6dd 100644 --- a/src/MAKE/OPTIONS/Makefile.fftw +++ b/src/MAKE/OPTIONS/Makefile.fftw @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,11 +40,11 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -55,22 +55,22 @@ FFT_PATH = -L/usr/local/lib FFT_LIB = -lfftw3 # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.g++_mpich b/src/MAKE/OPTIONS/Makefile.g++_mpich index 83b63b9def..fa30f64f0b 100644 --- a/src/MAKE/OPTIONS/Makefile.g++_mpich +++ b/src/MAKE/OPTIONS/Makefile.g++_mpich @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,37 +40,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.g++_mpich_link b/src/MAKE/OPTIONS/Makefile.g++_mpich_link index aadbf30853..42d66b2317 100644 --- a/src/MAKE/OPTIONS/Makefile.g++_mpich_link +++ b/src/MAKE/OPTIONS/Makefile.g++_mpich_link @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,33 +44,33 @@ MPI_PATH = -L/usr/local/lib MPI_LIB = -lmpich -lmpl -lpthread # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.g++_openmpi b/src/MAKE/OPTIONS/Makefile.g++_openmpi index 835bb5d024..f52aa49ad7 100644 --- a/src/MAKE/OPTIONS/Makefile.g++_openmpi +++ b/src/MAKE/OPTIONS/Makefile.g++_openmpi @@ -27,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -41,37 +41,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.g++_openmpi_link b/src/MAKE/OPTIONS/Makefile.g++_openmpi_link index f3f565430d..0aaa8bbede 100644 --- a/src/MAKE/OPTIONS/Makefile.g++_openmpi_link +++ b/src/MAKE/OPTIONS/Makefile.g++_openmpi_link @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,33 +44,33 @@ MPI_PATH = -L/usr/local/lib MPI_LIB = -lmpi -lmpi_cxx # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.g++_serial b/src/MAKE/OPTIONS/Makefile.g++_serial index a01e4cae93..93e1c502d9 100644 --- a/src/MAKE/OPTIONS/Makefile.g++_serial +++ b/src/MAKE/OPTIONS/Makefile.g++_serial @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,33 +44,33 @@ MPI_PATH = -L../STUBS MPI_LIB = -lmpi_stubs # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.gpu b/src/MAKE/OPTIONS/Makefile.gpu index e822161c55..7cec50fbd8 100644 --- a/src/MAKE/OPTIONS/Makefile.gpu +++ b/src/MAKE/OPTIONS/Makefile.gpu @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,37 +40,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.icc_mpich b/src/MAKE/OPTIONS/Makefile.icc_mpich index e59066562a..81256f85b6 100644 --- a/src/MAKE/OPTIONS/Makefile.icc_mpich +++ b/src/MAKE/OPTIONS/Makefile.icc_mpich @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,37 +40,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.icc_mpich_link b/src/MAKE/OPTIONS/Makefile.icc_mpich_link index 0e9e530f88..5a8ae8b228 100644 --- a/src/MAKE/OPTIONS/Makefile.icc_mpich_link +++ b/src/MAKE/OPTIONS/Makefile.icc_mpich_link @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,33 +44,33 @@ MPI_PATH = -L/usr/local/lib MPI_LIB = -lmpich -lmpl -lpthread # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.icc_openmpi b/src/MAKE/OPTIONS/Makefile.icc_openmpi index 19a917e928..1ed258e717 100644 --- a/src/MAKE/OPTIONS/Makefile.icc_openmpi +++ b/src/MAKE/OPTIONS/Makefile.icc_openmpi @@ -27,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -41,37 +41,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.icc_openmpi_link b/src/MAKE/OPTIONS/Makefile.icc_openmpi_link index 5e991c6b90..33a5c529b8 100644 --- a/src/MAKE/OPTIONS/Makefile.icc_openmpi_link +++ b/src/MAKE/OPTIONS/Makefile.icc_openmpi_link @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,33 +44,33 @@ MPI_PATH = -L/usr/local/lib MPI_LIB = -lmpi -lmpi_cxx # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.icc_serial b/src/MAKE/OPTIONS/Makefile.icc_serial index 34bf091932..6880e9e2dc 100644 --- a/src/MAKE/OPTIONS/Makefile.icc_serial +++ b/src/MAKE/OPTIONS/Makefile.icc_serial @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,33 +44,33 @@ MPI_PATH = -L../STUBS MPI_LIB = -lmpi_stubs # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.intel_coprocessor b/src/MAKE/OPTIONS/Makefile.intel_coprocessor index 44f5c99f70..7964b1303e 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_coprocessor +++ b/src/MAKE/OPTIONS/Makefile.intel_coprocessor @@ -1,4 +1,4 @@ -# intel_phi = USER-INTEL package with Phi offload support, Intel MPI, MKL FFT +# intel_coprocessor = USER-INTEL package with Phi offload support, Intel MPI, MKL FFT SHELL = /bin/sh @@ -29,12 +29,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -43,11 +43,11 @@ LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = +MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -58,7 +58,7 @@ FFT_PATH = FFT_LIB = -L$(MKLROOT)/lib/intel64/ -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -72,8 +72,8 @@ JPG_LIB = -ljpeg # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -88,28 +88,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu b/src/MAKE/OPTIONS/Makefile.intel_cpu index f52b4f3029..8d887a0d7b 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu @@ -1,4 +1,4 @@ -# intel_cpu_intelmpi = USER-INTEL package, Intel MPI, MKL FFT +# intel_cpu = USER-INTEL package, Intel MPI, MKL FFT SHELL = /bin/sh @@ -30,12 +30,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,11 +44,11 @@ LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = +MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -59,7 +59,7 @@ FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -73,8 +73,8 @@ JPG_LIB = -ljpeg # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -89,28 +89,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi b/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi index 07d720a592..f085aac55a 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi @@ -30,12 +30,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -48,7 +48,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -59,22 +59,22 @@ FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -89,28 +89,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich b/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich index 51cf975e5c..7f6b687334 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich @@ -30,12 +30,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -48,7 +48,7 @@ MPI_PATH = -L/usr/local/lib MPI_LIB = -lmpich -lmpl -lpthread # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -73,8 +73,8 @@ JPG_LIB = # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -89,28 +89,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi b/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi index 342637a460..5401101546 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi @@ -31,12 +31,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -49,7 +49,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -60,22 +60,22 @@ FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -90,28 +90,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.jpeg b/src/MAKE/OPTIONS/Makefile.jpeg index f74a2eb1f7..7d4e029033 100644 --- a/src/MAKE/OPTIONS/Makefile.jpeg +++ b/src/MAKE/OPTIONS/Makefile.jpeg @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,22 +40,22 @@ LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -69,8 +69,8 @@ JPG_LIB = -ljpeg # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.knl b/src/MAKE/OPTIONS/Makefile.knl index ab1b756a67..92030fb953 100644 --- a/src/MAKE/OPTIONS/Makefile.knl +++ b/src/MAKE/OPTIONS/Makefile.knl @@ -29,12 +29,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -43,11 +43,11 @@ LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = +MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -58,7 +58,7 @@ FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -72,12 +72,14 @@ JPG_LIB = -ljpeg # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) +EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) # Path to src files @@ -86,30 +88,28 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules %.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< -%.d:%.cpp - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - # Individual dependencies depend : fastdep.exe $(SRC) diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi b/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi index ba34bc25eb..b9b262ed1d 100644 --- a/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi +++ b/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi @@ -31,7 +31,7 @@ KOKKOS_ARCH = Kepler35 # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP @@ -45,11 +45,11 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -60,22 +60,22 @@ FFT_PATH = FFT_LIB = -lcufft # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -90,28 +90,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_mpi_only b/src/MAKE/OPTIONS/Makefile.kokkos_mpi_only index 7aea2f366a..8cc4375b59 100644 --- a/src/MAKE/OPTIONS/Makefile.kokkos_mpi_only +++ b/src/MAKE/OPTIONS/Makefile.kokkos_mpi_only @@ -27,12 +27,12 @@ KOKKOS_DEVICES = Serial # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -41,37 +41,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_omp b/src/MAKE/OPTIONS/Makefile.kokkos_omp index d0e12796c0..750751b73c 100644 --- a/src/MAKE/OPTIONS/Makefile.kokkos_omp +++ b/src/MAKE/OPTIONS/Makefile.kokkos_omp @@ -27,12 +27,12 @@ KOKKOS_DEVICES = OpenMP # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -41,37 +41,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_phi b/src/MAKE/OPTIONS/Makefile.kokkos_phi index 7dc0bb091a..4e85b9e5b8 100644 --- a/src/MAKE/OPTIONS/Makefile.kokkos_phi +++ b/src/MAKE/OPTIONS/Makefile.kokkos_phi @@ -28,12 +28,12 @@ KOKKOS_ARCH = KNL # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -42,37 +42,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -87,39 +87,34 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies -#depend : fastdep.exe $(SRC) -# @./fastdep.exe $(EXTRA_INC) -- $^ > .depend || exit 1 +depend : fastdep.exe $(SRC) + @./fastdep.exe $(EXTRA_INC) -- $^ > .depend || exit 1 -#fastdep.exe: ../DEPEND/fastdep.c -# cc -O -o $@ $< +fastdep.exe: ../DEPEND/fastdep.c + cc -O -o $@ $< -#sinclude .depend - -DEPENDS = $(OBJ:.o=.d) -sinclude $(DEPENDS) \ No newline at end of file +sinclude .depend diff --git a/src/MAKE/OPTIONS/Makefile.mgptfast b/src/MAKE/OPTIONS/Makefile.mgptfast index ed27993706..6baae1e2ee 100644 --- a/src/MAKE/OPTIONS/Makefile.mgptfast +++ b/src/MAKE/OPTIONS/Makefile.mgptfast @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,37 +40,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.omp b/src/MAKE/OPTIONS/Makefile.omp index fd485d5416..80afad79ae 100644 --- a/src/MAKE/OPTIONS/Makefile.omp +++ b/src/MAKE/OPTIONS/Makefile.omp @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,37 +40,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.opt b/src/MAKE/OPTIONS/Makefile.opt index 29903565dc..662f25eee6 100644 --- a/src/MAKE/OPTIONS/Makefile.opt +++ b/src/MAKE/OPTIONS/Makefile.opt @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,37 +40,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.pgi_mpich_link b/src/MAKE/OPTIONS/Makefile.pgi_mpich_link index 444a2ffc12..57101c55ae 100644 --- a/src/MAKE/OPTIONS/Makefile.pgi_mpich_link +++ b/src/MAKE/OPTIONS/Makefile.pgi_mpich_link @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,33 +44,33 @@ MPI_PATH = -L/usr/local/mpich-1.2.6/pg/lib MPI_LIB = -lmpich # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.png b/src/MAKE/OPTIONS/Makefile.png index 34b54dfb93..442dddeb66 100644 --- a/src/MAKE/OPTIONS/Makefile.png +++ b/src/MAKE/OPTIONS/Makefile.png @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP -DLAMMPS_PNG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,11 +40,11 @@ LMP_INC = -DLAMMPS_GZIP -DLAMMPS_PNG # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -55,7 +55,7 @@ FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -69,8 +69,8 @@ JPG_LIB = -lpng # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,26 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/Makefile b/src/Makefile index d111636ee3..a78068e092 100644 --- a/src/Makefile +++ b/src/Makefile @@ -217,14 +217,14 @@ ifeq ($(mode),static) @cd $(objdir); \ $(MAKE) $(MFLAGS) "OBJ = $(OBJLIB)" "INC = $(INC)" "SHFLAGS =" \ "LMPLIB = $(ARLIB)" "ARLIB = $(ARLIB)" "SHLIB = $(SHLIB)" \ - "LMPLINK = $(LMPLINK)" "EXE = $(EXE)" ../$(EXE) + "LMPLINK = $(LMPLINK)" "EXE = ../$(EXE)" ../$(EXE) @ln -s $(ARLIB) $(ARLINK) endif ifeq ($(mode),shared) @cd $(objdir); \ $(MAKE) $(MFLAGS) "OBJ = $(OBJLIB)" "INC = $(INC)" \ "LMPLIB = $(SHLIB)" "ARLIB = $(ARLIB)" "SHLIB = $(SHLIB)" \ - "LMPLINK = $(LMPLINK)" "EXE = $(EXE)" ../$(EXE) + "LMPLINK = $(LMPLINK)" "EXE = ../$(EXE)" ../$(EXE) @ln -s $(SHLIB) $(SHLINK) endif # backward compatibility From bca64306ed525d884d1e5408daae6ba0f0a44a5b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 9 Apr 2020 18:06:05 -0400 Subject: [PATCH 11/39] avoid spellchecker issue --- doc/src/Build_basics.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/Build_basics.rst b/doc/src/Build_basics.rst index 8a81836614..692c779438 100644 --- a/doc/src/Build_basics.rst +++ b/doc/src/Build_basics.rst @@ -57,7 +57,7 @@ The build with traditional makefiles has to be done inside the source folder ``s Any ``make machine`` command will look up the make settings from a file ``Makefile.machine`` in the folder ``src/MAKE`` or one of its -subdirectories ``MINE``, ``MACHINES``, or ``OPTIONS``, create a folder +sub-directories ``MINE``, ``MACHINES``, or ``OPTIONS``, create a folder ``Obj_machine`` with all objects and generated files and an executable called ``lmp_machine``\ . The standard parallel build with ``make mpi`` assumes a standard MPI installation with MPI compiler wrappers where all From 2becc27aa40f03aef8be83a33c49bebd6323372b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 9 Apr 2020 21:24:00 -0400 Subject: [PATCH 12/39] remove a few more BUILD_LIB uses --- cmake/Modules/Packages/KIM.cmake | 2 +- cmake/Modules/Packages/KOKKOS.cmake | 2 +- cmake/Modules/Packages/LATTE.cmake | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/Modules/Packages/KIM.cmake b/cmake/Modules/Packages/KIM.cmake index 3734e10982..b4e1fb3502 100644 --- a/cmake/Modules/Packages/KIM.cmake +++ b/cmake/Modules/Packages/KIM.cmake @@ -51,7 +51,7 @@ if(DOWNLOAD_KIM) INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include/kim-api") target_link_libraries(lammps PRIVATE LAMMPS::KIM) add_dependencies(LAMMPS::KIM kim_build) - if(BUILD_LIB AND NOT BUILD_SHARED_LIBS) + if(NOT BUILD_SHARED_LIBS) install(CODE "MESSAGE(FATAL_ERROR \"Installing liblammps with downloaded libraries is currently not supported.\")") endif() else() diff --git a/cmake/Modules/Packages/KOKKOS.cmake b/cmake/Modules/Packages/KOKKOS.cmake index e43fe2f596..a9806a6e88 100644 --- a/cmake/Modules/Packages/KOKKOS.cmake +++ b/cmake/Modules/Packages/KOKKOS.cmake @@ -22,7 +22,7 @@ if(DOWNLOAD_KOKKOS) INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS}) target_link_libraries(lammps PRIVATE LAMMPS::KOKKOS) add_dependencies(LAMMPS::KOKKOS kokkos_build) - if(BUILD_LIB AND NOT BUILD_SHARED_LIBS) + if(NOT BUILD_SHARED_LIBS) install(CODE "MESSAGE(FATAL_ERROR \"Installing liblammps with downloaded libraries is currently not supported.\")") endif() elseif(EXTERNAL_KOKKOS) diff --git a/cmake/Modules/Packages/LATTE.cmake b/cmake/Modules/Packages/LATTE.cmake index 4279b5597f..4ce8888f37 100644 --- a/cmake/Modules/Packages/LATTE.cmake +++ b/cmake/Modules/Packages/LATTE.cmake @@ -27,7 +27,7 @@ if(DOWNLOAD_LATTE) INTERFACE_LINK_LIBRARIES "${LAPACK_LIBRARIES}") target_link_libraries(lammps PRIVATE LAMMPS::LATTE) add_dependencies(LAMMPS::LATTE latte_build) - if(BUILD_LIB AND NOT BUILD_SHARED_LIBS) + if(NOT BUILD_SHARED_LIBS) install(CODE "MESSAGE(FATAL_ERROR \"Installing liblammps with downloaded libraries is currently not supported.\")") endif() else() From 7c8be1a411734dddb8327a16987753042bca9e3f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 9 Apr 2020 21:47:47 -0400 Subject: [PATCH 13/39] update instructions in Python doc section --- doc/src/Python_shlib.rst | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/doc/src/Python_shlib.rst b/doc/src/Python_shlib.rst index 87820f4771..b02fcd7bb8 100644 --- a/doc/src/Python_shlib.rst +++ b/doc/src/Python_shlib.rst @@ -16,7 +16,7 @@ From the src directory, type .. code-block:: bash - make foo mode=shlib + make foo mode=shared where foo is the machine target name, such as mpi or serial. This should create the file liblammps_foo.so in the src directory, as @@ -41,7 +41,6 @@ shared library: .. code-block:: bash - -D BUILD_LIB=on # enable building LAMMPS as a library -D BUILD_SHARED_LIBS=on # enable building of LAMMPS shared library (both options are needed!) What this does is create a liblammps.so which contains the majority of LAMMPS @@ -61,7 +60,7 @@ CMAKE_INSTALL_PREFIX. # build library mkdir build cd build - cmake -D PKG_PYTHON=on -D BUILD_LIB=on -D BUILD_SHARED_LIBS=on -D CMAKE_INSTALL_PREFIX=$VIRTUAL_ENV ../cmake + cmake -D PKG_PYTHON=on -D BUILD_SHARED_LIBS=on -D CMAKE_INSTALL_PREFIX=$VIRTUAL_ENV ../cmake make -j 4 # install into prefix From 7978d2035211754ead15a154f71004ffc13b7f6f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Apr 2020 02:02:15 -0400 Subject: [PATCH 14/39] tweaks --- doc/src/Build_basics.rst | 2 +- doc/src/Install_mac.rst | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/Build_basics.rst b/doc/src/Build_basics.rst index 692c779438..70a95ff8b5 100644 --- a/doc/src/Build_basics.rst +++ b/doc/src/Build_basics.rst @@ -15,7 +15,7 @@ CMake and make: .. _serial: Serial vs parallel build -------------------------------------- +------------------------ LAMMPS is written to use the ubiquitous `MPI (Message Passing Interface) `_ library API diff --git a/doc/src/Install_mac.rst b/doc/src/Install_mac.rst index 41b53c0595..642169ffe5 100644 --- a/doc/src/Install_mac.rst +++ b/doc/src/Install_mac.rst @@ -34,9 +34,9 @@ install the `openkim-models` package % brew install openkim-models If you have problems with the installation you can post issues to -`this link `_. +`this link `_. -.. _homebrew: https://github.com/Homebrew/homebrew-core/issues +.. _homebrew: https://brew.sh Thanks to Derek Thomas (derekt at cello.t.u-tokyo.ac.jp) for setting up the Homebrew capability. From 20edc12821b95fbadb48162cb89d610b0f4a9d6a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Apr 2020 11:53:55 -0400 Subject: [PATCH 15/39] copy images from figure rst directives as well --- doc/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Makefile b/doc/Makefile index 895a4aa90d..f964d109aa 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -83,7 +83,7 @@ html: $(ANCHORCHECK) $(MATHJAX) @rm -rf html/JPG @cp -r src/PDF html/PDF @mkdir -p html/JPG - @cp `grep -A2 '\.\. .*image::' src/*.rst | grep ':target:' | sed -e 's,.*:target: JPG/,src/JPG/,' | sort | uniq` html/JPG/ + @cp `grep -A2 '\.\. .*\(image\|figure\)::' src/*.rst | grep ':target:' | sed -e 's,.*:target: JPG/,src/JPG/,' | sort | uniq` html/JPG/ @rm -rf html/PDF/.[sg]* @mkdir -p html/_static/mathjax @cp -r $(MATHJAX)/es5 html/_static/mathjax/ From c0d3ecfff0bf471112da861e08d3c47a75bae7f3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Apr 2020 11:55:13 -0400 Subject: [PATCH 16/39] start more detailed CMake howto document --- doc/src/.gitignore | 2 -- doc/src/Howto.rst | 1 + doc/src/Howto_cmake.rst | 44 ++++++++++++++++++++++++++++++ doc/src/JPG/ccmake-config.png | Bin 0 -> 24454 bytes doc/src/JPG/ccmake-initial.png | Bin 0 -> 15892 bytes doc/src/JPG/ccmake-options.png | Bin 0 -> 27154 bytes doc/src/JPG/cmake-gui-initial.png | Bin 0 -> 65610 bytes doc/src/JPG/cmake-gui-options.png | Bin 0 -> 139088 bytes doc/src/JPG/cmake-gui-popup.png | Bin 0 -> 35224 bytes 9 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 doc/src/Howto_cmake.rst create mode 100644 doc/src/JPG/ccmake-config.png create mode 100644 doc/src/JPG/ccmake-initial.png create mode 100644 doc/src/JPG/ccmake-options.png create mode 100644 doc/src/JPG/cmake-gui-initial.png create mode 100644 doc/src/JPG/cmake-gui-options.png create mode 100644 doc/src/JPG/cmake-gui-popup.png diff --git a/doc/src/.gitignore b/doc/src/.gitignore index e0b9693457..afe24cc10c 100644 --- a/doc/src/.gitignore +++ b/doc/src/.gitignore @@ -1,3 +1 @@ -/Eqs -/JPG /false_positives.txt diff --git a/doc/src/Howto.rst b/doc/src/Howto.rst index f4376898b1..0ca955ab86 100644 --- a/doc/src/Howto.rst +++ b/doc/src/Howto.rst @@ -16,6 +16,7 @@ Tutorials howto :name: tutorials :maxdepth: 1 + Howto_cmake Howto_github Howto_pylammps Howto_bash diff --git a/doc/src/Howto_cmake.rst b/doc/src/Howto_cmake.rst new file mode 100644 index 0000000000..ee1d2ecc0b --- /dev/null +++ b/doc/src/Howto_cmake.rst @@ -0,0 +1,44 @@ +Using CMake with LAMMPS tutorial +================================ + + +.. list-table:: + + * - .. figure:: JPG/ccmake-initial.png + :target: JPG/ccmake-initial.png + :align: center + + Initial ``ccmake`` screen + + - .. figure:: JPG/ccmake-config.png + :target: JPG/ccmake-config.png + :align: center + + Configure output of ``ccmake`` + + - .. figure:: JPG/ccmake-options.png + :target: JPG/ccmake-options.png + :align: center + + Options screen of ``ccmake`` + +.. list-table:: + + * - .. figure:: JPG/cmake-gui-initial.png + :target: JPG/cmake-gui-initial.png + :align: center + + Initial ``cmake-gui`` screen + + - .. figure:: JPG/cmake-gui-popup.png + :target: JPG/cmake-gui-popup.png + :align: center + + Generator selection in ``cmake-gui`` + + - .. figure:: JPG/cmake-gui-options.png + :target: JPG/cmake-gui-options.png + :align: center + + Options screen of ``cmake-gui`` + diff --git a/doc/src/JPG/ccmake-config.png b/doc/src/JPG/ccmake-config.png new file mode 100644 index 0000000000000000000000000000000000000000..ef7508964653c4c217f36ed39b5c4fdb93e175ce GIT binary patch literal 24454 zcma&OcU)8Lwk{eK6-A1o6p^Bcpj4&Th#&|EC`jl|slNx%Y z*U)>F8hV7#5=e3P48dnxSb>GBGu=HMgv82XwAX2;MhpBgNI^GR%v#)5x+ve78fp!L4A{N@q^7Y9esZPei>zVVVR>#xaM zGvEm>H0gWpR^eLV8l@gNH0WneF8qPO_!$(rE60oLf`wONP~iLQK*uD!k3T&ki4zC+ zIKEln?orb`Mv|48j|ENv2!C;xU{_vUH{|nS<%MT&cyEIQUAwGZ{mGFuJpGiqi0Sq=<~V#7fvdSl^hXS@E%=$f z&2`PYp}>ju`}gk~VtSsflsoRZ5&i3*30zGmGBPG}dsCdrhl_p8a0Z>4P~K&1lDL`N zdc>eS0~%OnZ|jTwTRIY`^& z8RY2EceFOuzApttPg5ebYc#7`dKCy83v_M)KR2`pPwoIscqy)Yi$Jpyp<-Z)-C5qf54k9Q+)``cv z6>vxJOtnhvrpwD&W^W2k)ZCX?qtnA(O@ND1hR9kyA7nP@s8*Ayk@l__>jmwlYy8I~ z4hu2Afy-U?iQceT-?q&I${@Y;vGd&Hyu@DYW8tAze}}k@OAm zYSrempdc<-3$tt8cFFAPeM=-YSvT1K>oSs~p7^3t@&(&RQPLOsKCx6}7B-EgU1^Y6aG%>~wUPa7y<6FgPwJmOmT zJ~7qHEYHApoXad}m?gASNZ4T2X7x`q-ze7^&~{Ri%+QRwV`l2dT@@9T;4feNgSMX) z8$~fmj#xO1NtnhKQHo%+TF)*K3p?r#{5Q8b<1a&$43lIPyjza5bWFvNc1&?j5Q(&; zv3hc0s@Fy`ZAhZ1>|W#9(k|vn{7msu%r^PFX4PC{nk@m6QSaKHW`;e_czir(icd>w zr^kZrwzutj(v8vM9g6Z&{!T|TdQgf+IBsKx+{_%i#4gTKU>*8CxSg( z*VJ#LSUe-YYrc8ECgXUL)ZSPNVi;J_sS8eBS>_1$(1J5+pY!l?L2lr|(whK*Uvi*{G-L^J9Z4};Z3QoYxVsmEY2vFa7mRY;NFvcq{P zXSw{VE$+Dvt${paXeToLS{oOl zi~5rhLSgcaqkpjPY=2XfCQ zcAq|QXU1Gu!q{LOw>eE{USN(THXd8Ea(k1~l0D?|hMPKf2t3|%FHz}Z(`7KU(YvwE zRK`H}rWu2FY0<8Kj<~D$dOFr3a#*I5uVC5^SnnGyfcM+ zYMH%6KH?&7N424ngcw=v7=&fFSE-`cx*CN+Jl|ZM9?%Bn6;se9 zqXf7US_TT+q@4W*<&k@v{JodF6nDRPf=N3~M}}$c6X$2d+#A-aJUY)ygAdyiF(ed{ z`rDW;Izw`=VJae6)Q`9}s&KFp%R&=9Te{r~_8^Q6lrnT_`}()F7LQVTmhcMq!EOh- zl=*-3Ee|&0^FrG2^_x+Qy(U{EDR0mDwZ1 zWblE*1l-w$)Gg$SCB|nE43+clIV`Xzcdi#9w>EYXCTEY;y`i$35x@I662MfzypqRN z=^Qir@L7!Kurc0OnMmNSCbrIZGxxw-sXo~4wsSSG>h(S%u7`pH6X)OK{ily8UB#Bf z<}>ib&33HO&Jo_H#Um;mj8UMp^G1{ZEThP?@&_)H2fv(WTB|a^EGc_>ZC4)rF`r>i3IU0Fb$jngmkq*}*6a{{>FqJiWOqsOU&tG8a7TuaY zjHO5J!MtZmH{z@YwY4j%K9_C2KOfCewREPfTL5}A#*H9whxMYkh3D_#C-meTuiKXT$D#T>yRAChh-K)6jXHPjL2k)xK%4rO?6zdDv1jAd zPL{Vz<-P~?e#P$8l!|wSX&xPeXjji?vAng?7ISapLZ)2+yniuc<*^KO_%OgN{y^5F z6(%aVV%~B_&~WiULO=_;oEdKE+x?Qm*xhgSA2@;#1gm=Ucma!hsDUIMw@;84Hud_Adi+90cb~9%Yl+LW3^LR_-0mcRHcMefvq;z}g^xFoO z!SZ(vUsT=)^2kuW#;(sg?_X;}z1cCq5SKN75=sm)6+6o{vlI^CqI*;HB7xZ1@~)gJ zYn+yrl$0bD-qhfl-98MXbd;kGciX@w#L;-S5h8jbqF+TXsk zBaZ8lU&A)7L>vrWoW<@S+roihZxoT2NDt!a`k+0?}{S!JZmzIlY~t3!Ml!+!%Sm6{4$j zG_5PuRx6Goq+yioZFw!fY2iQ(?eF&o>8)DlE0rQ;7%B zJzWKIt4%Pu{cR)>oj6mmdw`@82|?z{4)c@JQ{Kb){3@S)dem&id=t0dNQ>@FtK`8u z$u`u_<)kbMiF(}QQp#ahGa%T;UFYCd8nG!;#00s?xP?0CyKE1}i^D7enqyJshY>il z!-fD$1Q9b+Ny=oE8ed+i)zfC<9_iEFk^_)h9K+_6*K(=lPpjkp)GhEW%%A1pNDS$l zHR`DG&L(`sl}@|j_3~h7uWzq@&7_;X;zAQ%fZB?h3D6aJjfSYR3JJW3x1D>oWwrP1 z2l~Y%+Fl`RO7pT^Gh~L_ML_8AS=P+nmNrJr-ZH2}Vxpbw&27=s(L`q|^8SUx>Ms?r z++2$&`HvP$FMxZW$?Vm7Ad9jsXh4@9{<_u$xmVorBP%)=Svqc*FGospuR1P7pY**; z7cxU6d)F?#lguduZiH~3MAJ)4>!NprSi@tPV+Sp}l6rA#=%X4~&9R{<(g~aDT|{+Y zqIu6C$uO598h<~|GGN;qyq8-FHn|wc)6SZ3!((5420qum5ibh2+qQ&Gf+hBqY1(=buXS;^>P&s_Sp_+ zU0%lCMc`r7)c|x4yp6kdvAiopN7jBgX14lZyK&&4)^9k|%DriC_84#Jm3YTSEg|Jvdeu<+((d~_N~3tt!0A68#kuKkULyc)i-5`yTc0&GqyR{o_Kz=|Hc{1 zqi)`8-Y64dxTxIG*l{C|%nQZLg2Ewp2V8xC*6gH&b+j`>-bZc=jCThdv9!YLuIx5R zM(!I@w_%KlQF6Z6yr^_kZ!f}W&_(Iz<_Gt^oeM1;J6}3@1U6I0Dk#6A+B93f9H%Xb zvv7)AQ!W#&sLfF|cRcueENaDQy*S6@sj|QT`i!ce>9GoBuzi>$X>F=6ZFv(uJGd$D z5*u(7%Adj2g(pr>DV^N2?kl^7b&J-brc&!G;)u-+`PqO;*P3$DFXqxHh21yC2?<)M zKcwQjI0tKCvnIpn9MQ&#wOel>Gx7-7kw&E7==|rhqlZl;5`|?%U6jb((Q{9-oA!%R z?oF4&UbSS4nkewHM$A$d(3bKQi2YFH;TCJXk4E<6uGrWm6<^GK(8EjDTkl{`C)`yp zQmT*}BmSz64#3S~u1nC{?F9Qz>#;An`{QQfTEqwc&Qn3>jxGg&g>U%o)F27ntQlpm$EW5V)t6iifR2BvYWNbQKgi$Y z)B~rk2D7)MTOKZsf=Od%OYLX9UB@r*dblh5?kvNm5bNEnJxRxNv;GIgmI!j#T(G)% z3F?7H`7d$V(P45s`KaIMSHtQ9lG z*~jz2RRcXo)cqsz{obkLrt@K#lKhV-Fz!Rgc`op3^2sX;T_^ZNiJg49usdi!B74I! zme7XrA7q9hHe&>P<+nGe-s?@g_US2%VWwM0Bo(^AMd5_YZ{{E=dLl9yqCe0cb4qzkX@nBTUcw6s8iPNB`^yZ}~a5+&5 zhIu(t8VHAS`4S9+rW%v^6=2H|R_^Y-%?T)lqsP6+SRALvKw7B!7JOwEHg&is&oz0a zo10w`zegucK7b{LusREh$dbmpI=vAK{dG-r9_mH8#I=I>BBiY%V4bdyjm&-5hD?#i z^x+TP2B%R~w$E3Se9-}$_Fz)BZExy*|NV~e9cwrv-8GZ%!;>(XXNYPcLJt-{^Tr50 z%RGbTJ*b{9YzyhUAMfq9{s~t)eui~1Y0-0VcYn~S$=MV<_bT@V zVLK~I>DzL8M@Pp2W_>e$6mNM@OsZ*2nc;`{@AehWF_O3G5DvrvY zJtA0n>(`e~Kh7#MB}3m&d zR_GV#mHT3^tuKNoeg}=mo;@!eut+#S{E_50`!kQTIGpDZNIY<^r!u3emk2d^K?MVI zbcm-R_W2525(OX4Ry%qV7@>at52WEbxoM1c-0~8|!rT^P9k1LdM30PGiDC(3p+xj- z{f2BWm0(yPK%>lb3FXt83zJ_MLMuwHA$|*jg;`i}`_9Is2weJA=cBRSkiajm+6|>) zv#+WYZd7$>>K8wBJE-4mB6JdE8=6P>84`lntB4-<=a%Z|>fy9O!;0?E4E%w5^9a^sLB zBd^1|Db@F|*knmCZJ^bBsJXJ3!qqsOLa_((?)P`5OYX%+-KMl$pmQcoV=sYal9CN$ zp);r;q_JAu*cSYOSvpxoq5P=*nY=P(A1W()&wfNex^#8@Ii-xcm-zQ1xdqOP2c5Az4#&V}H-{Uxj~m@s z>8~*)>{D05!8NXnQ&pn=4egzhO;z&?mKfh!1#jh__eV1C_hk+BblIvUQKS-B8rczoC;u*=t#WI59v)@swkTRR-)P7UpNCvH1@aO5eG#9{GVV*f`E%a#xYbiy;gFzGsw+!qw&XG=H0rZpXE22QVtMKg z2f;nuUfWrAH@`GtNqTm>iBro%i$RLI*0&!yV`DJa))!b6&R?-1XCy@5Yw@eq;3 z&Ly7qYjzB*ciI@QwHXSfr^2p4IW4k@JCtojWidfEixM#b7g;f1SL&z79^VSNg)X2$ z4=aZSyl9PaMdQeFa*SraL9&hCtUNOBikswdd*8EqF^L!QHRU!P1CbnCO0KTQf8b;5 ziyj_!Jr*T4t7T4X5O?wT7SisLUaWAOCXpX6EU0@UElHre?svAmqBrCj*jZ2sG0KhD z+V;dNtT$VuinpY_ElGyaitfK-ipe=<3g|!imVT|i9MEcy*L$|2MiAP-fkJhvM^_*Z z@-u0@2~sDT*r^R8Fgm_3X~>^HliIqE^4p#oXT_`q!eDiK-}nRhx>!(z2z^VBMP@uH zQN1luq_;QqD4m0QYA-@kOH^jBN?FWpwr&(${J?vt*2?Ed_~0pJCs|#%)@@Q3;fhxg zmD$8l8aL6iep4KxNr{YJy=GqB@|K9kgrb1Gkew+W=>sxMcD({N>(Lc7iP#_E%7Qg_H~Q$~qvql9NPK^+e&Uv)=ySa!|KD@moAP^~d{tO$=QBqY{Rb1d?umd` zn+-GSR+y!OukHWp)+Xp6M;J#8Aa`mhgA1&eu;74oVQ{^pzXP>5Jx1=7S zqVS?P+#-%k{7v(knS;|^Be(vP;}JaApPHZL(R4ms8zc8M0C&D>yIp&K7s*&4M;wT$ zq53#a$`<)`oNZEmmQhK_NN+iIO)V$&9&8qfXqkVAqg$U8-m7+Z3T^7FsjK`Qae!I= zey+}Gq%*|U0pc)uK-17^b$DovlE$@~CZ-WNSi5^hQJB}yvP;7mVO1W-5v*7dGoNko zo*KfpJrCXEVSCXVesZ40W>=u6-n!6m=pOJjy!4T8oMAi{YN46J*$xg3*wwnVOqd8^V-t=sQBNrlB zscKl6&7XvMd3^PfH|1r&{cM?Ehiq@%zNaN-gPV)koG4}aXEw^jwXq6CTB*_v=%?T* zU7Xe)I-Q#}MSfcEqe1Hw=LaS(aXwyRWlKer&3?k{Psh0nIRD)y+*5K}12?ipLH316 ze4ugOK6$qgwk5Ob8SbH6br_q9pOwIM``<;Sq7To{*4ww$^!SoHMajciVDdBub<|db z*c-K|K3cA+*it%ZXT|K4ty9TPFb-3Q*_)pV_kA11dy&IL9K?QM8;(|Z#*i^CWL@Q3 z^+i3^KL4u8nP49DW)Wp6hHj>o^dXy{(!iZ@cwU)_W=VMVc&CkVi}tRwSeBFzkcFAW zb+Opa^UBW{>}X028L<}T>6!k&i`kuYIFe;4>GIxJ?bGGrQc;2mV~cs-Qm|QOk0X5a zgw1dffne#?vTnIQWcgmIfI7ALUVT}3cZPk=6_;3_mN2RwEgc2wiZ7tSaR>Z~DGG4e5I?wqGBp#}ly{aaOF6anGPNK* z?t8MJz%avk9Lj^LJ&Pdh4;ED}Hq%8Li;1$$mUtdJ=F7)+Lps&5+ZWg}Y;pnbmtqry`+Effv30u$|K^~Jn`!80#3|9QP^oQ;9;i5qb zHbq__{s6Cl+c2POlb(KqKb{(JuQFp;Moll~^;Y3qVdm9@?$*s3uwQKaw-73`_iXXj z%;TcEmG2A7aa?sy3*{(tWLu_w;HG!EVct;)qY~j~$yG*1p=F$VbnxHRz+~v#+sRpt zR>qSWv)byHtLVE1Ui0D>>5lN!{R7Hkdq3L3XYq12*_&+BG`i14m1h+dRxoy2S~j>& z6Rv|<&>E#eDODK7>YeXjf*74^k1WxJm84JCnshk@889QPASS3mW5#g7IUyJ1SLkZk zFjnb7TrUo>8A;vLRob<$D=0Dae`WYYh~>@B+*P@KB z(kx`RwQ8R4YRH!i<~5{gQ1xx&Y^ggRXeEPQ$^Swu?L6YXw>b{UkYS?NT$^3>#UBuo<)L@E+S88&iw<|Y z5~8SwlSPL%Kb=-fayqNgWt$YOncabd4A0+MRIf=e)n{D=u1QGXBzAk~_>zOgm8hZe z^`=I#92WyW8*$B=%p4gJ`~Gn+zIqAUfmOPParG6k)c;=nAjDRv_K~~tvwPe=U(0aY zJ72bWqhh!UwC;qRE>sM6hF4rIdUxy_8u@1!HnlUYrNq8r zUb3+&mcME!?KHchT~SiIxg}k~Z!6!kf=# zED^63`g79vokZp4GMQO8W%-e=2N`fAWyKrmgJ<1RbU)arB3nF$YndYSMA9TAt_9wK z)*c_$!AN-BU~X>tN{^1P?gYN7oo}T=pkF+sc~ce}zC7;3tOJ%E;_))p)Gsv}Ls_!g zoTY!%Y{0;9P4MODmjHR_@y>ygA3k%wyDePO>0yr%@s~Lx;!h81DeQfqJJaIDhQ5uR zKY=@cGOS+dQVj>vm;*n*n3yhCl8wpBI82{XES9ga)hMZT5TXN#xhj#rodt?Yy_!%0 z(SIwfOSEQrV*MVnX!hrGW}x&sWQ2yAH^(6ftGWgjW&y+TzSqu!KuqDii2c%GB+C#j z2=wr3R#ujN(P*JLd^J09q*gz6W`hN|eCwSlP%$q^PHC^+ZsiC*IdQ9|kk&1!q|x^| zm!YRXpt8@)Tm>I5h|HaQ->DEoA$5lT`QN86_PQ9)Vficnwj!LAGEqbo|NLKj0e;XX z{{|2Mu+w0`)iEz~jwZ3~#u?zu6R`&l1xzBX+_`i;5(SUt_ul+sx`__LQ0Tm(;kZORBzegwb{_E)NNyDJOeK5I3`h1C( zmv;{q6&XpdBM5P{`W&Y4^U;J{A+&F4>ng?5#s1E!-VnE!+}%feBj-HSd*+pe1bquT z>^l!~cZYJgAv_|vjVc!9>sQ<6YHRH6QLWXil5bm0nrt^;gDa|#nD%~q$OfNJuIyQ5Ivp^)9 zbKx{wKVf|G?7NA>{SW0s9rtBj&df^Oh>ewbP=gQwu0RvKN9k+m1Th*4k<^-BY%jgMG=b9x_v5 zuEpn=1-0(B-(>IPytEtTheWyVQVLC)Q@}CzY1hDducNAU4XsDsifS<{)c<$suin8D>c{2gNKw zH{ABr^W)=9g)$dQ=Q4TCoxaT=;NENC1SfivAK4I0f8e{Qn{Qpiy`navmcNS4uW95D z1I@m+XG&4@`6(Z(Q%Cl4d1p<_GqtuYI`s?6{E4mn4f5^SjN$>=E$0>gXoe@Dl?=3* z8BlK+Zm=tcGS1a)W8x`SSY~@IJ`#2~l`7H9f9E}1{)PmbftE4sY8%tT%E!@dvxu;B z;v-kw?#oQi#Pxq(8oW=#1U-w5dMm8RSl0CHi~Qt6o0;?lS-bk~i?PDIV_ZGAX$RS;R*&L_g4>y~P zpfG=WGp>O|;a#s@aVJ&HG22y({aCTVe>cV`8SJt1*``E$a_;x8l*hehOs?R}QW%!2 zG6}nnntQ1-;1Z`Au)htgDMrBS){c{diWTc?de>1hR&<&o3r)iUUGH4m+t zy1L3hzIlxlZJ?f8$qsJV(A**S60oI36$maX_6dT0DImoc&(4B&$wpJ<_9o1q`MaT~ z`fw3F<#!$yB~73H_3%c)g^#qQ{}y}xMx3{Y#`m(|*9#p|mref>WM}Ao>G@@9*+0S>{+do_u+a+H<33KcYd|Xb${{|NNA%{rmOw%mvy@bl=6ITk7mleOq zUh$k!a}m8YAOtSFM+5Tvu4{)TIamnVJdf;=9*BMNdHBlX4g;a`t1w%sr^$P=A9XZ` zuu@^}YYjJ8L45&av6|t;Vo392Nym_YVSN?J(9{CPnLn2TBEkjBOfm%|QBwoF{Z4l^ zJ3p3ubxq=eh3b_nM97MOc=F~TSNJ2&OO0I24a+Sy*9z(~`n2~|^|@ocyjHYoQMTRP z*meUlt7qv(KSofotLZ}}=hz1i2AF=%du<=3_Im7FPOg{cjVynLw)@~2WmH} z9PaRiF7T@m_emO_94%wm2Unf4!97pEN4~n7RVog8IBJ8)y>!sP_)Wm+UWFn{(S4Z) z*IL`?y2xe|(8J~3CO!7$$`TIFmKyBsgw8%S2PfWQ7SP9=0VPcSUbsp%HMQ<9*|JtV z>n^uPP6O%Z45!XvLF=*%_?MH%v%Pa&M1*SUKoz zLrl&5PFG>oesw4Jy0r5PUNXPG-^DlLptlYMrf3n`!2bUJj}lI!h4cUlNy|U>-7_#; zHn;&~;w$e=ALa;6UjX$zQ@#c&R)rMarU89_=|%V9AE0}mGscA%toqVHpew+o|5xH> z!XS+9WzBUC-L3rs79{3(xcV^U(b--O-bEW;uNPSiG8cJt0C#7kOX}e@x`;L&RMXh? z2)JPN*#_a2H?IG7V1H^jf06mKy!y|4XJ(LG%;tDOu4P|}xPSbCx|*7v`?9DY(OHEL z7xLils`V=VNiNo&)z954hxe0AV75oCiDB}Tin7XJ+)Q*%X49j>B>c3z6ikx<) zgR`Ne1goTk*k2q4qTyMaQ2m{W4-SH}2pS;Plgh1(iFYp=i}5Jf9)dFE+@5sWm0vw7 zIn}Rq)m_`r2THFbmrwkl`1OukX%||q!{$&b>mc%}=q6KLb~R+55>@`n`M@C><#Hny zJ_bIu@^QSN`x1l6b&0Y!QqnGb?sb|R!;=HwMf~X7##o9~Tl%%)e%P{2yv{0%SM-{$ z8YvuJbGfUfF=T%wpyTqj&*+Okc+vrvGOgn%giMLKl{$olprhL=oge1$h1piT(;?~k zboQ{eLuGcNO0X+@oumN<Fhr0Oi?q9i{R zor#2RxC{}|>Kg3iBn1PQhGibh!gxZ0)UX=$>HMMWrqtx*tT@?;w(q>z(J0?1_zBFC(`X-F%psJbijaK#Be1-J-<|`}k&?xbL91aX(+2tGkgiFh@H)1nGsl zw_l1Lf4kde0?hlT5i|e^czKg$meS(=PwVjQ8UyaqD9ltM#rai^uV^EAMtU;5{MFR# zraBOUO%Cr~MCPdNmT$Z=+bfLCiTQR+l-i7+?zWISh|1XgxQkcE`Z?puhcv=fdkt`K zvyHuRwfteS|9->F<(Vx-q9hHQK$Rd+dQNdF$~!JbG_@+RX+x+|Huq7N^+(e1mx$v2 zMtwgMGK=b1_-x^Pj^)tv_BWX7YK4dW^N#wm?ye?Z>y3|f)6vycSY-kDNVHUtnHMOt>v)4@(0v;0 z_d)FxNKWGO-yF6IY&v3-q?SaVwaw!zI%TK7D)1m`^NPxqAxqI&@rkC01s( z)a?{#pmhUsl&O2?;YKl}X-oRSgUs`%L0{jG3%C1!7wtKJ0`{kuFRFmva=G7sc@R?D z&no;{U~%EOo?6GHMP3pn--B$o1jg$3vp;tU73J z?em$R27NZ{hT2Mkoc8N)?mcABWggJz23}8#exl&c{E6PVQe^%#Xypzovt4R`sm#4s z_TTG&JgYkedIOlk);x9z^j1Wy#ukLN@?<+1A#-alx_2ue;Q0?KrF-iq{fC4sq>X_m z|BSbt{&8wUD;@1~Ws(NO=DIb#76M@nc1p-6J^1;@rP|6_>_`v3Stxo6bh~*2a-h~x z47*7xjb?vWKcrE!t_1>V01342?T?p%3^?WqHhPYSj8AsCK7E@*uCf8!x5aDzlA|^G zgj>LfD=oijoKc6ISpT-(#w)K4m>y7HQ8zSOF#k%xDPRJ{{@3^ai%k8cOCM0#4<-za zC+p_sS#DC}mz`q^>J77+q_CY*r$7&yH&}L6@~^$wAKEwxyF8}dP~|(;1u3$bokxI6 zxpZ^d+NJ{A%B{Veen&(`vajwd^XeSwV4%zZbCZ0iGD8x~n!0foTlt9z#3mqeXJh+e z>0CAhd%DVQwP{e|>5VJ&738`>sIibE>$3}>Uk~rs3@`j+$KQ3~tB3Cym9_5Gp1o|j zb0D#|-B3@-kuV_4mF}iHi_@k{IKfi)EMMMySGf0mg%IgL`|(FjLM0uD?S>s%PLKQ7 zJ2RotwUSfMZzY6GZn&0Y#xBvT8c(mf$7eu<_es%isTwwnfQ^qYWvzWUGkz()D@mSw zGGN87_g^xG{48!Z(Py}NN$MJz6VNaaHH@!x2JfMwyPul@Zy9K z8el#175d2@3g~wJU@xeUwsP4Y?|F~WaE=|b&S9Grs5&dW%LlUhRpp(hwQW>tKr_j; zP*IF^Krtq$Drq1sQ>0iNtxHK)Ko70F@=~)FE6^3LLfo+XpvGL%d`ZdkJo*w!iZ2EuV&~JqVz6UZy zMnnu@WTm7Mc5Z~=DoDJ!_vkwIdUp>NC5Ck4sB1raI1u-4+hP;4a2_8gIYHHcbKi>T zF3S>lVn7{=b<*U7H^h$F;at8>pW<<_L%(8Ml29;Jc<|uU5AkMU+i#!7J~}-l*;n|v zv+hS3UE~T#?Z;$~tGWd%&*$$`d^Gwjz1@*0!6+ z?jR95g&!WPMmMc@m&5!XY?z$^eN7t|mb?B<`o{5N4+Y!ZqPa(<=bj+|_$@Fey>P(oZ~+C=~fUWuxFhCa3Hl@ysUfrK!e|_1xnNAfD%2(~g#h z12)M@@6F9KLvj|gM7vlFH9bz7ub{9K0{xxQZlM^Tpacf3Y2Whm+6njQby@1BH{Jfu zpd9C2FQiY(P6>a^KzkA9$o?XM8J_SdH8+Z4^G8STG-&fb$y#-5fzZlL&_hW6|AbUi zrh(uFC`aKluJTHLKt4DSidPnG!xl2DFrEUDlE#JoTAy53qyeqK?9gJb)qsotA4w}D z&#(5|bGPQ*@A7~^mty$iB^^I$liBN^s69#f_)FA}#GpUo z->eEi?4Vy85K-%b&!e$cd$U}Ms8u0=`~exTpioWn`N(jRAE(|OfZU>F zdJnjN=}xKXv_AJgyHa-?_JQKnxLEdM`4jy8IA@{~`b_K`=+|!`ru_(t9a{Eqc6MH? zZXi(yMgUfsG@a@49HL1BdaG>bm3OeM;YDD#CDMaHY({oyw&sslP9(JCMUDEo_ytE5 z5a`^y@C(eLGh+oP7#jP{lS8KKz_2gUvmv3CKO=arJ80wkEVO8B_4h`TJa3)?#U0by(hpn@eeIT>pCMoO<;$ z0?8g%e)T>|(s#v0S0{5c*dNZp9$q5-c*<&W7K;CnS7(B?-zB#{FGj1ktQ0Vl+doSV zg3pE5!_jQLPUCk8dQw`Dx?l)lJP&YzUdZFz z-jwFS4B8EY&~sHtuZ&)uisaWd_GP2lQX|*L>UjNf!VoWfbrHrjs zH#rzFmtIb+e)Bo{*JKW z>F-sKy;Kg@+)vp;{o(ji*Yx~(jT5$kJ;-*x{qwZ=?M*G)r;;;e1#F78{A9`f5XNyk zR?T;m@nHXbeO(=m%W`QfrQV;Xk9L63DKGM3g_g6214`$+XyMG9?l6kr^GtbDPvKQm z?wV)vRtMJ4JPw6&osKBq;EW2JP$cuZ7bN$PzelP-YZWzX4kGE33&p`Nu!#clzPKf_^DO50p~R6tmi|e9W5;Hr*~G{WY_Q zA*BE+K68cd4ciZ}3;5ZQDR{4U(a)R&cjvIZU^y!_RR$nyItkm%J4Z15!y0dQo4%Cf z$?)@D1Fik?Ucr~j{UYwFq<8`T;dnEy2R%C{b)NV_IbyE}*=m|8RWD~cSUM+L1Pxs5 z9CmH^-p$EEg5f{7f%?_%a9)GYY|Y_}P2?WD##)ry<@H)W{cf(uWwNVXlVhX4?o}Dz zqkdzk_r03sUdiwW!B&@Zxw0t3bktV9GO8~_{3lsF*iEMs`TkWzrJV8Y(V3Wvx~!)6 z5czxGeoULXVBht$yvA-(TU)rC%H3@GwgSW|R*fs;<7t&b`ET#8<q8ZF5%AQEFan7S8k)C!jfMfI237w`T!lTbHqA0)jK6#xpa8t zb=`G1qiW^wjHac-$~gAiLyb#6O7u`?N~ny^)Ej9j(dZu2>vj%VN|W*=*s(1B9dM&rtW>6j?+H5Uw%KQVF)(<{J!APa~L64a$(x87V{u#hFr#q z#%@69rpuaI3`o|AuWPynG=nhe(}YD|8E zbHcpFNgH15#r+QOo|u;mYF5CabkZ)9cepcE0{)B)tUI$AHKJO>->7%;GsgceV*IOg z@%PB;qh~df|884kFu1&cgjA_8CTv5vy+*|9%2iK+-rlxx_Hvpy{1MsfRiX_r1iN|P zZnxbFnK3ajq~^=~>GwL;&`e9f{=LjOf5Rp-Ad3v=lrS)%|#%$Sl01_YQBhfWasq)I&iID||ydnS~1~|vOaq>?JOTNRx zcd63_D}q(JHQQ23Kw$3+auvLQ4HR?(@|M`cImqav&mopWt!P7J^V$a>XZbZ16h4Lk zZ5hWHp8PKL|LC`q>rheH%XC1B<+&NGB%t!7{RLTJNwXv*RJaQ;tQq>&4xQ5S;uSzZ zc`l^)Kp#gNH0ndBFtf?4#=w0=n-dlHKd9-yNb29Z(!Xj=Y({4d`o5eDlQd8%n4fTO z)-I1@q+Rf9mG4{EM8F;y%d z+b)q~VlLw(HR4w|^+o|Y0L^|wD=#HALcV)?0ie=U36NNl*;61(p6JEXOb^Blkmt$( z8A*$U;~S$a>bk8)bixjMS^3islWp*^?MEa%tvV6E8uh2+jwrlMboi%#L`L;$;p$gx zi+YSE)jw4@IZT9~{Wie=h9;bxbYq~8o+?;%HW{>Xy3}+vvbp+?aC-h{t7N7J6Dqgt zctZW{>NcJ$WiLpH1R$&@xw#&B zdkfc28BinJC)vK-=~uaO4}Pb0%0ZyUNDFd`3ECg@ArE20GrwloKPuI&$>@*^ zY-mu3dd_HtXHq+7K&U&d1@ur`{mEcGGr4rN+rHH8W$oncngFGBMVpUDF5Ve;r}DwC z4-h|eLDvD{;^@(c1)WLN8TsP~yS<$2-|}_({#g#{h zSGPIh04V_x_S!6(8#{0P6sVFyP}DUE2n`U5pzloev;H`||E=-$cBm0u00-!8!fp5a zU$$S*vdNp3(gZ>HFY^xE22j6P-y8(hVseH}hX+tHcp~Q#e1%ob0Qv&DH(%?W*ZZo# zf%P9+c4qZ%m(l^rDfcFcc0D~MTz;$d(q@Z^OD*t%FpGq^p%9?f0D9C6pm?B6(cb*LsliRVr^%lG8&Dysx5Qw_ zoO12*xsU8rG_UFF~6Nce^HQCLmuIc3jou}zg&`J$$bH*6))=7KI$}cJH&? zy$r|_eUin(G_WYa8IxOl%ISa>|90lR=`E4VhNPAf)%PdoT<=V86;?Xt&JmCc^w+An zam`63#x8G45hudL(>$glmO+1R!**ANB!|ZJzTI4+zB7c=CS% z{-eB>Z0H88B@HHMj8}py4M0*a{&@TJe-#&aJi4JVr%pn8N&5y%gW>*X>V)Nuh`v`j7D!Auir|&-Zd-d}x9LOe$ zL&M_*#l^*IrF(M+sl3 zYb=O*RjQOa8dh0r0cKw;IrBFir@+yfvoY~Hby$09K#ky;Q=k=&X$#tV1f(o2dSZIPkaLm`BtDuKo zEgpDC`)AjQ^9zuowC4n!Lqg4~r|fla(w$3=s^6fdL?*~2HF&MBG? zRy;R5ia8nwM*AMB$GLo0b%8;@A|{fpts&j{3py|2jYoQfa+LJRk{*x$H<#_{>_>SL`0sm8*j&#VfE4Xx0L>RrRR3>PEuVx=wi7}pzPLrzB>5zs zf9(J$i=T(X!ge-q5;qJk>wT|38aC9*lVk*e(!*bR<-I(C3b(HVe)~}Kja-eS7tE%%cROOX(Gwi;zwXT>*gZR` zMlHt*>bT4PKeb$EIGkI%euYRx8cB%gGT4$Jh%SiULP(70wi>;Rl8l;$L=Z#|BN4qD zV{~?OG8vswBZSd|LG-i6{=RRYv(NYaI6uy{u4^vyu9K6pXg)Dv3} zQQ(7uD5Ab0u+QcMl5!8!a4}(uKi7UK0||dd-1CgonaC7s00g9 z-}y_ol@D}V;a#GW>%M@8kw^YVV#_EIcmWQ&&-}>r!?>_wh#G=Kfum$=;bf{^E<7ZE znf{AQx5z$YA_(A6wyihqolttP;{Ux8;Y^1fQ*3N?a)H~u{d(v8Rnx<$ia5Q{(jW7; z;@rrP{~R{cGRU4X2&TtlknIw%k#<`QE4T|FG+-y0#KqslUr`aoMT?FqY?M7*Y}~OI zmst8_0tYnA%Lg7kps>T?y*g1HyC(TMsThWQXIVU+5_;XT8U~~akRGdx&39yR&Y3HL zVIUlGNV=P8B^*4=+vzFY5x@VDuxA`1dVV#jJuS9b;iD^h$<{+3U=G5ikwrLsKr)-q z7Zh2uFqJ`!vO~WsX)2rn_aIWPf|8Eo-O8L-5uPnZqPllX65o{mQdLV)eUAupr#?zm z3>h02;S7T-;5->eug-mO?w)+=kAqr`%2!6RM?$0Q;_n}Wy?}Okwfu54ArE9bI-WTt0UkdngN15 zbnWk9_-%!9*DAE*65p(!)fog4|n?e+P*!Y_Fe;J1dI#3rQDN>D&) zXO8R3H??)dz5tmTJ=$1_3rsTzo;arP5X8?{|F(K$ULN0(oo_Vm{Nz@NRiN9ZBo=miPb<>`6BE7 z@N!N##v!-xfboN22dvIC|9DsY4k&%i%<}FO>FNaY0TdXlYOw;O8lffWdt5MGvl50N zx9fRy@#a^l!*lqTzJ4pKP&v^S7f_MlMkYs3z1hzcoVom4 zhgXzqSmipR*}7dfme*VZ(YwUqI__F&ZsF)Kvvr#Ay+u}`8Fc2g+=X&mw6h?`MNM;u zxsmk2z^25OI6alQ*D0+TlZc>*r_l4uF3Rl87@^k=zAxyk4tg21w2h}-4%k!=3xl_{ zet#u=g|AspxnRIg(>#fo^Y#ydv{XJmH2$Ga0Jk@!q|`{nTKvJYV^_7S2vT-I+~@#Xp7Prn3QPHquo-z^d2K;_v~-*dv7*w zb~%e__o#F`ipJSb#yQm0?!LTb$?Mz7F=#gu^H{fV-f36(D-3S+T2_ZvK6v^>Zkbg$ zk!p_Jpwi0>r|7#cInA-sV*^#CrJW*9K9beY(6o6$r64q*t|02_aJ{8g(ZBqG=KUhH zndw&~WNl=2sY~a%Zl8>0LDJb9CKPEQz$@~m=RJLWrc}@RzR)}x3#!YQQzD=G?bIpX zDgZf?wUh3?w(^@1EiM~>+2kLi*<9mnJvZ-~5BSL~vDz<)%-zsMi%uwdTq;>q2Mnec zMEQ9U{%PWKh4!`93Y=Ifv&a%Qgq&rR$kEujA#F*qy_Qbtur>RY&;+sFbPi}Q)$ z6y!oSu02ij2&Pg6u;#e+?#m80=zWQ9COv}d?Rxi|p z&?JuvG4AJ#s{{z0OngC-F2B(JL%Gt{W0+gMqwlu@= z%T10(QfRXiAJx+D{TQJzZg6lBhbGXL|h zh2>_A5&d{v;Z4se;HE$GQ)Q$C_>#D9gX!_E9 z1v#{w_;ogoRlKxKi13fbRE1xJYlK{>-I0JI+My=y96~`pN+kt}?yP@z-+a)lAM*8iiLZV! zTl_m*QBSN>aS_wk$e^QM?IVXWoa5|{6l)(VNPVQEjeJ7cYJJqE;f#mG=jmK97^=%1 z_F*CcKB04%O4#n_aRx_X7;J_bE`3r;!LF3?p?j7M7g32s&e{U(&Q|q3u7BP^Y1eNi z;&qpeJzy^guKHwBFv`}>2kFJ~=J9hUw3ihi7Yc?DLj@&e|?x3_T=wzh7}aurhf`u=_sGU`%?=)Iaa^)ye}*5Ae9xH{1AM zS>4+S?^l1MbaFq}wupvc{xM5y`Q*Sj=V$OcG6{b=jCg%smvfVqFAiZZI+gkp^>ee( z2S4BjnaGla1hNAbVFAPl5$%7rF_~a_RC|^;{TxsDBBDLW>SP&jIiX-k=Md&8;)qJgbg+uz%F_LT=oe?vnJghl)awg%lM6kT(_rx)eq-**oa)PfagGGVA6M@NH zVL54zk%8GDuQ(374$iX1V5$!!@AYStsGU-b9?t@|U}A6S+$Bp?5Rn zz;WwN8~B;jLLBRSBwG9D>GHv;CRU|K&4bY+^+P&WQ{nl+I;kb5mv6o7jWh_GIbm?T zUteVV$5A3vbgAJVjxA5@fAb9qnX?a@xGDF1beXBcE*PoS=<_kKe93%^xV`9%^3n1> zYRjKOtclqtYx_a+PTW<$fyaG$LBy|hY7nOUg%`h-?S7j^oJXpW{5H##$j@|mOsEp8 zntU)am1g$07;*k(*r#sAK7QnJWN44jz5f_0)~}sy$UfGfOBa0)D4Gp_SEKlrtycb5 z3D!C!jK)5s(wB6;xb;H_aAwp7q*Q!OE+XI zUAtFvL$(G_c>(}Su3$oeEiJv0c{WGoTaXB+8334_bjriQR^(`pgy)mE#!ukH$}ZkX zIGV%G$>|2J_pafq4y8!I+nC0606(Or^ej@+MMC6)jc)i``;r~!0ho)oyHz8J6QQcR zcD|HH2^Xk;$mDJqWxr0)(2-sr(34Fc)T8Hq zU5A4W-*%=2hg`}lj@9|(O@6%M99W*bt#ugJh($GRdG~myV10Rk+$%@`$YjP2@Lv+ROU>)U}pjV*`Pvi$I*bjP>YgX3Q zO+U=QN64f^5b33Hip)!~6cG!1-!%_$&At?)c^SDgSbObDpp!@%CsRH-cAa8-6JmPa z{PT}~Sx^7;D~|^<*Oq=2bpTMjb=1uPpmzh@rPsm5;j-|^-tFlh%kQ$2ftazdv?m@g zIM%EAT9;k@=%X`h4_{w596|6oH$lAtpZaq{%|7OrRkxi2T1)f;5ZJ+P-mD#03TjOa z@E?AZnW?}?z|t9uH_Tr_2Z6p@(Nkg(K@<;Z{1OrkeUrUR)1N5>IUS>tROLMR76*xl zPNm?#Nk1Nxj~+iw?H>UnzKnWid@dBUuZ#49H67Yo9`gX1|4k@A`{gdAQ0H>(B%KG64) zMV+W0IND3a@ULkVvs5=A3K;p~>d|?I;e}Er<(?~qvN#Wh=suB}7(-Fzz1{4U@z1-j zCiGAygr~dm)IryP=+8@WD1o^-`VAe$%2g;xdFbT{JB%QYU?d7Z``P^APQXRm4cV&2 zYdp=(t~5|_Y(>AQ#K_7Pf=x`_CP;@GvXH$I3!cQ==E4iuc=ilQ{pz6%WfeS2&x{a&8OHqI%2uHX?K- zv6g|Sa=X220b$>;c|4+a`@!@R_D!bfTu*2ylnQM;#n}HF;;Chw-uL^eiALdk*AFng z1AfEE8HpZy#w>!z+!Vf>A%YdUY%9LD;m_DlOlr$@W)d0f8+En_J^w4%Yr27Jrh3E= zNc+p}){rxg@T(c|Id&5VOo#~Kjkj$`?dn_F13gz6=Px57I!N30yLNRw6c!sjqt*RY z*)87&XJU%-6K+S^XFL#9H^vKZOdJa5fzefMkZooAh}4WoN!1ZaZ^)vw0^_d9lyX_Q zglBf0AnFP=d|A46r{uKAQkR>*p`*W|^CV!|Y>tW^)_|;I8CM`%PSor1g2Y*N; zPom#e|3F;6w}bOB$=#a4p_yFvejy{AGDi93GD*L9u9-_g`Qx1p5*%x*8HeRgiAg%U zc{!5viRrfyq^kV=o0DI&{Mq?4Nb>%t9(WDw1XE;0w#QwFI}16keP2o*WS8@=+gtsy zfIV}-F1aS{+8-Rg&U6ei{#Adlx>}N(+c}ERf@BiIGHFpXx?++CwN#NZvz$=a%*{zhF?rb$aCOXrst=Rpw_VLINtT zsrUg0s5EHxsOI^XsWM}G!R5TcDtYati2Y76Q|xL8s@9MM%cG=vomvb>xRgBb=bPZ8 zy=)SauS(`&Ey4`*O4ay87Bpi#+eTN;lJ$$pm)WsjZI-rnXQpr~8^=YcNf|7Ljzdj@ zFjY_Tjs%PSr1X{siBhr0v6v22zT~0s{i3>eVvhX8&?exAUCsqEreFk~&&+Us*_+8e zGt;mxh*&tBs!TW!SyZRb4xB(0eR7a}j8MBGX?fPXNz@6INKJTpT=_dTQs$#ka%7R+ z-V^gjJ~+D6-hgHxkA{M}D#{1t#cZ>OuRH2z*beQ)jW4KOVC(+nUnNy$Jw*<)Y25B( z?{5)}bg$MlG~n`MUAv$CK~wB?Co0*{vw`k74=#8KF(jEJ^O3|awIoc^Z}nWhNlxJ& z>D>2MEfL4oC+bBD8g-q%`IG`V(PK3~P=$}$;tRLWfVEp68qjRXe9$^!NuG*sW3PP( z`a(;0TY5Q<>Hu59HF?|l_hcu9XgBH|hhH>DPS?N@-BDgtU)2SE-EbR6^qGT&&O!Kj z>;1!WF?_EVZC6KT4gL6BANB%|Q;U|J66j9r`bo0=(k3)r`{Jo)_oNUqv&R_mEbMgr zc;Z#^I^##Z30TJ&YW%U=RwL*qI842LO|RBk&bNr z=fN0%zWnR@QKtoscR}Rx)@~u=d%zRlx{Ic3VfT&jmtFC;$>Lc{gFjh>pnSy@LV-Lz zu%T}RfuAObmT%FR&E0)(o(nx}a~tDS1`zZR8-O+zAbhm$>Ysq1p?l;ZIeJ{C7m66K zJ*t%|6uU!*zFWtSNGK*5b>jmW95a52ux0BFisnsT*_7I3u|uzv#0UC3{0ZWKM?28g zE-TFsXKp`^;19DYa0uA4`H?-V7je6lZsYc5&N!>pcmV{x!D^PqCse*HbWZAYogNZi zAo@l36m^~v3{Fi?_1_}wsQs$=9L2FVgkb3ovO-Odb?XzU8EYt@1dVz^K^vW0k#m(< zf0fO`8qKP)El#F(_(KiL#v2(%+}D`-;d*s{%nhp~kzx4Q~9~m%qm9 z=ILshpm9dqJJByFq2jx>f;=pV7|USv?0Th`z{<7X0y>+|bTM)s3?_18LwvMZv5hAKR^T#my793z@zTobLS zSn35V4dx708%_0b-5N)aPAmG=-leGq`=sJPfecSjz~TdSp968@Rwv0Ny1RPe`5Pu3 zB|0N=@p@7aBw6!#cV?qi2PGKjx4m;W3@o)i8ChAlzLx|`Zmv{{HpVWpb!r_g7wA_n z^J{WnTGIx6#G3PeAfF>d^cO5TLPY<9MgQkcSTWf_L*O7@tLeBS3dwS8Vxra63Ah%B zqocRCH_xDmYzje5Y;0^*sa5s$uCmw36C$}ur8q=-j^Tccle>S@(a|y0!I)Y9_GhP$ zkI%lH#RmnlWpTh4s0;>on8;2^UJif3WOCvgJ=xHZ*>~NJ#|1MU{asyMO{?Slij44T zZ|k_d4BU7~HjlQ?_@n*gPr&gZ2kUMUFRd{1EAcR9}d|8}6Rb>Mx!M}Z+O z{_X&4%ZtJ8{sEqTz84i_uU~VKc@pIF&`-}ZR7%(P@kPH!7v-;AQ@JjG{l-NJPv1ay ze@`Egt5SMKJ}v=XG80x+0Ki4S-P^Y;LZ{X-AYmKUx+4tmL<+5|$=M>l%{T;xU!}I*Q?)3{1rSi$(_a)frl_|nL zU1hBy1W`X#FM|M6clYxK3G2OJKWuMb2(H)rd_@Lm>YK|)^$LVCQ=A1vpk5J$HH@l} zzE_xsf{m4Eibnn}bK2c%I3BYkV{Nf`^k5nex)f=2()=XoWPx$|4WFqh&*8%l8i8u( zTD;J4Pi{Q+!6DsgV=^$xYvot$gqct(CunV5skmvsy}#e7HgsuS)!3L5iBv1LFJXf* z9>ca`D(`*%2bKRKM>XvfiP%5R>2<@G{OX%VeXuV$f|QQkADbr5d^#->DUpV79_+OV z&=x?d0gIhVvgUa>Iz-~**=ke&#gWfcAZ0sovRI5sBDHd<4J42&5&2GyI8&)bOIUl< zmj#S&U%l&rNd3Q-#;2Dat9;adu&;G655z$pNWQ-#Z5=qYZ24Ksw|%y2=E*+={=@3z zaM1ZiZfUiv@9%uM_iZGjj#Po0*r9>dz=>eCkj$s&hQ*X>6x}Sdp|)KhDW-~Jc>|Wv zhWYot-M++ko-Jep%OzH}v)4~xV+zH0;R?&X-v;ZLz~q6mfI*yHW9oack)7pIAhd$) zES3gE^Loe{C#}5{b@UE%L$aw?c&#nzu&`0ToU>gU^fkK>)>!P@5m z&o<%lvQkEub1g2t|9i7pzH^he2j8%nkI(!~Do*aLrPZ*UfJN*e!TL3kd0=HaWzr8e z|3F+EsZ8HebqWjZSkcX*aM6Fg<+003q#aPP=ldNf9%ayucBz6s&v>>C;8VOH8y$Z} zc^}%X8?$5-8x0?6jOrc3$6Cr5_`b^WX;MRO%~9CClWFLNX<*GHSimyBQKZj zHlIli$6RtR=_yZBBuqkwbMj4n7y~a}V>hz*ik&d!J9E4oJb+kg!-K45a@u&42+j_- zvubrZ!fl{l)k$3l@!^}BeCMaGIn_j-{#1LTt3=s{Sy~YrYjo0@6Tce9uZ@SZfaOMz zA9AAHZs$_8cw(1@eCkh-=0}rG-7g(KtoW8>EQyAU<EiQ!5=97K6TYlf3=snRf0PQBdpMfbooTT3gdxa?n{E9J~1=VWvSu<9fiC zdgUsC8N?d@I21pgphkdy6VrYhKqej84={xtc`PDyC4j8*c_7+x0O7uIg?J}U>%<4wya-r$Lu#_gqS3Z)xGnEh@uP=<< zhZFbrfZ#0oAY1j%Z&P2^-|&HK)H4=*#FbyYOxOBO2*FJcU8jD$uSHp{A@LY{N7dJ8 zQFf@%-_w5THR0VYrw)W;`3luZ$738RRj;JP-eA~fXlzc6b&#diBl%H4DsGw{O+{^D zdN?(xIC4TlY53xOyv*a}21X4~Yf~7}TeqK!uvdqf>);!eaa)6oI_kjCeLfD2%mm+0 z72c!zP7uOwjIH=9G@Q+ko=u$D7Pjm6U1gN-wGW-)4d5pXbLVU5;K(pP{Ci1SSs;9r#-p|Gm zpS>1@vgS3~$8vIkdQV2iBq_Z#amsghVyVecWNC76DNfX9wCmWK|HUt2Zjc+0-}G$zk7a(Q8yfZzTqd>yyJmH(U>8HYV5&f) z6vP`l(>5y*6qQ!sNSSLt#w|Zz)tkq*zuSqc3ib_LUm~aMgVpnQe?)m`k;a-bGgl$& zI>d?Ji37CmqsCL<<>r@&Olm_6c6U3B#Oc6>3t%9q>Z(U^>GAdLGJp%X?m!urWdh-> zh_nM}Yk-FYf4CBzh$G|6)>wi4uobC2#|Ydswmh)COI7Q`oy&W&Vgmb*{E&#kLVTpI z_sKJm2WaS~Um1O_I-B85k+NzaXD0ZCDMk(qPb&n{*|q)Xq{8(#k8hjjdd_{hZ<$R= zkt%2tu3MoQdw9rQCCrdYlpA+^q|#dkH?kR>*|0UU);ZR!&9XAbYl~3|`^i@dGxo=l zSS=5FLa@8muvY}m_A+P`++RWHf+DJe)eRNzpBRrx}JQKN!k;2O$_rPluqx!H` z9iXhbD}CKPMXrIw`i5KVtddhhxW9bcv>)WxSYZG0lq`9#VZWyDKKH7e+r^#g-Kfe< z2MyDYP>cgpzcVa41^5nrq406AmE%}MD;c~5-QqN@TaTKq6_d5A3!Ln3CpB%uaA3Ot z^g}AS8||ZP+;3HWfG;?$^wU)^@rEgo^q~ypJ6I*I30y2;mD|}FBsTtn-H=8u52^Pw zgx-5(7AseklRXi{L|R7F=NcaBWZpy|0<-2e|6`^j*k z0yCv=Vm7{vdO)@WH~HxVI!o@gA4O-dj z(HOup5PNNR#YdEPh4buOj@*)6`-@jG^D3xSCRU{~wii)WSVp|Ej9uN6A1&=nhcXho z-_uW3GCV-A%v4D40GPDw%i`*W>Q(k z?xfL4k<0fKxU+Xx*c=DO)QP+JFHK=~`W1|Ts8go9t@wyqpL-+Kc&}{QN|0bro)JFX zNgif!K3*e&2GpE}hP2KVV`(KRed#;BR;8+I$JlV23$FV>D7~5p+gaM#^@DcN(B4l} z-Mi{m?4Tbq=jKYhSQXyDe)r=TG-Cy=oz0#sg)3ncMMAP=eGWaZ{U0 z=dpgFnas4^=P9zE_`;Rpj1{K{uO9U4)Uvv*U7`x4+t9IQZY^7_+y@8IngUI6k?a`1 z_OFib|N5TQ#VTj}?qsTtGBe6dKS6&Ky*AdG3cnVZ4Vmq3$Jl97E1%YGzAwW?5ESHC zMGPqFH39ckcB^zVXMe8WPtU6j>BMVNTFW%EQg6Vpm04j+AKE^$BP;tKSMn>N1ysTV zmsm*L>zf;|_!gAc5_)%+ZN|Y) zWT4*+hF^Q>aeo##egl_uSDaHOfUi*2*E=)$q@V_kxE7bJY?{r{^21f%R!%)He+|`# zxRQ=cxY49KUX=N2r^}uMXSU2XO;in*3t-= zr}=ta@GRCuhP0Fr#Mk5%(B6Hv7UyNqID}u{>a=)iOV+yNM@t-#@dOub-{=+oQ$Q`b zQnrpCPVOo*ocnR)s)93vZ{!P00;Si1*1HmCz8tYbK{#Nbrlc*lCgKpjcX>J&*6Y;UlGhi^c|iiy0&smyZIE=T(b>j! zuf?Ka&7D%IN~hfktq8hkHoXwFl7Rq|HBM>*kz~_OeWFR9+AahJ?Z}rZKxa+7GuYOM z)=blIeYi|m71s2$4kPHB8Y&gAMXdE`?X8!R($j@k(;7?QS5AY7eOh(%V+Dr%U>K>a zX@Z<<)#vj`p7CN5fkBd@F22Kpa83I~`Ce1APQEi#tO8!?vY1i!M7pZ{MRkw(6sg7o zdRa9hxF8r?CkjP>lnD4W3!^=7)gPwd)YG85>lV4y?zY6ddaI1#F^*RfL92`X2lPc# zSutBh{B}76?1iWLPSKE7y=ftYEd|Efn2b-c)fMgVP93c&b=Avaec2hJ%i4R!$u80x@$J$(%aO-l`f zO4eQXTQwCv+k@_PD(^%HWCN{U2I>XyWNKYM4cZIA(Qu3z+*m_kOZ-c_vbvR<)<{W) zJh9eg=zhyFWke%^MI>#gYW+h&$G|kW)}zzG6tbiWgLchv$!H{KRqb~26AlJ5>w_c5 zYGV2!qaWcgkZXad*nKNOWtXZ|T zBlHd%&am=JO|wy7sS&2rL;ABIcU@ak#Z8T?gn8MyUJn+9%siEbR>&rzO$4UYK2HnF z&LCn4K`SroKY&tKff{=*Xe>E4d8{w9ZuLXq;Lrg}B75h`bN#62d08*hw(nFeY>)Pd zv^6$0&c;ut$@(nswxynXiz_eB)u($l$vtcRb`@YHGq} z=Wdm4Qz+2wA_UnO7Kp*W#&RW7HNS7y5MG|i-bwdR2m32tUeOgvBrwv{pBO2llQK^!zdCq*h5KM5lX>=a7hIbHKhU--pL9(M)3ymwxy zN|F4?mfN>(7YlS$Uu#$~lyeHhW4sRc@%D_l|EEiLGgMb&Pdj zA^N!k)#TxE=Kh-^17xV0*8fr!Y1^FLV1sQ+A?#riKyUXGn!oc9Pk+pz-yv@0_Ht&& z)z=URacOq)pi7E!cPZ<4&zE}psbRt$dpJ|X9)%Bs8i?_eJemi>j`GS}+9%KSm^zWi zhOHXOJ2uojToW)eOGprVom66I8L5#?gUDYVK5m%_qZQ28<}4d0uk;^X(b1DGiq6`H`a$i^#LhOAM6?@+sZh@esIJ17yLri{;3AO&l~m`GXS&!C z>ly>^PeDLZ@xv>DEiZo^aklSC6_iD-Z$*&sJ=&0-y5B=R(e}C&Tg~v%>E!H)RTf;( zqW(Cf)K5fp{DaZu`(17i2j=FC3Vsg4J30zN@64TLw;t6+T zwGMK}B-%2Y_V+@xc1VpZoIRRheT)4Y_4-%W3`yJZf>fi7%J9`8Hq?Ccm?@orj^gCd zua9rfxvGfH;OGPbhgL)t3U7#OpG+-%DcB_*01`t-z7zW0obVhZ1=RM?E+Bdc_e(5n2uT`wt$P&zl_;5O{mg?E8IBP z8ZX<~eO*T?l+6ULP0BU=$~R1IA|*}3C@X!Fb|7bpDYx{*q&ePUm;dsr>eS@9Hw6P# z&X$suWHaP9CR$A;{JhL+b;E#4@FQZY#cwCxkI72&{u?y&$td_>52#hQ^tw}M#aDAN zc2N!)x|m;R$-s!!{H?R9;5ycd}zh%vR%0DeC}rFHyC5q^Bo2wOeDaid4>9 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

UOjXQTZk&j! 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

I@qldK z^bpZ|0oGCZNju`fWZ)IC&L_ecA~j=NqDu*}VPPzt{8F|CS|e6-Q()5YPX zIEPG`SUP^%EXv<9S1t)L&V@^O_Qs9-n0(jf>x|= z(q+7Iw-VU$J&Av9-L9%<3%>Ez)G}HQ|5o|F&8lNmb&4a}px34Y$tLK(B6pMN|0@vB zK(PO2-j()V)fs>8$;8eHbC9)CQ4I2!nL9J{Imk=@HhAyhFZ!vHV^NxD8|`F;>Zyv> z`XSl)Dxl_Gwxl=JKoJ_W=b>Z@i^1tFt~Tax|le;9LMR8#4h% zW38@3(Nd-@*)A{KhBmQgXnP7^T_5bTsStBmsOr{Hro7}(I}bsul2WvAZ8nGyBHhu; zOpS&8*`9wpm(>E;i`m-K!I3ZSY?65ze@ne`l5EjjeU7rv~w@G$FNnUGKqA-h}Hv=3Ae^=X6 z=cYRcxNiy`vQ9elbg|**z_R5eJ#^f4^T`H}iPR=*L$yubASSJvvQ|2}p1oM)iE^qJ zDwfegW;Qv-->Bej-U00{rg$(A%`Z>qN#U4ZFtvvm<6wlzz_OaWw&A1V?9XbCHcwRg zVvr0R7V|~o@4s9C@J&Sp$IJM47keMwRFC_d+NI=w_SRF;IaLe$x3@$uYp}z(i5o-P zMLfouMc<+gPf7KYii%3-EgOZ-b+*zQG&A?V9;U8+Q-@zqvVUCh9o(pfivebC02-2V zB}%pIY+JpOZmkL%&9|HEnLNYK7y^D9*(3+Wt6O3&b$Rid0BU^zp;AH5iy^DuSGgZ@ zU9>#Xtn=qkkPrlfK_sM0x}G6sDr;jZj#sbVuye3;Q!$uXIT+cQL8%#;#iXHn_7*JTs-*xx1xSdz z`{**cHRD=Iru-SRt2E<|ncg~;2Kf*;uaX5;JgLcVm> z;F}es3cBLD;%)ax2t?#LulU?2xT;R&6Yj2yuB(!A9y=9}lAW7886GWjhlKSRWTDq{ z>}4H!R>!h7qMzqMv`Diu7gto)Dn4Lkeo{jmN;oI7b)TzMDbVfsp~K5(6R{} z(7|Xk$AW%D{vd~Nw2!<`zt22-m}|EI#eQ7d+m*j>7Z-yGtRYeXmi?1e?wh^anip6B z^h4o1o&D}ETZ`TF8*}GJJoIwOf=*{XDAWoLSI?)q$=QI;riJ7)-PrqgJO60XcDd+9 zGt}BN$a0#=FWVjFgdQ(nc1K^#N9B$!`49*zypW0KcACDP7J#d-KT);#a~$B4&>y|{ z(CVMV`S-}Q&W}Zo0>9bCJ>|FZLYWCG_z+Z;^l6+O7CMGJgRnQ7-+P>U8vL(W{Of1= z6m35%cON!jLkiuOGI&-w;=7~G=zXU=C8r0Q1ExFwbLN-783{9ZRELu0XN>Atva6c* z35d$M_^~ok=I*hFW^jDpG=pWCyA7kYUPKX3_VZax zo=rR~XxP|FC`{!s=;oArTZpK#zjnh}b8Vtw1zlM8`y^4W_ii3`(`asrYsH~MFZKL# zc&Ux&jfc!-0VOyrl*Fl<^mUpjzukQQMiw{j?DMS@a$8*KZD^on#;A$p6dQgnaSBY& zrftq`#c2r=qlwG*+ex--9PcMWVs!FL>1xiD9z-v=iNGy`GFV4$Iv2d<*eAxy$(b>1 zo$b-%j(#45veU8xz+g(n*=;TBh8+PF#7W14dXs&k8C{vww-gn{RhFZMy@n?~zlZ4W zBD0q{iHvZ+$-UM_uZ8{s)<;H71%F4suetgMXF{p#FtTZ_saT2Gp|{3$ z6p(~5WxSB7T^cd*ST1+P;MypWP=4o)Z+ej-ck+n^pS*#8MW5YRj82vluycUhdlN0J zqf%gHIV`uDd2I!rdz7~*ARkM<$49=wJOO}X0~?#4Gg1!gttdEmVvkV?Y1FQK(RYb& zV(0N+Vn>*?4#TWVnB_|+RMSqeup^3>VLvz|3$oLo`lm}ueib~o)7DkE$jIK>d}`|S z7QZFh(=~-(Uvq~FI&KA%hOl9b zZ2$cHg2XUCwQG7&DktcE{Kr`IksHrU15CGJ@U8Qp7gi>aKzMWReJsnh3B}zv8~gEa|plNz}l$vZhPys zDIUtrZI*ymt**6Lc24o&XAsL-FWs|KXT--x&v~Go@mUm_749FH12sB|^@aUYnk*>a z^lK|lu7+Bn*JmqC=0*Grb*zTdLj0Vd0;5BkiV4releo+$lVV$ge@vkmcHCVygKAzI zEq%w5ghr>PG3~6gO7kJCj8}CltgIkLirM`Z^_yNTyTrnqf?M<9%4P0qn1OTHE&O<` z)8GO6rYLlQR%)>6aY;Gm*{ zmu8mvd3LrZvHa|0#}7U0ywk2Q8O{`YAFW<-PEP5*>L+VO>C7K`%n3L}s>+PsO#)zL=>t*li^J)<^GeHk^2i?;DWZ%?=rL zwsFU?P}blwN;tjy1kTHP_GeE5C6u0?q`>qKkse3KK2m)bLTyWC_uMxr-OomK^C2Aj z(OX_;x3hHJ97K!EM%7KuQgcmu3B*;bp1gtCcCppl zV74u0Pu3A}yQkLHI}`|cGqU}T2MxQmq}$sXbLCJNh3mn@MFq-4w{N8azUR)C8huEq ziT_?B?cU>CZr#kN(3H4skDXm+t6JPj6sPyIlxp{;yfkt#o4^Y8haQr4(V6t_YP?^903zJETZbvU{3dvymgw^1ihZ1b`HHoeR`tg-MYWo#1j zv14gQ`7O7Z{>pa=&1h5vQj6WaU92@pW%BF{W(}Jwdl+L7HtXDou%OZ4E@!EC86jz1 zy~E~y(!{(&;#)E4VD`H`EkrKq{A3@pmm?9yd7d~bh)Hy(H=f5Ag?fS(EmVzlU`>1S zeU0YoHxqRWJy84JloRESB?S6EUYWjR^I=d6OU)q}kdKyDn);#iIO(X+ zUd%LA8+(ds8POa(IjUQ6SB0BeMXgO>dkO^(Hfin+^;P{jwNB(%SSIw?3|5lG%}+D# zCE0c{vO!YpHhx{~_j;=$oKGXtN;G5mxRPrBEV5CC>h1UOqxpk| zM@Lb?&wZYh|4}BHF2^9pR_M!v=*3eGb0}-wH`*6Z1=fdMDUHRw`E%+{qRT0=w{B^}ci2vb zcf+P6@OvxInM981M3tR{~HWj<%H^*bKQ_HB7l~_-k*t1ehy4c~P zQKa_d<**=X>U`{h&PDGg`sU4UnxsQT(uwX;DcoKin&r$*0*{)b zihYR0V>#A-I939gs(!Zoux_GrlcQ%9*JPBc;Kz7=>fx}O>M_o*$#__I(b+-s$kuWw ziW29Bi~q9DgV=hlDra7EoFCMCJdDbceYrSy+8^d|5iefWHHTPkBjGMf;aJRDSj4Di zy~*F0{xvuNIcq~-xX+AhTGcES6L$U>UC_PQTus$^z14JaR9z9=mr`unSqZV8PJDKn zor?;7#5jZRu_cCB$vC1&NntcuRM(PBsZX zSt>XnfE#`+%Dh#*Z;v_qq-i$1BvDx9@;kU2T(}(Z(vjqxnEQtZ!F4Ug`cqDmj_ouU z$1v=0Vpgc4i0vGT4Y7$pl$3E{m#S2IP5TTr1V2^v^qh*BjdamJ!k-j+=dai|UtiXC ze}|E{B!2XE2u&7Gd040aY@_$HJDppx12jHw;CVIYwb=agXXS4rpikG#TpK0|Vk~nH zcin$C@8-LA<*K0~ddLy*ZYIg3e)x3yi zt9jrfiUkgJJ#Ol3>>Ut8}+0T_P|MKn!Exyy)08E)c8GcnyNA4pkVMj0)1iBmsk)#{z`w3cQIA1>~xt* ze!A>8A5qc6K$%;t4iw7&divGO_s$M z$**C*FY+dHSmTg{E!u3;HAa=~cN5>%RvK6%B)Vi$`}4^8ir+s=D>damB4Y_uNxQAE z2ANJJ9g1Xu3RKt7q6{aINr=6I!&^Gz<*NwXrd(!`l-4g$g zU?3x(K0IJ%72K~Qkxm`rtK9ZwL1-1>W=CL70ZwI$c@|=p7sy*u_nI)oZPM;7F3_HH z{_1C93`(mTPIWc4n^7z3lyl11nR~^4c`k;1yK+Ldr}hvRxS`p}5BeR~qoT3UhOb3> zzdL9+u{+cXjqeHt4}Y?6i)emf=_Q*GT!JEoadj-`1kodv0i6DOr zh>-DlI~@7?*&i7m8LDiUw!eNPMK{w0X6ywplsv<<+rD3CnDut`kc)EMvZHDsmxIH#@rM$jFDnvcI=h3(*1)6=EDAi zjXQN!zlFEhkn)e{Xaes+d-9D*7#JnrTPURs^Eqy2Y^GN0Pfui+=wahVz^iPbvlv}b)NJQTV!eXxxd zzzxxi=;d-bG=_P(x0DL%O;Ag&FOQj@PhlQM$BstE60&d>d!KR~g|Ivd+BT`EhnwqX z%MX`clM8{Mm38av^kwm=pBkqMqP?^FPUm+OFe`HqrI(>9p*v4utvBqO>-kfA0xbuO z$41*KzMI_}^vnC$akYg;;MUVGX7MWQl`urZi>EP1q`TO<*_qdrV-a;!3mg zM1QL3UG1Dw?h1VB=6PI`Fqfh4X!V7>wM6t{EQ&a&+my*!!-;Q~`k>nhvzd~N4g9{p;h<%`5FW6tUxv&_h)EfoWUC}V%k5Yk)WcL&7c3}Sr?qqRpcCR1T6t7;v)^OmsY!RK~!Ns;SSym4H z&Yt&gUH(LP$T9Nw?j?lbM>)eCZTMJ`qVM9DVWtV=T9{5UE0x{>HE| zEX_8TPZ%kZ{Z?Z{RvLbf^d(b#V@kb2f+usX1nR3y{+rIDrPG|x*wsSIY{9_yC5X{-{h*lo ztbBeE(yjH)5s@g<1P)f!Nsn*i!`}|KS&w3ik3y6KeZ8@t1x|f9-tue{Pl%ToP9>>keTut;kI}jyX)4XBUtMEQaTH;bA13lg~H+!{T36|I&(%foeGC0Y1 zhQi>>57d><+V5LG6R6y@K@<)5bD$&$h509kAPzH+#OvJ3$M-Q0p=Qq#m;=R&_j}9X z)~cyCsx`M0R&-&aO?W}hWB4d2JDN*|*(`wo)Doyw*PbyP$&gLO7Wr$wui?r#JR&Df zSLX^QrIxG-B|d?*1zYAPLDZgGT>*rqIlAt1Z=R{2cN|J}s^`A#I9Ly>Z%C??){X2j zwwuWFaI)x*E7}|raL#M6UVFWDlQgp|+X%e%dhFH9F_faHfor~Dk*^}-{$82Ub$HjP=1;S= z22<9p1-q(-O(FK#oDV{h!%0Vv`U8>oQ`w!jB3%m~>HqN!!EC2~lcsp_^!{5M{I|?L zeVAGidfku5s_M@$0)D6@m(RDpE%n8yIRdpi1UdPlUbBO3x~7pRKWXJY=S5Ee$L%7I z1j<*(ee8Q{?Zn<&8BWDfQ`?$~#;8mMZm$pURJjF2YU%Bdwz;in^S!KD3R!J%-0YmQ zVw8>JJPq`vX{Z}4C~8Y6f55*z?N`&u{BYJ;buQBK)U1XQvDaE()Y*>z$jIhAcBao` zHB5JFbA%&5zI=T`VJLcVCo;|jH{HF{0G%0rt8BK$rm-`*a$Js|DR&Z{d~EO3*)f*W z=PuY_JrGl|rallO)yq#-gXQ z3|caW4J4d+m>HxIaH(O~N}-1+&pn5>mQLtm@*LmVy8q;}GO~{k_Hf!9R+8P>+>+Z8+G{gE@9+ce*MoY_o3c98+$6;j|iwNO%h$T|m3L@9vTx;+B!Q`}y|KDI_@+ zTn^VwkF#1#NAhff+ILPyt(}t2%Nc2mSx!#2gP0I&h`o3D;UkiC18*}|Rnjbh^!#YnkNe&0%kxa_A}yf{D73DuOk%Ic>uo}J0O0M2|S)Lo@w{yb)t;_c5#@<;BQ$f?*` zi^=arB^TSAB^NSy)TP>plNp}V2a{YXTpLX#C`NCY{pgio0^x@t=|&pmMjDQ{x5raj ztFm%r+#lrgs#&HWl_z7Sr5@J^8oI+xnClV^AE+NLN}n!E6;_=cH{2{QJReYcA61p1 zL;hy?4Z8awl=1MvjB4UGY^tNC;N(oHa2rb0)HA1DW75ZE9n>Kv#+dI%;o)}ibJ{i} zW7Pv2TJr@Q_{r-U^rEQBkNd-A& zvTE3{osy2mZhsc4c72m1B+0#lt^$o~5~qOAPrk<&v{~OO$+~Yba^hTDx}5^sgSdF0 zIQUdINQ<8)Sb6dpmYhi3p3!)Y##6Xy< zVd8x%rRfCQl1FDy=v#vS~hlz-|nK)AMjR*J2++F_P`I;*p#esM5qJxgC|8?^ltW;xb> zS00XiDU;j8BB_B+6UEO8UYn}7GpONE8RC*DWh)&&Oeaw}!%n{6?+LRmJfmh-{&L~n zm%lUlW{+i6PB6Qy)S&6a2%=Tvw#2yb^QLp%o&Y9SiH6x{7iXc=FdSjtlGq5E3&8x36m+= zQKS}2DL<*eoLj8KP_D;u@lG|kp4&G}3hbh!=())*3ZA$Xuw7b1j6ok)*5{T(sk>6D z(j{&Z+))a%=SPT>U&wkgD`eg7lpnM>?#+?nZoh248qvg2_YcC!2o? z-!&bjH!dF-w&MeWII3`I2mzJJx*RTf?5dC%dNH#;(ljYP`IRyu9rPljWj4KCrbjj@ zn?cw=eY7TjxK8!i+QamBW~RhF4>_7znI?h>5}f|*F0dQzCeFExEgPJs!2g8I5&N}; zLS{#I2J2;z^^1oUFW($Z&Ar_XqIb6D)p*M7F&!TyTeXtZn(6^N)U~sZ$sMc%* z!Uu1a-q^@9G;uuaZRZ*$qjN?cSzh!*RqNcxbXm^})+jh}B6mxs%SLu%Acj$;?tOKO zD+s1JN6erR8#%+F8J(zELOAJbr4Gg~DG^&E#?TAd_nHocWe972w=wLv&SH&4DaW|U zL@bIizSTej{X6X$q3|XnIlO*&N?XuS(pWdUMw}soGfJ*+7@lG7KKXl9N%wo|A(_ojHfwBozwwPM@B zm3wS6YGaqm$apP46|8eaX=OW4gzm?HEgtIT%r0M}I43BVg`VL?g{ER4RNs zL|+pCgf^xRLx1x-AGKzd$4iT;yPZ2aztq&hVJ00nd3`SHeP4%0M(EV{PMzHg&*o9j ztlRr-FK^EWQR4pija+mO&|H3`$^c(`l_e$nlNN;|0vXJGTaPdAU-!BUqX5wR@kOyp zp4z+Vzcob2jPsoPn3jErJ88iTc*iy~Cubye4-40S`b0%DcxJQug^D;6so!nJZ#7~T zErG-%sy507PWYgH#vCxjA3YH6trpMaONUu?1O^aL7PF30o11E8_66#*!fQRSVMFDm`P6#yde>5Uw25WGeyX&RxV z9@%kFgAd{lsnZO7q-ntOJL5JOaMEU%y>UIbpzcTm`>UA+0K$*%zKHs|#2M^AYh+-X zO;6zNJmZKQdG7P~OLLAO^YQN054~q1(6syFhr@^7x-$M;{>Qo_vT9BoB%-ZI!PK-NdIdNfKaEaHdE7z;+2`h zo6C{h6$U)Gj!IiBv~zf9vCKraVtp5Ppv8FWTT(ZVx8i1yFn>KEHWC1SmH{Re>4*U* z!Bk9Lq{>w3WW=s3_=RFh*|9M=)`c^5yjgR7rqn)Id=z7YipQNUGXeL!Z|B_1i)jhI z%TiZA=#5668HcCF>EFQzJcVw&t|1QkNFYK7EjK%hQq}|88uYfl2>||@MP&8IFm71_ za2JLPzj7p+fK#x=cYGQ<@IWYXt(S-^MfL9GbFl_^3s-=@kOBr$qD9VJVO&NeE$ng*8u7e!;5LmMwex$AOw2`bLAa+m_}0n3kaI#?J7 zH3l?%s^@C)1b{F~6EEfd72vW?@rTob6v+Udjc8^WmcTAapIrH1Gy2^23K0IvOgH|O z|EafaA3G3Q&$^Wgwz^Ba1r4PUEXUIym`M24m2V+AaqeMet_Gwt zQLit+Rl7&~j^_{?fx;my z1cN3ZA^`x2P|fV>wGU&`pg)ZTbhZ8CZrZ*{b}&_}df1F-fDsGea&~ohlb^P5SzYuR z;JMVyQu&P5HjO0Q7&Qls$hm1u#599pPk$kHooJPUL`|-vU-A|8O{yoC2N8&fDx_(y z2XtvG-U$B{h7iKv{z%WtNA|aw@I2tdAj@@1`2}#T58H(Q00aSfMq26pZOx*PYnNN# z`O$>sa+tTHj-qa>*O3eP2kQ#L$wBj@Z3Inf1xrBk-h|ub`C}2U?t#~YwS3HNZGGcp_4TeJ6pA#&JO9U}RK{;-D z-$uH;O<@P84~3FTVte+%PVSsl^%RXXN9W||tQh9d!{PB$?8y#x+8vU(i0QobP}-~+ z__`cm+oyrDSItDF!Q!0>Q18;LpL8M5kypi>uS@$Z7ryA$EmMUc3%t-ap00IIu zQTWIb^Qs2#SB*YTfXjP~!J4Q>&*o(qa`3j0B4qdqOR7?G<(dtMhz~1-imy^hR1m<0 zK!^i|DZxDwqAiZK4G^Y$NOBHhD7XQN$z>n3z-S~rDfhxq#tES2@WB3YybcIOUWX+b z#IL^BT9`&^i|2>}MBOg8ACnke0SIg_k?ihye7PN^92WL`la&(5XxyNVux{H*7X{{5 zrdpjozmt7*9iS?{TI(c*qmBO&DFFtK%FXX(ctTzekr{uz-z9m*E`gaWrchnY!=iDS zGM;4$InZ-u4|RQ>PkkbqIu7irp)%&}>%!XSgqLs~-UxaJ_#(hFt~iLRy~L(@eB=K# ztpAACml5Lf;eTM5C)a*8L2ZxBXGi87q*MZHiPa(fV(W4RqmrENC>%LaJXGFgtyI4X z{n&YHKx(h8eccvm2J086{7&Dpm7I6aou0W&5FN9(M+bth#g$&G5wc}JS!Lz0m{PYY zWRKe%szCrxbC-0FTv`*OJ=9Xt@RJ*fi zoNNX5x6Hg~&340i+GvuZnfA?o{2Do>e4ix2I!@7@XzpBkneiKEGp{0=Ama4?$k13U9?4irW^n zZ&ey=m1_S^z6%JI-f&4YU_UU?NaUxw9neB;iDI<;(p$ZUn+=^14f2xJ;hUYgD&Wz{|7q=Fby)c9Vgb!~dcrOWSNBNrfymL5D+T{Dd#;sV2A&vtg@csXz4{TdGTKHc20M-BWfw0{8vD%SBE0R6Oa7MeO<`A`e;Buy3A1VA!r8? zkP6=Ngg8azk*+fdY?*A9?b7CYQKW1Z+K`D#cTjY6uL28fq?Spq7C%xR5nzL`w>$#L z#pgTbPRx&Kj`>svEBSNpwEt~1z2iv;o)j32v{;w7`&RdtmF^713w+QLstk_mQyCfn z5kB-UQ_GN2zhr>^nu_q+`8&X1RORssxEm5@yz$|ptr=l-?4AtttYB;h`CBuLR&`&{ z7})4I@XOht*G343Ml9ADve~mrL9mF>q~#zAeU%9H$JxzY!tX zEg~vC{ozdK0`cLeU_wAZm?zyX|3Iichdxz?J{{a15Krd?|IHNvPl$TZB`Nsz&E4o1 z*ED4??CX^Xqq9$Y3OB&vdDZn4b?;N-{54m#yD9|ybpk*3U9)MdG_CoS1$w0^{vYl( z{k6VQZf6A1W60W5Hp)WvZjTbZnNaomZCRKEYMa%KLg<_6|K0-6u<&}TnpkTXLEWRW zlw0%9|1+{LI*Kn_JdT~ya7X>vP@fWlQ3wSSA!`mqWv>BLH*J|+&2j+W%G-DT z@0Fn2YMtHnk~01z>HhoGKg0KbqU?W1d9#&1;XkN~n|}klL0Nb8ZXrcQ_Nfv94_o;J zYSV4fa#{hwC%`9Iu3dqTUEC>!oC_ofMQ7*epIeQ=rz_V-J8$GU8Sbl|lDN&)OS8Fd zQDW<+J~o}Q-*M{#Jm-&J)fl}#iXn}-RVu?)bDtFS7_EI&(eU5QR9U$PxY1J$JXgHpQx!=_n3NF4=bjN>voeP+2n&l;djzKKH_crYkoyPH z&P$8U#^;KGYE_;yehBKE2;;%KFjqkNF4bV1n8A}niHr? z(b~GTNd?tn6ba5rt%3mHUAu4bSZ7$}?RJfKFH7!IK?AxldBi(`gdD4AW%K7HIX(?t zK5w=&sU9;%Ors3hM3*YB0qH~)UU;-SJ3^wYIs2Z2Epdvt0)R}WIcOcG>6~6>X!)Ht zx^K12r^n94Is&P4CmqrRB?PFNr+OKSmM>n_ zt@zgpzIRIGm&r`pjQWrttDPoAh>;UHMOU zRmrR8u<6f+LoCnO)`UNas6QNVWEj!%r<_KLsbXbx6DrRsi`@$hX1JW>+6 zFvo@GtXF{zs-M2|oA4~zMg2~IAR~`%UjU_sXhN&J)u8DvWl^;xKL zPQ!@1PlVo987&~D^gf_!{4NkaTWJ)`qjw{PftD5P+eM=$0odZ1y(U8Lx+*JoUhEq+ zuuE!j%Nz|#4J3_nLJ3nz06gTFMMVx9_mA5UM_DbEG03>#-7)1D^~z~cwsqEI64}xF z>@${oR&8X>1K0JVEAw^&HC^kCbvQ!Xp)b7hQn+R!mbmkE7U$KM~QtZTMn%_f=; zF>s!~LPZyyIi~B}R=m87$kVP!p}2H$Ai1D`m0Cnx+)pOHw^x>0BwLN)V*gU08nESi z&1Nq7=bL=O)P3;5W7hW|^8~?>0A%}8``7PBfqMyfhW-C0{Heb4GS*?an##3Wt>)Rb zi@E|v@am%1t*uXbn80mXgMqPM|(0seHza&DGWK*kk$%$sVN;FSgVfum z3Nt#JV>i3l7=y+>|Cxo^n!(^&nB@E-N6SyRz@k$9FIX|?LQE6ht%I}XoV91)}OBU4Rka%^MwJWo zT@yN3zI6U|^@P9l} ztAf%lfOQyXzCFs4(Fyz%eJ6d@+hy#EC!28GjGeo-%yda?LC%Lh7mbhFsxRUuy;@Y$ zGtlf|%qtUNr{vm0>C9VhiS?!J2BUVvN1g>|ySb3$og%9ak$TYx0Wo0y18a1hibu1I z^621sFm&#@*pg5V5wc;%->VF6tShFxkt9rG@_H+1SbuWcN468VCQJM7lBAzNBb zTEh2K#9TvX&yqPeaxc-bNQP4LqrD+oYKr_YvQ5nOtr!P3tM@ZFJ`~-#n;*EVi?Lze zTP_iDTCMkYF*@D5d^;S@q_VE8H;B5|E31r0g*)e{!7RXzQ@W71H?&=7+W1bFpvJc& z+V^1=jehmfa3h_r18%Jk`5Vq&XB|ERx+1;WT#>x=uaec7E2$#lZrtwB0Levt$PbzQ zfV0;M5$4Gm>o3qjJe?R5tw`lzMXq`Fa8-)^*w}7aS>*9GGy(9vL7F2$PivA{%u%fP zf!iUSX6uyAl~z}lMCT7LQ8ZjE)`yTW7Q2C^=DTI&hgm~7326p8?Q0(lrXy>W=mYSx z`PMvTMi*GN(d~&H_rP3i@v%30&E(^KH}{)EBUK5vS=VNNg1GdN){^ge|Ko^CINDWI zVO{!?h?BO3>V>?B+MTj-IEiY$@l9_WdJ)Vvb?`>bd3Q1)fZ4x%Z2L+4k%`tqIFkQq zTirIG*uJSqdK9$fYge4q(@DzRWZN*RhH2Bex|$g+s$WV zQAB>ZKqL~wzvrH~rwX00RKk^w@ZU+_MlE`TiObZdgt{?SO0*;;nywGWS6l&TD2*%fTGu$tXum?;CSG4XwvO2v zxSLKZG`d#==2AAzn_DVI4iMuMwJ2gVzc(Nyesv*eTlUoei z*`xDqIn>sX2RxuX2Z#@bR5@Y{JtO8w@xTh*PHY{CJ)~(1vDT^zS#{dUj$?7DfV)7@1^iLrqR zn&-BN9NAz0>1!kVBJa#!YP1+lxl*|m#-Hr%FQywYuIM znp@A6;+v^yTbWY*+2$r`#rcCLvJXmPR}vZ;TC+5p?1Y2|dA-^B<@B`QaWryE4xDn= zZ_#re(h?%PCR7HB3Jocvs2ih z6*)OI`t=8jwUew>G-GW7(QKgdqo@eoMF(DvA3J-G4o?%~wJ8;~}JLpG02sxw3~#)`lhU1DmpHQz=%3$A-q1 zT8z?WF>zWyA}zeFM%LtZ@Uk`!_1E$?{cdvK@~E=!OrFiHEJN&mBR}{X7cF&Tp}_+K z-wMNpN6=Gv9$_7YP=>rd=fL4;WX5BG<+p6FLf4=?DROIQ-yjgs4%=zL{F%K+ zgYbgF-hn)HU5(qEo)qO8EH#x)?@8OtLODi3YYV14%_jNR5n;9g5WHvL&jLDWwd$h2 z5Hk5a={N={)?H89miA7p59n3je8BXNTejBcHL*dhp6Rf#@FO?I69q{Wa!u}QeX2}0 zY$o<%b)js)QXwG>g@J0+QNG!c*pLHWyC%;R>+-QhrSei63l0z!}maWo!!c?B+==!X{QRJD_(&^CQ!1YgZ z?5AXA?;+xn`F*g=+RMtuyoQKLMIMotw4IFxM|~}Z=^qUpcn>l-cFArI6cUJtE8d0r{k#pHtD785IoR0aNVm@)uI2A>;JnZ6c5&fmaPvrOTUe9 zY>ptxCQv)evepuo8ncI;==xG^Ocs^K(&DV+RK#2jT+{IWt%`K91;#)opZ-#K?Z$fb z$VqAY>FnavK0p*}dCqbh`0y5CW&aW) zN~No)tZbmyA(3UrzWA7|$1kq;d)#PeTlrtE9s(;$=)0XODx1}^gkeQ+dAlI4+TI0< z5+?&41(r1%9UcQhB5)@uu!5BJruISM%#B0_{0dQ>BU!bp^2vJs>>y*0y$E0y$ciFm zlZtBicw4CUJ1C_Z_-5xjfcX{yTUGmL9$X`t)#YQ#U3NS=w#h60zeuzXF^QXfC>i5d z=TYm*Vko0dxz1>34b6^xWs-8UuZ(Qek`)u3kdUe9mu3hfRY$!nmPmA;=gA%5)1&nX z77|q*I>sBySv_2<&)opC<68VpeDdU0rZBU%mVMkPr@!M1b1P0hCC$hlp2txT^Sq@i zz+rTd%Q+JS!!aqVTv_~JR%j3WgRCpdSd-gO6^W=q{)!>In^xtaNNXMb)cWhODTj|8 z2@%}`92k_ZOfJ*Vb8H49g#Q-cFF(z3KVlo5uxv`Zt^bF*Vb7%}q{bzHEivb%f~jtI z+eRkSuK_9ltuXxRp)6=*BwJA%(?~nAFn*1!PGo4W{=tdGKZjPqWbDRuE^q;^lI(Qg ze7G;QkO-f;63I1EVo7AKHBz7t$#zCb|3al0!MMqxAm@Ed{}B+ z;J|RKG+W23jqo-QBmbTSpp?Nnp;soJE& zW=K4^28y@;tHvxui^JERV|>GEd<}s8pTuTG(w&i7ls_+sYXDWx8?X-US-Pmm3gF?D zXzpCfe;*W!7o>%OKjfEG*%LhI^ZD{HgXg1VN_}Er_~HK-fqsVD7?p6gRr<6jwN$b0 z7UP6_5p=}wAx^iOz55A_?es?|~f%K0IIhJ`_S)ZSBvWgP` z^Pvw)G*vPT;}tw?e$Bw(r$hh12yi$Je}%qLl>O739F>%c_=F!%zan)N?cJKqHS*lh zvK_UrQu}gq%%_8teaUAE_BGEXl27qHoGNh~k|qLIfZa%Z zt0A4b%L5c$3w=-*#;sghxdAFr`$$dEF*+bY1Rx%SD~Ukj{1yx`-K54dqo%J zy!U6h3JlA{m1uUfYm7Y9l7@v~hex%W@H&(GdAd=}i z6|`2ePkg<(er_p&uvZ|cyAJq^Pup?*`eX3~+7SBI3qKcy-w0E`K_QgPn?S9{N_R&c z9|+&5R2Jwhzxd6)Mp)Ih&F|(4rrUy+->7|tw|u@nAR{R33kpJuHK59wIB8p5iH1V> zXAC+?XlX&Ra5X@aqo^4}{rcJgAMJ=*;n)L_BrEFUYWFPl3Zp{F?3 z`n}$;%jFp>U~@8Kx=+4v`cWE7Q8RKebmJzQD^0SJCitw-8(ZcG_1sL_kV3TPgM9{j%i{V)?7Q zJ3N!9YrD+ch<iJSQ)(cX32zm0CA$0gMCSp);SgwY49NLlYB>J`BY8%ZOQr#d~JzOc^V$ zMY}sLDZn4qODgb_@Nq6kz9hT09$&HnL=~~#9;72Z*OadEIE_1Yq5R#3!SfW za=v52H>fk@EOw)HT5>9Wm43ikJbB-P(bm4RLOF3Md04YVZjuXh894`2hA5X^?=GC2R-5lR@RG58yi~`CmC7sq{ z7R5bxH6(We?E)Dsg+dfu&2B3x!Ra;uP_j@wuti84nPgs^eXUDff7v&xGBUck1#=Z3 z6CKi1QHj&kyU`TCW5nfWpWRq>vLdv$$YMeR=xTYgF*kH#N6uXA#|Pso`IE}Ey2B}M z%D`$24IZEwx9up-cnQB?z88z+G_F_rkIq*!v*W{+OMqNY?6^F!gA)$xWB29q4CYRO z5||XO5W_yELX@O_>b~QGr?m%T!AJbH_&iHxqv%*no#ETD_=tLXM;8Ki*0@r!jCEq{ zK&K!U1`?#xOst_$PATYxqK`mMWdahkeAs_xXxbQBA~TV~KVR+A4Jnus#yPw>sPZqt zOH-NQTv{s4+12mlJKm@1p%>onIFZyC6G7x@ttysZFKqWb?x`%j=~El%F32}lu%-(7 z#A62u6U7WQ-&f-e_AOUygrOPnc~(!uE*JrdW>27>_Y8C1$Rxf9^GYI7M(UsKTfmso zNPiX)k5H0oa!|*?$g)+85FY?_tp1Uw_6R8v$IE~GbOpJ!d7`SDclYohV-Xh@x9@QG z^dx6dY?0kf6`k-trDR#DyRmnDP7O>QTzJ|-mf%_ha_J<40{=Sm|8|)_rQsjIEtBYD zOj_rcYqHDUr{YAJ=Ua6sl6$;Zn$9&4j~WyzuC>_X1bToJnD~m1?+~LJ#szA0(+aA| z2osJq!0sv%^m#zIhwOIL5BInH-n^BkUAYC?wKiz0MEtcbH737K1Ho({qzTLls1Pd% zTT_1SPhiGt)OI%CfF*}U7`Ptv5# zJZ_@wKLFEc&X*}x+4?1iPp^&+tC6FK1Uk^xt7iUvWJ{Vd;B^=7h8OZ(>u>xN9-#+g zrV;;Y>gLm&xpAlUI*vU?IPwnFV3xJ`*?IZzMC>54N8YZQ*HsT#o3h+0Uksn`UJTy3 zorP=^yhD*|?2>IAc4mIl`lmi`+2Y}4hQH+uZ}0yM8RIQiZWWGwk+(kEE^jm_ltPfu zK*%D1CzNzZGOWAgccmw*3@oMwOl$Pq<>1>B8aBCi^rW)oM8;tAv$(#={-&>&ctQA4 zn*<*j(I#iut{GrhLm~Uc5y9;&h!?k#qKF^>uGN4)56{@xrf`?A&)&5V)~O;Yt+mpYDX7QQp; z-D;A8ipD)Ohkcl)0&i6KOKb`NAxervpnr6O$qO8oKS>*esCII;{}dDwq?O?3kIBmm z6`uPR@3ecXUbuXL*W81@V$y2MBqdJRa?dpZwl|~{y)`&=KOiY!t7eACVE|&HV z;+daLm{t4N3lQVFbnT)=-n;pkY1f>M)%eFL3LeUuCkph|p0Yt1tj=W+@?GE;LJDXd z7D;o+{qgHd`V9K&(7?kvcLO!-I7QaO`{0XSN@e{cFfh?>lfOq=0bQ9Wfysb@`b30 zi-5niCgsS0=Ka#EGUo3v?{cgQYT|)#W^~biB~H5_GMG~20?%LZ{C=s_0}zhk?vL(u zvw=!jp6~ZoZfDk@@?#vke<#cNpH?zmpy^KJ-?DJeTqmZJ0CHwGcIsTIlGYWx*fsCE zpQ5oGGBFvNG|0GaHsH45t|_&R!7^ZiEXo;}puX`&Sxp&d-(NZf88k_!e>p;V*ZxMJ zA3*@|ETFHd&7g5=OFcTMsdladg{}fF1p0YmG}#O+GfLtieD|9_y|w1O#6r@z_c=GA ztV5Si`^Y+0!2Ps6`I5-9k}l@EW4>Lv<$17R1yBXNb?qzs>=&?BY-PIjC@hl$rYv~h ze!ylpdeozLi{$Y}Cgp@eAF{?wnHfVx%dE;Z37mVi4XC*E6#1CPw=va?deZb|^^#@-DVp|zO z_xnFvtvl}$k?r#s9wN^-7hf`30188wb8&43GSS64UCj>(TEHijo+!V~X{RtU^CTA= z2?%4xxxju9P1peD@chHq8M0GQ0L@o$3PpAMQzf z27n3fCE%y?QhfH8L+@URhY@or1N4M1?s`@(Tt~P(vIoQeNJxARW&oD{7ac|&Cd&jL@L(W>Ge)o0v0qF$C(dn@z-1s{#h6m%bPASXoSix};8q1JT zYkkJOU2R)`H1{l6$N+(i5GPOMh;>wOS#24#JBY*b*L|?Qcnz@sh9n$7*MCVrW!Jth zMB(0=Xlw5$#3eF$s;tw2}Xv9!|;1*@@0R@5AP` z%YZ7e#7>=IG^dNy`b+cqTeiBZ$bUG5BboyKv7T&tX98f-yucE{PfP0$?xk9j5;F_9 zbA^Ja4q#I$_!X>X`pOY*xW@Lvh_#dNz0LCSFt=DlC~b`qWOXfircMO&AXPl zPicPDXO{zoO;Nu}Q;=Bk&H0e!P63ruS=Q^n7Eu&m`3-fD;b-u^6^z<(%?%o9vh_70 zXvYbBe!EpOcK(A_M#T(yVr#XH0-uA^(2WQ)g#au>md&mHzE>p{qzK?Dh~gN0HDn*O zcQv1!4;D!0Vy?@nH zer%$le4Bj$G*pB~9e2#~ZO1~YTzSAw6j}DCanO)D&ctYK)e$8JEL9;%Q84?D zrGl;U7SNUcmtRf##xPFp~pG z#+OkJxqN}%1i)@Kg@W$=b6%2D*xxwFFWujN8cDb-_CMK~rZav^FlFynVjn?{>uamqU6MdGoOf~Ywp7XXwjt&U9SKn}8O;n+5VMR3 zrTd8T$|6PGD=$j61(m0_G4lPjx5u2vqm_fDZ+yXw#^y)MhotX@(4NlwPRxDb34haR z=HY%(Vz{$X^XW)#!my#^C%?xpx=HQ%J|5;8&YE2^NN+*)=?JNStN6Vprg+~s+hY6k z1q!DUjQGcn6yKbJcvPEguhqI4VXh-cY{*{aZuqN8A$2)VRUK|P-+iQ0yB<4qn&_i} zS7_!(Q9%ZBUDrT?DbbBUrbFkuZ_D6J=SR|eh~QV6yB)iH{dJU^V)=!%F z;c&SA>Mtj+@%-~daA!hgMmW*QNQO{V{5?9k!;@o=YxkETJgZY&!QIXySDo*69+{kY zpZ?$Xxl)Nebf4L74&|&y7;fKNy|X#A)!l?=i0*E)?#Wmc^4n+1PDx2Cg;I-IV%p!s zey-g*zZ=1VdFGdjnN*z+JYb^BRVq;mm~g#_O7|D%hxCTDmlz6AhtM&Sv8&DW-g`sk ze(19kHwz6f^*}5tbAn{D3aw*Id@s&KC7`P<$9K^4!wm5Nf!z>B)>gUf#O+#$Cv9~5 zb`|OT5?kc0`1D@V85QZKC1(theQ)V#KF1?hFpQ9gC>IeWOO;|Q`xE9l1y??x%T9u@y^vuy7G^0dbzo#3K0zwBGYaL&nXLqu#m4R zc+KZ7Ee0xQb=!Na8hv@71xvaTI}$1y6Flu}yr)pN%#5ncmMa^yq}wq^~-E(QAkDQO8U(l%TJE=eeoj z-I7AwY9InGsUJiC(yP6s??=;UGCg|Gd2?yu?HV0s)C$bw719dW8~^X~b|JILU0|;c zQMmTCwYOyuxY*Ps``hJQBJK!3feMxY2eT(~YAnRSaN)93c1zH+kXvTiVL|NrGr<06 z9AiVxkb}DM^gc?lrWByiH|3tvIbc)`Z82!sX4vo?5g+-ME2KSBpd^58NYTRhvVIrr z5*hluyEQU124jT$$ZIbYTRn1njoE|;>=?TDR4^q7USVL`tg926>5Y>6@@cEm$x$-x zT?pk-(3DJS!W7bClt9SiQ@VwjfZRIQlUmz1_k`5}58 zxp*wv?+CZG(^`R*K41e2Ns^hc3_gB-%gEK;-Kr(zVZigEE))v2Fg{rya83GPbG_*> zqvKg1GoTFRQ70>P^zAJ@QH1q|kKYqK_rytMBw&slnx3a6xs zLF<|E^GW#$)3ut>*ME|~5$+1N;l@59Kj;rnE^bq|++~_*;XDmbO36IBkmcZK{|xHj zVG~83Q0?)vN4_JY;D^HoZpNn|M(d8QPj-#NT){@G|Egzoo5l6xi8a#qqKOpCi7*Ln zDQclb4TPQ@x_RV=m^d<2nSAi}vJUU4mNRK&I_s5%M7}eH=DbgnMm@M3@`fHGGJ*`v zdEsovRV?RvLo}ZcxwqaK#KXQ9m)~7mb1EA;_Qp@0Jy%cCUwt?TrL&eSE|*7<_4u0J zmU5Tk@|$x{pDDRVs#oXwhKKQXwj{kIR%H;mhSX|GYtIj(b}j8_@aMofl%{Q!v6kP4 ztsbtqa}I62$%egN7bzapV{dJ<)j$x(KQJgi&dWj0&C?E0v8)QV7(|gd%)aQ}agXEq zvIkAgH`yuNsKMN{_Q?JKHVg4D_9UT0*l|)?$SrQC>*ebCwhI*Jl&B3KzvD^X*DBI! zY(cYs|OAv5efQ){g)pQK_eFL2_I7W>)hWaAEazv_9yhED!DiC6!H< zc6>s1MIU0g5AjPl<&K6DrmQQeX!r(e0~2d5gBVh*ynXOhneXAv6$rM*ThnrpFTJSi z2gkjh+Wow>Z{Ob6Sl{}R2TeBi;vbA_WV-X|!^VfSz$IzT{J}5ght@&+gNSB>!O8n7 z`CncXeq$OH^l@^#+7L$3>lT*h8fHU}{RV6G$j93x2)dfMy^g7HPRWp!M>7wx_aaJJ zOMhFwDT%H44O{Iru%lF_ld;N4#w+B=kEM2^&kE-{B%`S48zbuM`||VR_5H&1#?7+_ zJw=j!WO}CKSceS`+j8;+9F#eA##yDenhiu7^EYm3R4%`EjCc2eCo-m=Rl6@ioPT#M zVKMwi+k26z7*$Pfvqtky_eZNuuW$;~igRtwDJ~`YX%4RF>|J|DpVYDQT4;nL)r{bl zNGmkVvEaC9Rv^D4*{0`0T!-F4NZJ)LNM!HMo_4|+SB|1^8&Qu(tHXnmik=J*O^KV* zMezIiZ|#!ScZ<_DEh7Tr(|tDUENeuczQDdpI;>Zs{3P37UzZl&9_3!{i#GK6=`-3q zb2n*aRa3&YLN~p|q~IZX*k9;($Dl}0{3~i7O`Yg84C4TwgsP+EyC({WRZi`JB?%R% zj!{)s*R&zkRgn0Cl#chxTu%3ky@TgL`Kw6uO^uON;|=bzJkqtjO!k#hX3V*<|Eu zPz1hk=om2_xKL9Sqoc@W7RNp6lhT8a&-TcV?|-=vyewTZ9QhE&xRTY9s6239S3BSP z8NzO~NQK?sb#{7YB}`g#c7ABz%jw?pUD(0&IR1L5ML#R$*Q;X^&!7-q*gxXg`pQ4! zS;|Wg_S(#Lol(3Ce|;j!)dXkCvcwL_y?)*n`|&D~{R2AD3wvGgm0mP>)ISiPOAG_9 zH8|7sA|T~W8iYprzk$vPDuHjV(tV3un)P~fP5<7c>p{`nnt!+I%+|e#apBDx4{x7> z%HO=P>m0U9IL}h8@w~6sOKzWnq+5F0X&1@Jf<+KyvV{K;Ks2?3X~-DMD1bmNS$i(M zj*UsXn<0o%!boyH$ZpaO^X&{dl&EHImrU%WixAu(~U_yiK zU0&=b!$eNeXObz%dFM+UyLpmTmXgRE{#3qs=G+zap=~y8Z*jNunr;nT={V93SB#OG zRF~bh*Jp-|S$gK~3RwQyn)syj3*-CDayNX<9bq(*D)ktprO2{zDyG}2E=}~JU490K znmAUoXRfQo#+#z#4um{y1Mauqf;K$RFt3JSA@t^q{mTZC!AW}+y9{UGa2;Eo2IE!QZsCYK7O>?QeIz$cLR+J zQ?@ROju6}PHltek+S#|{lq6&T4Z4#KKudY0k0Iaq2$76{RmGLK>HIncw7-!lq!e7U zR%YzKB{#ISS*~FC-$2sG;kG8yg~{o7OZZ0#K8K}lLS(gFwyAz*i)wE6rAT| z#n<03`NX38OSHa!TndWdzjjI5@%924E@?j*nTvj&8uc~G9robE+?W;R{<5){l(rqY z{q(x=eaZzRNqV{r3l&PSuab24dilU~kDh8=2SrGkV6}(bn4JyAH`nKvhjQj8mN6^k zydjC}b>k~WVDSb(_grb;nx-NbX&-SDB{k4`kTrA#5+2_BiICW>7dy5CVy;o>JMy*# z8`?wt4Cl~+JWt)C);}dN#-zK=kIyVnV86+hCu`x_QEs+}6g}$R4ygu;B?GsgypikJ zurgMR_Nq6Lxo1_O7_pI~sD^Nd{XXXq`K8;HJM>*(Cg(lq`j?BEFjSnMH<}11P)%ny z-)}5M-Hh>du0N_NSy$ib;$8~(ygOZWcNX@otRyB=D7~V6aD<(|XKhdH4pdB$%TI)V zjo!@G=M3M(#TYNM%aO68`LslO!)CK(4O+AEnKwfn${#F>)m!c%qql@OpxKICf*ScX zuOSwep6B3XHO@K~5*h*kXXYR4e#MLSP_xKXuditAU$i3v4+cJaO19?#7?q<^q#-bD z`8L^C;QgR-4Bx*#>14lc=NGZiit>v?JQ+YOh-v$a|Ld7 zx($C3x{bEn&bEfkcRH#p#$TwLC{Ayha)ymR#a2u&FzIiK9b7eeT zL&*95_Ks?vXv%bTK4(g{Vx68it1p(Ro|Mc@I8D-e@C(xd$@{M5VUBlx<7s-KiA#PC z(4NHZK#A+4+6U_7=|b(*5vX_8FVNL9_w4M_13tlVPimjz=QiRCTczv#k3T&ios!DT zLT*syPkpr0#>u2zyMDd8z&9XZ73oMQ4fk<4*S&3gVQMS2wEqF%-#-Q>Q3J{6()1`V zy#GAC(Sfbt#pQGs&Fmc?E8gVwc)}+`b zxpJ)_NO{BZCAeOwSdq?5TH{8hd=( z;@&iwRgABAN(_;i=Kssz;;d{#OFIuvpvIlOO(PU?;_IYdibmMia! z>TdL*W^lj<(7A4Avoj>5jrv6JY($aF$Xg?j@5+aRM!sxFx8j-VEHm~JYIKvwen;ae zro?RL>51UxosJFyJWRWiyCuI8`V*%0*bDhu-?<%(8i`<8)B1_GN|aSMu1Yza3s z#_5StUZ=Z#5smzs(n?g%n|jo9#uznImllW?m+3&fEiufSEcQBEB^peuOFm40 zjtD%mE2OF-*X$g`ei)jd-I@*f&JuV4^Rqu~QWcQ_LJK>If$gcmpfJ17&(Gh;o2Z3T z$oF&`?C2ZOjekcASzBA9sVgFo3CwK+0|VEeAF%vES=x5QmgG}{y;_Ykr!|j zSN9gDrl$4`&wX=RqW3?DS?_sT9;S>@Z}jI&N{jw-v1E2{(b~`WmK)*{|E~ELEi(z+ zQzDtShq0d|D7rwJkfM5CHsAX_^dK%Z!vq!)urAUQ#oL7UDRG7s&b`hQ(nhnoxhKxf zzn)~jC$DrV6?=&n`ivYqUW(2x(U@fcu7X?!-o&AIVxdJg2L6Y z%dOQdGeg_22bi3GQJ`7P6>%QBEgI><0)eZ6QOe{p!c!U?~B=u_#jSF?mXsr8OG*Z-su8`TR&)7W3M zjxOWHN-B_f2S`>2n7iFnR;4DxTd#W0ceY%Wm@*`Ow-68cm_7ow*z%h#8s&Y-Q~iqs zjy?m=N#>~hJ_)n;JZDD7oJS1*L+#w>dxG3LIFPKXO(Fwn*s+?y$ap_uH2?UhP@3xj zC>+lnZ)}bXoGWXb@G!<7ALFT80KppBA<%|gLat&bk2rn<-bkL#?(lGY5?SCoW DnF>aN literal 0 HcmV?d00001 diff --git a/doc/src/JPG/cmake-gui-initial.png b/doc/src/JPG/cmake-gui-initial.png new file mode 100644 index 0000000000000000000000000000000000000000..062bc6ba836c3ab6ecf7ea31954362e0441353b8 GIT binary patch literal 65610 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 Qdh|#}LP5Mj^xLoh21O^{O#lD@ literal 0 HcmV?d00001 diff --git a/doc/src/JPG/cmake-gui-options.png b/doc/src/JPG/cmake-gui-options.png new file mode 100644 index 0000000000000000000000000000000000000000..abbf63494612a88e2223d28f12474d28db374613 GIT binary patch literal 139088 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%0D<{a7Fy=k^Ib=3D?a7SjDP`1lsM|5b+4JAE;3@aP z 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 RQ^Fv_Jzf1=);T3K0RUA5{geOz literal 0 HcmV?d00001 diff --git a/doc/src/JPG/cmake-gui-popup.png b/doc/src/JPG/cmake-gui-popup.png new file mode 100644 index 0000000000000000000000000000000000000000..d623aad30b4be2364a466fdde4af5241a0eb87dc GIT binary patch literal 35224 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 R(+B|}Ev_I|Bl08g{{RbrU(Nsk literal 0 HcmV?d00001 From e9af15ebb4b602cb95cd844007f4ccddf8593215 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Apr 2020 11:55:45 -0400 Subject: [PATCH 17/39] start rewrite of the cmake with LAMMPS documentation --- doc/src/Build_cmake.rst | 144 ++++++++++++++++++++++++++++------------ 1 file changed, 101 insertions(+), 43 deletions(-) diff --git a/doc/src/Build_cmake.rst b/doc/src/Build_cmake.rst index 7a60ffa437..89f197b25f 100644 --- a/doc/src/Build_cmake.rst +++ b/doc/src/Build_cmake.rst @@ -1,68 +1,126 @@ Build LAMMPS with CMake ======================= -This page is a short summary of how to use CMake to build LAMMPS. -Details on CMake variables that enable specific LAMMPS build options -are given on the pages linked to from the :doc:`Build ` doc page. +This page describes how to use CMake in general to build LAMMPS. +Details for specific compile time settings and options for optional +add-on packages are discussed with those packages. Links to those +pages on the :doc:`Build overview ` page. -Richard Berger (Temple U) has also written a `more comprehensive guide `_ -for how to use CMake to build LAMMPS. If you are new to CMake it is a -good place to start. +The following text assumes some familiarity with CMake and focuses on +using the command line tool ``cmake`` and what settings are supported +for building LAMMPS. A more detailed tutorial on how to use ``cmake`` +itself, the text mode or graphical user interface, change the generated +output files for different build tools and development environments is +on a :doc:`separate page `. ----------- +LAMMPS currently requires that CMake version 3.10 or later is available. + +Advantages of using CMake +^^^^^^^^^^^^^^^^^^^^^^^^^ + +CMake is an alternative to compiling LAMMPS in the traditional way +through :doc:`(manually customized) makefiles ` and a rather +recent addition to LAMMPS thanks to the efforts of Christoph Junghans +(LANL) and Richard Berger (Temple U). Using CMake has multiple +advantages that are specifically helpful for people with limited +experience in compiling software or for people that want to modify or +extend LAMMPS. + +- CMake can detect available hardware, tools, features, and libraries + and adapt the LAMMPS build configuration accordingly. +- CMake can output files for different build tools and also can generate + support files for use with popular integrated development environments + (IDEs). +- CMake will build all components in a single build operation. +- CMake supports out-of-source compilation, so multiple configurations + and settings with different choices of LAMMPS packages can be + configured and built concurrently from the same source tree. +- CMake simplifies packaging of LAMMPS for Linux distributions, + environment modules, or automated build tools like `Homebrew + `_. + +.. _cmake_build: + +Getting started +^^^^^^^^^^^^^^^ Building LAMMPS with CMake is a two-step process. First you use CMake -to create a build environment in a new directory. On Linux systems, -this will be by default based on Unix-style makefiles for use with make. -Then you use the *make* command to build LAMMPS, which uses the created -Makefile(s). Example: +to create a build environment in a new directory. For that purpose you +can use either the command-line utility ``cmake`` (or ``cmake3``), the +text-mode UI utility ``ccmake`` (or ``ccmake3``) or the graphical +utility ``cmake-gui``, or use them interchangeably. + +Here is a minimal example using the command line version of CMake to +build LAMMPS with no add-on packages enabled and no customization: .. code-block:: bash - cd lammps # change to the LAMMPS distribution directory - mkdir build; cd build # create a new directory (folder) for build - cmake [options ...] ../cmake # configuration with (command-line) cmake - cmake --build . # compilation (or type "make") + cd lammps # change to the LAMMPS distribution directory + mkdir build; cd build # create and use a build directory + cmake ../cmake # configuration reading CMake scripts from ../cmake + cmake --build . # compilation (or type "make") -The ``cmake`` command will detect available features, enable selected -packages and options, and will generate the build environment. By default -this build environment will be created for "Unix Makefiles" on most -platforms and particularly on Linux. However, alternate build tools -(e.g. Ninja) and project files for Integrated Development Environments -(IDEs) like Eclipse, CodeBlocks, or Kate can be generated, too. This is -selected via the ``-G`` command line flag. Further details about features -and settings for CMake are in the `CMake online documentation `_ - -.. _cmake_doc: https://cmake.org/documentation/ - -For the rest of the documentation -we will assume that the build environment is generated for "Unix Makefiles" -and thus the ``make`` command will be used to compile and link LAMMPS as -indicated above, producing (by default) an executable called ``lmp`` and -a library called ``liblammps.a`` in the ``build`` folder. +This will create and change into a folder called ``build``, then run the +configuration step to generate build files for the default build command +and then launch that build command to compile LAMMPS. During the +configuration step CMake will try to detect whether support for MPI, +OpenMP, FFTW, gzip, JPEG, PNG, and ffmpeg are available and enable the +corresponding configuration settings. The progress of this +configuration can be followed on the screen and a summary of selected +options and settings will be printed at the end. The ``cmake --build +.`` command will launch the compilation, which, if successful, will +ultimately produce a library ``liblammps.a`` and the LAMMPS executable +``lmp`` inside the ``build`` folder. If your machine has multiple CPU cores (most do these days), you can -compile sources in parallel with a command like ``make -j N`` (with N -being the maximum number of concurrently executed tasks). Also -installation of the ``ccache`` (= Compiler Cache) software may speed -up repeated compilation, e.g. during code development, significantly. +speed this up by compiling sources in parallel with ``make -j N`` (with +N being the maximum number of concurrently executed tasks). Also +installation of the `ccache `_ (= Compiler Cache) +software may speed up repeated compilation significantly, e.g. during code +development. After compilation, you may optionally install the LAMMPS executable into your system with: .. code-block:: bash - make install # optional, copy LAMMPS executable & library elsewhere + make install # optional, copy compiled files into installation location -This will install the lammps executable and library (if requested), some -tools (if configured) and additional files like library API headers, -manpages, potential and force field files. The location of the installation -tree is set by the CMake variable "CMAKE_INSTALL_PREFIX" which defaults -to ${HOME}/.local +This will install the LAMMPS executable and library, some tools (if configured) +and additional files like LAMMPS API headers, manpages, potential and force field +files. The location of the installation tree defaults to ``${HOME}/.local``. + + + +.. _cmake_options: + +CMake configuration and build options +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The CMake commands have one mandatory argument: a folder containing a +file called ``CMakeLists.txt`` (for LAMMPS it is located in the +``cmake`` folder) or a folder containing a file called +``CMakeCache.txt``, which is generated at the end of the CMake +configuration step. The cache file contains all current CMake settings. +Thus a configuration can be quickly modified by directing CMake to the +location of this cache file and then using options that are supposed to +be altered. + +To modify settings, enable or disable features, you need to set *variables* +with either the *-D* command line flag or edit them . This can be used several times. +There are 3 major command line options used to change settings during +CMake configuration. + +Generating files for alternate build tools (e.g. Ninja) and project files +for IDEs like Eclipse, CodeBlocks, or Kate can be selected using the *-G* +command line flag. A list of available settings is given when running +``cmake --help``. Further details about features and settings for CMake +are in the `CMake online documentation `_ +For the rest of this manual we will assume that the build environment +is generated for "Unix Makefiles" and thus the ``cmake --build .`` will +call the ``make`` command or you can use it directly. ----------- -.. _cmake_build: There are 3 variants of the CMake command itself: a command-line version (``cmake`` or ``cmake3``), a text mode UI version (``ccmake`` or ``ccmake3``), From 15c89c388befcd9e62f7d2bb6231cf10759c532e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Apr 2020 12:43:00 -0400 Subject: [PATCH 18/39] add link target --- doc/src/Build_package.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/src/Build_package.rst b/doc/src/Build_package.rst index 2e0bea723a..f2511bb6a4 100644 --- a/doc/src/Build_package.rst +++ b/doc/src/Build_package.rst @@ -130,6 +130,8 @@ src directory. ---------- +.. _cmake_presets: + **CMake shortcuts for installing many packages**\ : Instead of specifying all the CMake options via the command-line, From d50013ed16f465fc41855199f3ca52f504392094 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Apr 2020 12:43:31 -0400 Subject: [PATCH 19/39] complete rewrite of the CMake build overview page --- doc/src/Build_cmake.rst | 245 ++++++++++------------------------------ 1 file changed, 62 insertions(+), 183 deletions(-) diff --git a/doc/src/Build_cmake.rst b/doc/src/Build_cmake.rst index 89f197b25f..70a9767f23 100644 --- a/doc/src/Build_cmake.rst +++ b/doc/src/Build_cmake.rst @@ -2,9 +2,9 @@ Build LAMMPS with CMake ======================= This page describes how to use CMake in general to build LAMMPS. -Details for specific compile time settings and options for optional -add-on packages are discussed with those packages. Links to those -pages on the :doc:`Build overview ` page. +Details for specific compile time settings and options to enable +and configure add-on packages are discussed with those packages. +Links to those pages on the :doc:`Build overview ` page. The following text assumes some familiarity with CMake and focuses on using the command line tool ``cmake`` and what settings are supported @@ -13,7 +13,21 @@ itself, the text mode or graphical user interface, change the generated output files for different build tools and development environments is on a :doc:`separate page `. -LAMMPS currently requires that CMake version 3.10 or later is available. +.. note:: + + LAMMPS currently requires that CMake version 3.10 or later is available; + version 3.12 or later is preferred. + +.. warning:: + + You must not mix the :doc:`traditional make based ` + LAMMPS build procedure with using CMake. Thus no packages may be + installed or a build been previously attempted in the LAMMPS source + directory by using ``make ``. CMake will detect if this is + the case and generate an error. To remove conflicting files from the + ``src`` you can use the command ``make no-all purge`` which will + un-install all packages and delete all auto-generated files. + Advantages of using CMake ^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -26,18 +40,19 @@ advantages that are specifically helpful for people with limited experience in compiling software or for people that want to modify or extend LAMMPS. -- CMake can detect available hardware, tools, features, and libraries - and adapt the LAMMPS build configuration accordingly. -- CMake can output files for different build tools and also can generate - support files for use with popular integrated development environments - (IDEs). -- CMake will build all components in a single build operation. -- CMake supports out-of-source compilation, so multiple configurations - and settings with different choices of LAMMPS packages can be - configured and built concurrently from the same source tree. -- CMake simplifies packaging of LAMMPS for Linux distributions, - environment modules, or automated build tools like `Homebrew - `_. +- Detect available hardware, tools, features, and libraries and adapt + the LAMMPS build configuration accordingly. +- Output files for different build tools or integrated development + environments (IDEs). +- Customization settings with text mode or graphical user interface. No + knowledge of make file format and syntax required. +- All components compiled in a single build operation. +- Support for out-of-source compilation. Multiple configurations and + settings with different choices of LAMMPS packages, settings, or + compilers can be configured and built concurrently from the same + source tree. +- Simplified packaging of LAMMPS for Linux distributions, environment + modules, or automated build tools like `Homebrew `_. .. _cmake_build: @@ -45,13 +60,12 @@ Getting started ^^^^^^^^^^^^^^^ Building LAMMPS with CMake is a two-step process. First you use CMake -to create a build environment in a new directory. For that purpose you +to generate build environment in a new directory. For that purpose you can use either the command-line utility ``cmake`` (or ``cmake3``), the text-mode UI utility ``ccmake`` (or ``ccmake3``) or the graphical -utility ``cmake-gui``, or use them interchangeably. - -Here is a minimal example using the command line version of CMake to -build LAMMPS with no add-on packages enabled and no customization: +utility ``cmake-gui``, or use them interchangeably. Here is a minimal +example using the command line version of CMake to build LAMMPS with no +add-on packages enabled and no customization: .. code-block:: bash @@ -90,174 +104,38 @@ This will install the LAMMPS executable and library, some tools (if configured) and additional files like LAMMPS API headers, manpages, potential and force field files. The location of the installation tree defaults to ``${HOME}/.local``. - - .. _cmake_options: -CMake configuration and build options -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Configuration and build options +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The CMake commands have one mandatory argument: a folder containing a file called ``CMakeLists.txt`` (for LAMMPS it is located in the -``cmake`` folder) or a folder containing a file called +``cmake`` folder) or a build folder containing a file called ``CMakeCache.txt``, which is generated at the end of the CMake -configuration step. The cache file contains all current CMake settings. -Thus a configuration can be quickly modified by directing CMake to the -location of this cache file and then using options that are supposed to -be altered. +configuration step. The cache file contains all current CMake settings. To modify settings, enable or disable features, you need to set *variables* -with either the *-D* command line flag or edit them . This can be used several times. -There are 3 major command line options used to change settings during -CMake configuration. +with either the *-D* command line flag (``-D VARIABLE1_NAME=value``) or +change them in the text mode of graphical user interface. The *-D* flag +can be used several times in one command. + +For your convenience we provide :ref:`CMake presets ` +that combine multiple settings to enable optional LAMMPS packages or use +a different compiler tool chain. Those are loaded with the *-C* flag +(``-C ../cmake/presets/minimal.cmake``). This step would only be needed +once, as the settings from the preset files are stored in the +``CMakeCache.txt`` file. It is also possible to customize the build +by adding one or more *-D* flags to the CMake command line. Generating files for alternate build tools (e.g. Ninja) and project files for IDEs like Eclipse, CodeBlocks, or Kate can be selected using the *-G* -command line flag. A list of available settings is given when running -``cmake --help``. Further details about features and settings for CMake -are in the `CMake online documentation `_ -For the rest of this manual we will assume that the build environment -is generated for "Unix Makefiles" and thus the ``cmake --build .`` will -call the ``make`` command or you can use it directly. +command line flag. A list of available generator settings for your +specific CMake version is given when running ``cmake --help``. - -There are 3 variants of the CMake command itself: a command-line version -(``cmake`` or ``cmake3``), a text mode UI version (``ccmake`` or ``ccmake3``), -and a graphical GUI version (``cmake-gui``). You can use any of them -interchangeably to configure and create the LAMMPS build environment. -On Linux all the versions produce a Makefile as their output by default. -See more details on each below. - -You can specify a variety of options with any of the 3 versions, which -affect how the build is performed and what is included in the LAMMPS -executable. Links to pages explaining all the options are listed on -the :doc:`Build ` doc page. - -You must perform the CMake build system generation and compilation in -a new directory you create. It can be anywhere on your local machine. -In these Build pages we assume that you are building in a directory -called ``lammps/build``. You can perform separate builds independently -with different options, so long as you perform each of them in a -separate directory you create. All the auxiliary files created by one -build process (executable, object files, log files, etc) are stored in -this directory or sub-directories within it that CMake creates. - -.. note:: - - To perform a CMake build, no packages can be installed or a build - been previously attempted in the LAMMPS src directory by using ``make`` - commands to :doc:`perform a conventional LAMMPS build `. - CMake detects if this is the case and generates an error, telling you - to type ``make no-all purge`` in the src directory to un-install all - packages. The purge removes all the \*.h files auto-generated by - make. - -You must have CMake version 3.10 or later on your system to build -LAMMPS. Installation instructions for CMake are below. - -After the initial build, if you edit LAMMPS source files, or add your -own new files to the source directory, you can just re-type make from -your build directory and it will re-compile only the files that have -changed. If you want to change CMake options you can run cmake (or -ccmake or cmake-gui) again from the same build directory and alter -various options; see details below. Or you can remove the entire build -folder, recreate the directory and start over. - ----------- - -**Command-line version of CMake**\ : - -.. code-block:: bash - - cmake [options ...] /path/to/lammps/cmake # build from any dir - cmake [options ...] ../cmake # build from lammps/build - cmake3 [options ...] ../cmake # build from lammps/build - -The cmake command takes one required argument, which is the LAMMPS -cmake directory which contains the CMakeLists.txt file. - -The argument can be prefixed or followed by various CMake -command-line options. Several useful ones are: - -.. code-block:: bash - - -D CMAKE_INSTALL_PREFIX=path # where to install LAMMPS executable/lib if desired - -D CMAKE_BUILD_TYPE=type # type = RelWithDebInfo (default), Release, MinSizeRel, or Debug - -G output # style of output CMake generates (e.g. "Unix Makefiles" or "Ninja") - -D CMAKE_MAKE_PROGRAM=builder # name of the builder executable (e.g. when using "gmake" instead of "make") - -DVARIABLE=value # setting for a LAMMPS feature to enable - -D VARIABLE=value # ditto, but cannot come after CMakeLists.txt dir - -C path/to/preset/file # load some CMake settings before configuring - -All the LAMMPS-specific -D variables that a LAMMPS build supports are -described on the pages linked to from the :doc:`Build ` doc page. -All of these variable names are upper-case and their values are -lower-case, e.g. -D LAMMPS_SIZES=smallbig. For boolean values, any of -these forms can be used: yes/no, on/off, 1/0. - -On Unix/Linux machines, CMake generates a Makefile by default to -perform the LAMMPS build. Alternate forms of build info can be -generated via the -G switch, e.g. Visual Studio on a Windows machine, -Xcode on MacOS, or KDevelop on Linux. Type ``cmake --help`` to see the -"Generator" styles of output your system supports. - -.. note:: - - When CMake runs, it prints configuration info to the screen. - You should review this to verify all the features you requested were - enabled, including packages. You can also see what compilers and - compile options will be used for the build. Any errors in CMake - variable syntax will also be flagged, e.g. mis-typed variable names or - variable values. - -CMake creates a CMakeCache.txt file when it runs. This stores all the -settings, so that when running CMake again you can use the current -folder '.' instead of the path to the LAMMPS cmake folder as the -required argument to the CMake command. Either way the existing -settings will be inherited unless the CMakeCache.txt file is removed. - -If you later want to change a setting you can rerun cmake in the build -directory with different setting. Please note that some automatically -detected variables will not change their value when you rerun cmake. -In these cases it is usually better to first remove all the -files/directories in the build directory, or start with a fresh build -directory. - ----------- - -**Curses version (terminal-style menu) of CMake**\ : - -.. code-block:: bash - - ccmake ../cmake - -You initiate the configuration and build environment generation steps -separately. For the first you have to type **c**\ , for the second you -have to type **g**\ . You may need to type **c** multiple times, and may be -required to edit some of the entries of CMake configuration variables -in between. Please see the `ccmake manual `_ for -more information. - ----------- - -**GUI version of CMake**\ : - -.. code-block:: bash - - cmake-gui ../cmake - -You initiate the configuration and build environment generation steps -separately. For the first you have to click on the **Configure** button, -for the second you have to click on the **Generate** button. You may -need to click on **Configure** multiple times, and may be required to -edit some of the entries of CMake configuration variables in between. -Please see the `cmake-gui manual `_ -for more information. - ----------- - -**Installing CMake** +Installing CMake +^^^^^^^^^^^^^^^^ Check if your machine already has CMake installed: @@ -274,11 +152,12 @@ software packages, do this: module list # is a module for cmake already loaded? module avail # is a module for cmake available? - module load cmake3 # load cmake module with appropriate name + module load cmake # load cmake module with appropriate name -Most Linux distributions offer pre-compiled cmake packages through -their package management system. If you do not have CMake or a new -enough version, you can download the latest version at -`https://cmake.org/download/ `_. -Instructions on how to install it on various platforms can be found -`on this page `_. +Most Linux distributions offer pre-compiled cmake packages through their +package management system. If you do not have CMake or a recent enough +version (Note: for CentOS 7.x you need to enable the EPEL repository), +you can download the latest version from `https://cmake.org/download/ +`_. Instructions on how to install it on +various platforms can be found `on this page +`_. From 8407a778933b07202cd93972267f67dd3be6d14c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Apr 2020 12:43:50 -0400 Subject: [PATCH 20/39] add text segments removed from other pages. --- doc/src/Howto_cmake.rst | 135 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) diff --git a/doc/src/Howto_cmake.rst b/doc/src/Howto_cmake.rst index ee1d2ecc0b..2e97a92f9f 100644 --- a/doc/src/Howto_cmake.rst +++ b/doc/src/Howto_cmake.rst @@ -1,6 +1,10 @@ Using CMake with LAMMPS tutorial ================================ +Thus a configuration can be quickly modified by directing CMake to the +location of this cache file and then using options that are supposed to +be altered. + .. list-table:: @@ -42,3 +46,134 @@ Using CMake with LAMMPS tutorial Options screen of ``cmake-gui`` +You must have CMake version 3.10 or later on your system to build +LAMMPS. Installation instructions for CMake are below. + +After the initial build, if you edit LAMMPS source files, or add your +own new files to the source directory, you can just re-type make from +your build directory and it will re-compile only the files that have +changed. If you want to change CMake options you can run cmake (or +ccmake or cmake-gui) again from the same build directory and alter +various options; see details below. Or you can remove the entire build +folder, recreate the directory and start over. + +. Further details about features and settings for CMake +are in the `CMake online documentation `_ +For the rest of this manual we will assume that the build environment +is generated for "Unix Makefiles" and thus the ``cmake --build .`` will +call the ``make`` command or you can use it directly. + + + +There are 3 variants of the CMake command itself: a command-line version +(``cmake`` or ``cmake3``), a text mode UI version (``ccmake`` or ``ccmake3``), +and a graphical GUI version (``cmake-gui``). You can use any of them +interchangeably to configure and create the LAMMPS build environment. +On Linux all the versions produce a Makefile as their output by default. +See more details on each below. + +You can specify a variety of options with any of the 3 versions, which +affect how the build is performed and what is included in the LAMMPS +executable. Links to pages explaining all the options are listed on +the :doc:`Build ` doc page. + +You must perform the CMake build system generation and compilation in +a new directory you create. It can be anywhere on your local machine. +In these Build pages we assume that you are building in a directory +called ``lammps/build``. You can perform separate builds independently +with different options, so long as you perform each of them in a +separate directory you create. All the auxiliary files created by one +build process (executable, object files, log files, etc) are stored in +this directory or sub-directories within it that CMake creates. + +---------- + +**Command-line version of CMake**\ : + +.. code-block:: bash + + cmake [options ...] /path/to/lammps/cmake # build from any dir + cmake [options ...] ../cmake # build from lammps/build + cmake3 [options ...] ../cmake # build from lammps/build + +The cmake command takes one required argument, which is the LAMMPS +cmake directory which contains the CMakeLists.txt file. + +The argument can be prefixed or followed by various CMake +command-line options. Several useful ones are: + +.. code-block:: bash + + -D CMAKE_INSTALL_PREFIX=path # where to install LAMMPS executable/lib if desired + -D CMAKE_BUILD_TYPE=type # type = RelWithDebInfo (default), Release, MinSizeRel, or Debug + -G output # style of output CMake generates (e.g. "Unix Makefiles" or "Ninja") + -D CMAKE_MAKE_PROGRAM=builder # name of the builder executable (e.g. when using "gmake" instead of "make") + -DVARIABLE=value # setting for a LAMMPS feature to enable + -D VARIABLE=value # ditto, but cannot come after CMakeLists.txt dir + -C path/to/preset/file # load some CMake settings before configuring + +All the LAMMPS-specific -D variables that a LAMMPS build supports are +described on the pages linked to from the :doc:`Build ` doc page. +All of these variable names are upper-case and their values are +lower-case, e.g. -D LAMMPS_SIZES=smallbig. For boolean values, any of +these forms can be used: yes/no, on/off, 1/0. + +On Unix/Linux machines, CMake generates a Makefile by default to +perform the LAMMPS build. Alternate forms of build info can be +generated via the -G switch, e.g. Visual Studio on a Windows machine, +Xcode on MacOS, or KDevelop on Linux. Type ``cmake --help`` to see the +"Generator" styles of output your system supports. + +.. note:: + + When CMake runs, it prints configuration info to the screen. + You should review this to verify all the features you requested were + enabled, including packages. You can also see what compilers and + compile options will be used for the build. Any errors in CMake + variable syntax will also be flagged, e.g. mis-typed variable names or + variable values. + +CMake creates a CMakeCache.txt file when it runs. This stores all the +settings, so that when running CMake again you can use the current +folder '.' instead of the path to the LAMMPS cmake folder as the +required argument to the CMake command. Either way the existing +settings will be inherited unless the CMakeCache.txt file is removed. + +If you later want to change a setting you can rerun cmake in the build +directory with different setting. Please note that some automatically +detected variables will not change their value when you rerun cmake. +In these cases it is usually better to first remove all the +files/directories in the build directory, or start with a fresh build +directory. + +---------- + +**Curses version (terminal-style menu) of CMake**\ : + +.. code-block:: bash + + ccmake ../cmake + +You initiate the configuration and build environment generation steps +separately. For the first you have to type **c**\ , for the second you +have to type **g**\ . You may need to type **c** multiple times, and may be +required to edit some of the entries of CMake configuration variables +in between. Please see the `ccmake manual `_ for +more information. + +---------- + +**GUI version of CMake**\ : + +.. code-block:: bash + + cmake-gui ../cmake + +You initiate the configuration and build environment generation steps +separately. For the first you have to click on the **Configure** button, +for the second you have to click on the **Generate** button. You may +need to click on **Configure** multiple times, and may be required to +edit some of the entries of CMake configuration variables in between. +Please see the `cmake-gui manual `_ +for more information. + From fa0cc2c217ef68bef03b781082fc23d6fb543a8a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Apr 2020 21:36:08 -0400 Subject: [PATCH 21/39] update singularity definition files --- tools/singularity/README.md | 3 ++ tools/singularity/centos7.def | 6 +++- tools/singularity/centos8.def | 4 +++ tools/singularity/fedora30_mingw.def | 6 ++++ tools/singularity/fedora32_mingw.def | 47 ++++++++++++++++++++++++++++ tools/singularity/ubuntu20.04.def | 2 +- 6 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 tools/singularity/fedora32_mingw.def diff --git a/tools/singularity/README.md b/tools/singularity/README.md index 9bd0c2fdcc..a01b1688b8 100644 --- a/tools/singularity/README.md +++ b/tools/singularity/README.md @@ -49,8 +49,11 @@ make | centos7.def | CentOS 7.x with EPEL enabled, no LaTeX | | centos8.def | CentOS 8.x with EPEL enabled | | fedora30_mingw.def | Fedora 30 with MinGW cross-compiler toolchain | +| fedora32_mingw.def | Fedora 32 with MinGW cross-compiler toolchain | | ubuntu16.04.def | Ubuntu 16.04LTS with MPI == OpenMPI, no LaTeX | | ubuntu18.04.def | Ubuntu 18.04LTS with MPI == OpenMPI | | ubuntu18.04_amd_rocm.def | Ubuntu 18.04LTS with AMD ROCm toolkit | +| ubuntu18.04_amd_rocm_cuda.def | Ubuntu 18.04LTS with -"- plus Nvidia CUDA 10.2 | | ubuntu18.04_nvidia.def | Ubuntu 18.04LTS with Nvidia CUDA 10.2 toolkit | | ubuntu18.04_intel_opencl.def | Ubuntu 18.04LTS with Intel OpenCL runtime | +| ubuntu20.04.def | Ubuntu 20.04LTS with MPI == OpenMPI | diff --git a/tools/singularity/centos7.def b/tools/singularity/centos7.def index e1ae6e6373..028823bc49 100644 --- a/tools/singularity/centos7.def +++ b/tools/singularity/centos7.def @@ -6,13 +6,17 @@ From: centos:7 yum -y update yum -y install vim-enhanced \ ccache gcc-c++ gcc-gfortran clang gdb valgrind-openmpi \ - make cmake cmake3 ninja-build patch which file git \ + make cmake cmake3 ninja-build patch which file git Lmod \ libpng-devel libjpeg-devel openmpi-devel mpich-devel python-devel \ python-virtualenv fftw-devel voro++-devel eigen3-devel gsl-devel openblas-devel enchant %environment LC_ALL=C export LC_ALL + unset LOADEDMODULES + . /etc/profile.d/z00_lmod.sh + module purge + module load mpi %labels Author akohlmey diff --git a/tools/singularity/centos8.def b/tools/singularity/centos8.def index 77a8964abb..fff96c5c4a 100644 --- a/tools/singularity/centos8.def +++ b/tools/singularity/centos8.def @@ -19,6 +19,10 @@ From: centos:8 %environment LC_ALL=C export LC_ALL + unset LOADEDMODULES + . /etc/profile.d/modules.sh + module purge + module load mpi %labels Author akohlmey diff --git a/tools/singularity/fedora30_mingw.def b/tools/singularity/fedora30_mingw.def index 2df658676c..ef83d8f0a7 100644 --- a/tools/singularity/fedora30_mingw.def +++ b/tools/singularity/fedora30_mingw.def @@ -36,6 +36,12 @@ From: fedora:30 %environment LC_ALL=C export LC_ALL + # we need to reset any module variables + # inherited from the host. + unset LOADEDMODULES + source /etc/profile.d/modules.sh + module purge + module load mpi %labels Author akohlmey diff --git a/tools/singularity/fedora32_mingw.def b/tools/singularity/fedora32_mingw.def new file mode 100644 index 0000000000..43d5659a19 --- /dev/null +++ b/tools/singularity/fedora32_mingw.def @@ -0,0 +1,47 @@ +BootStrap: docker +From: fedora:32 + +%post + dnf -y update + dnf -y install vim-enhanced git file make cmake patch which file Lmod \ + ninja-build clang libomp-devel libubsan libasan libtsan \ + dos2unix findutils rsync python-devel libjpeg-devel libpng-devel \ + ccache gcc-c++ gcc-gfortran gdb valgrind eigen3-devel openblas-devel \ + openmpi-devel mpich-devel fftw-devel voro++-devel gsl-devel \ + mingw-filesystem-base mingw32-nsis mingw-binutils-generic \ + mingw32-filesystem mingw32-pkg-config \ + mingw64-filesystem mingw64-pkg-config \ + mingw32-crt mingw32-headers mingw32-binutils \ + mingw64-crt mingw64-headers mingw64-binutils \ + mingw32-cpp mingw32-gcc mingw32-gcc-gfortran mingw32-gcc-c++ \ + mingw64-cpp mingw64-gcc mingw64-gcc-gfortran mingw64-gcc-c++ \ + mingw32-libgomp mingw64-libgomp \ + mingw32-winpthreads mingw64-winpthreads \ + mingw32-winpthreads-static mingw64-winpthreads-static \ + mingw32-eigen3 mingw64-eigen3 \ + mingw32-libjpeg-turbo mingw64-libjpeg-turbo \ + mingw32-libjpeg-turbo-static mingw64-libjpeg-turbo-static \ + mingw32-libpng mingw64-libpng \ + mingw32-libpng-static mingw64-libpng-static \ + mingw32-zlib mingw64-zlib \ + mingw32-zlib-static mingw64-zlib-static \ + mingw32-expat mingw64-expat \ + mingw64-expat-static mingw32-expat-static \ + mingw32-sqlite-static mingw64-sqlite-static \ + enchant python3-virtualenv doxygen \ + texlive-latex-fonts texlive-pslatex texlive-collection-latexrecommended \ + texlive-latex texlive-latexconfig doxygen-latex texlive-collection-latex \ + texlive-latex-bin texlive-lualatex-math texlive-fncychap texlive-tabulary \ + texlive-framed texlive-wrapfig texlive-upquote texlive-capt-of \ + texlive-needspace texlive-titlesec texlive-anysize texlive-dvipng + +%environment + LC_ALL=C + export LC_ALL + unset LOADEDMODULES + . /etc/profile.d/modules.sh + module purge + module load mpi + +%labels + Author akohlmey diff --git a/tools/singularity/ubuntu20.04.def b/tools/singularity/ubuntu20.04.def index 4ebc88447d..37c67b9373 100644 --- a/tools/singularity/ubuntu20.04.def +++ b/tools/singularity/ubuntu20.04.def @@ -29,6 +29,7 @@ From: ubuntu:20.04 libjpeg-dev \ liblapack-dev \ libopenblas-dev \ + libomp-dev \ libpng-dev \ libproj-dev \ libvtk6-dev \ @@ -45,7 +46,6 @@ From: ubuntu:20.04 ssh \ texlive \ texlive-latex-recommended \ - texlive-latex-extra \ texlive-pictures \ texlive-publishers \ texlive-science \ From 7b3b77226e3981f4a95b06f34775633e19994b7e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Apr 2020 22:20:35 -0400 Subject: [PATCH 22/39] update build overview --- doc/src/Build.rst | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/doc/src/Build.rst b/doc/src/Build.rst index c96fb0b5b9..441af79009 100644 --- a/doc/src/Build.rst +++ b/doc/src/Build.rst @@ -1,12 +1,14 @@ Build LAMMPS ************ -LAMMPS can be built as an executable or library from source code via -either traditional makefiles (which may require manual editing) -for use with GNU make or gmake, or a build environment generated by CMake -(Unix Makefiles, Xcode, Visual Studio, KDevelop or more). As an -alternative you can download a package with pre-built executables -as described on the :doc:`Install ` doc page. +LAMMPS is built as a library and an executable from source code using +either traditional makefiles for use with GNU make (which may require +manual editing), or using a build environment generated by CMake (Unix +Makefiles, Ninja, Xcode, Visual Studio, KDevelop, CodeBlocks and more). + +As an alternative you can download a package with pre-built executables +or automated build trees as described on the :doc:`Install ` +doc page. .. toctree:: :maxdepth: 1 From 17fdf976b07b1eb2769ca7550435c6a839a30c72 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 12 Apr 2020 01:35:41 -0400 Subject: [PATCH 23/39] must force non-interactive setup --- tools/singularity/ubuntu18.04_amd_rocm_cuda.def | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/singularity/ubuntu18.04_amd_rocm_cuda.def b/tools/singularity/ubuntu18.04_amd_rocm_cuda.def index 601969dc8b..3ef7813a20 100644 --- a/tools/singularity/ubuntu18.04_amd_rocm_cuda.def +++ b/tools/singularity/ubuntu18.04_amd_rocm_cuda.def @@ -9,7 +9,7 @@ From: lammps/default/lammps_development:ubuntu18.04_amd_rocm export LIBRARY_PATH=/usr/local/cuda/lib64/stubs %post - + export DEBIAN_FRONTEND=noninteractive wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600 apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub From 5584bd1106c24c65ea18be36dad940968e47188f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 12 Apr 2020 11:03:17 -0400 Subject: [PATCH 24/39] Update traditional make info and synchronize information provided with CMake version --- doc/src/Build_cmake.rst | 20 ++++++--- doc/src/Build_make.rst | 91 +++++++++++++++++++++++++---------------- 2 files changed, 69 insertions(+), 42 deletions(-) diff --git a/doc/src/Build_cmake.rst b/doc/src/Build_cmake.rst index 70a9767f23..82ba093220 100644 --- a/doc/src/Build_cmake.rst +++ b/doc/src/Build_cmake.rst @@ -86,12 +86,20 @@ options and settings will be printed at the end. The ``cmake --build ultimately produce a library ``liblammps.a`` and the LAMMPS executable ``lmp`` inside the ``build`` folder. -If your machine has multiple CPU cores (most do these days), you can -speed this up by compiling sources in parallel with ``make -j N`` (with -N being the maximum number of concurrently executed tasks). Also -installation of the `ccache `_ (= Compiler Cache) -software may speed up repeated compilation significantly, e.g. during code -development. +Compilation can take a long time, since LAMMPS is a large project with +many features. If your machine has multiple CPU cores (most do these +days), you can speed this up by compiling sources in parallel with +``make -j N`` (with N being the maximum number of concurrently executed +tasks). Also installation of the `ccache `_ (= +Compiler Cache) software may speed up repeated compilation even more, +e.g. during code development. + +After the initial build, whenever you edit LAMMPS source files, add +or remove packages, change compiler flags or build options, +you must re-compile and relink the LAMMPS executable with ``cmake --build .``. +If the compilation fails for some reason, try running ``cmake .`` and +then compile again. The included dependency tracking of should insure +that only the necessary subset of files are re-compiled. After compilation, you may optionally install the LAMMPS executable into your system with: diff --git a/doc/src/Build_make.rst b/doc/src/Build_make.rst index 0379a8379a..bc294175e0 100644 --- a/doc/src/Build_make.rst +++ b/doc/src/Build_make.rst @@ -2,10 +2,14 @@ Build LAMMPS with make ====================== Building LAMMPS with traditional makefiles requires that you have a -Makefile."machine" file appropriate for your system in the src/MAKE, -src/MAKE/MACHINES, src/MAKE/OPTIONS, or src/MAKE/MINE directory (see -below). It can include various options for customizing your LAMMPS -build with a number of global compilation options and features. +``Makefile.`` file appropriate for your system in either the +``src/MAKE``, ``src/MAKE/MACHINES``, ``src/MAKE/OPTIONS``, or +``src/MAKE/MINE`` directory (see below). It can include various options +for customizing your LAMMPS build with a number of global compilation +options and features. + +Requirements +^^^^^^^^^^^^ Those makefiles are written for and tested with GNU make and may not be compatible with other make programs. In most cases, if the "make" @@ -16,44 +20,52 @@ with :doc:`CMake `. The makefiles of the traditional make based build process and the scripts they are calling expect a few additional tools to be available and functioning. - * a Bourne shell compatible "Unix" shell program (often this is bash) - * a few shell utilities: ls, mv, ln, rm, grep, sed, tr, cat, touch, diff, dirname - * python (optional, required for "make lib-XXX" in the src folder) + * a working C/C++ compiler toolchain; on Linux these are often the GNU compilers + * a Bourne shell compatible "Unix" shell program (often this is ``bash``) + * a few shell utilities: ``ls``, ``mv``, ``ln``, ``rm``, ``grep``, ``sed``, ``tr``, ``cat``, ``touch``, ``diff``, ``dirname`` + * python (optional, required for ``make lib-`` in the src folder). + python scripts are currently tested with python 2.7 and 3.6. The procedure + for :doc:`building the documentation ` requires python 3. -To include LAMMPS packages (i.e. optional commands and styles) you -must enable them first, as discussed on the :doc:`Build package -` doc page. If a packages requires (provided or +Getting started +^^^^^^^^^^^^^^^ + +To include LAMMPS packages (i.e. optional commands and styles) you must +enable (or "install") them first, as discussed on the :doc:`Build +package ` doc page. If a packages requires (provided or external) libraries, you must configure and build those libraries **before** building LAMMPS itself and especially **before** enabling -such a package with "make yes-". Building :doc:`LAMMPS -with CMake ` can automate much of this for many types of +such a package with ``make yes-``. Building :doc:`LAMMPS with +CMake ` can automate much of this for many types of machines, especially workstations, desktops, and laptops, so we suggest you try it first when building LAMMPS in those cases. The commands below perform a default LAMMPS build, producing the LAMMPS -executable lmp_serial and lmp_mpi in lammps/src: +executable ``lmp_serial`` and ``lmp_mpi`` in ``lammps/src``: .. code-block:: bash - cd lammps/src - make serial # build a serial LAMMPS executable + cd lammps/src # change to main LAMMPS source folder + make serial # build a serial LAMMPS executable using GNU g++ make mpi # build a parallel LAMMPS executable with MPI make # see a variety of make options -This initial compilation can take a long time, since LAMMPS is a large -project with many features. If your machine has multiple CPU cores -(most do these days), using a command like "make -jN mpi" (with N = -the number of available CPU cores) can be much faster. If you plan to -do development on LAMMPS or need to re-compile LAMMPS repeatedly, the -installation of the ccache (= Compiler Cache) software may speed up -compilation even more. +Compilation can take a long time, since LAMMPS is a large project with +many features. If your machine has multiple CPU cores (most do these +days), you can speed this up by compiling sources in parallel with +``make -j N`` (with N being the maximum number of concurrently executed +tasks). Also installation of the `ccache `_ (= +Compiler Cache) software may speed up repeated compilation even more, +e.g. during code development. After the initial build, whenever you edit LAMMPS source files, or add or remove new files to the source directory (e.g. by installing or uninstalling packages), you must re-compile and relink the LAMMPS -executable with the same "make" command. This makefiles dependencies -should insure that only the subset of files that need to be are -re-compiled. +executable with the same ``make `` command. The makefile's +dependency tracking should insure that only the necessary subset of +files are re-compiled. If you change settings in the makefile, you have +to recompile *everything*. To delete all objects you can use ``make +clean-``. .. note:: @@ -65,13 +77,15 @@ re-compiled. correctly detect which parts need to be recompiled after changes were made to the sources. ----------- +Customized builds and alternate makefiles +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The lammps/src/MAKE tree contains the Makefile.machine files included -in the LAMMPS distribution. Typing "make machine" uses -*Makefile.machine*\ . Thus the "make serial" or "make mpi" lines above -use Makefile.serial and Makefile.mpi, respectively. Other makefiles -are in these directories: +The ``src/MAKE`` directory tree contains the ``Makefile.`` +files included in the LAMMPS distribution. Typing ``make example`` uses +``Makefile.example`` from one of those folders, if available. Thus the +``make serial`` and ``make mpi`` lines above use +``src/MAKE/Makefile.serial`` and ``src/MAKE/Makefile.mpi``, +respectively. Other makefiles are in these directories: .. code-block:: bash @@ -79,11 +93,16 @@ are in these directories: MACHINES # Makefiles for specific machines MINE # customized Makefiles you create (you may need to create this folder) -Typing "make" lists all the available Makefile.machine files. A file -with the same name can appear in multiple folders (not a good idea). -The order the directories are searched is as follows: src/MAKE/MINE, -src/MAKE, src/MAKE/OPTIONS, src/MAKE/MACHINES. This gives preference -to a customized file you put in src/MAKE/MINE. +Simply typing ``make`` lists all the available ``Makefile.`` +files with a single line description toward the end of the output. A +file with the same name can appear in multiple folders (not a good +idea). The order the directories are searched is as follows: +``src/MAKE/MINE``, ``src/MAKE``, ``src/MAKE/OPTIONS``, +``src/MAKE/MACHINES``. This gives preference to a customized file you +put in ``src/MAKE/MINE``. If you create your own custom makefile under +a new name, please edit the first line with the description and machine +name, so you will not confuse yourself, when looking at the machine +summary. Makefiles you may wish to try include these (some require a package first be installed). Many of these include specific compiler flags From 5bb2449ddb85f57a9a0d451f53b29c54424180af Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 12 Apr 2020 15:34:00 -0400 Subject: [PATCH 25/39] provide info about including debug support in executable and a stack trace debug tutorial --- doc/src/Build_basics.rst | 21 ++ doc/src/Errors.rst | 1 + doc/src/Errors_bugs.rst | 24 +- doc/src/Errors_debug.rst | 237 ++++++++++++++++++++ doc/utils/sphinx-config/false_positives.txt | 2 + 5 files changed, 275 insertions(+), 10 deletions(-) create mode 100644 doc/src/Errors_debug.rst diff --git a/doc/src/Build_basics.rst b/doc/src/Build_basics.rst index 70a95ff8b5..df99c8643d 100644 --- a/doc/src/Build_basics.rst +++ b/doc/src/Build_basics.rst @@ -7,6 +7,7 @@ CMake and make: * :ref:`Serial vs parallel build ` * :ref:`Choice of compiler and compile/link options ` * :ref:`Build the LAMMPS executable and library ` +* :ref:`Debug support ` * :ref:`Build the LAMMPS documentation ` * :ref:`Install LAMMPS after a build ` @@ -396,6 +397,26 @@ recommended to ensure the integrity of the system software installation. ---------- +.. _debug: + +Debug support +------------- + +By default the compilation settings will include the *-g* flag which +instructs the compiler to include debug information (e.g. which line of +source code particular instructions correspond to). This can be +extremely useful in case LAMMPS crashes and can help to provide crucial +information in :doc:`tracking down the origin of a crash ` +and possibly help fix a bug in the source code. However, this increases +the storage requirements for object files, libraries, and the executable +3-5 fold. If this is a concern, you can change the compilation settings +(either by editing the machine makefile or setting the compiler flags or +build time when using CMake). If you are only concerned about the +executable being too large, you can use the ``strip`` tool (e.g. ``strip +lmp_serial``) to remove the debug information from the file. + +---------- + .. _doc: Build the LAMMPS documentation diff --git a/doc/src/Errors.rst b/doc/src/Errors.rst index 896dfbcbef..48db5f6472 100644 --- a/doc/src/Errors.rst +++ b/doc/src/Errors.rst @@ -12,5 +12,6 @@ additional details for many of them. Errors_common Errors_bugs + Errors_debug Errors_messages Errors_warnings diff --git a/doc/src/Errors_bugs.rst b/doc/src/Errors_bugs.rst index e169b93d81..ff0b155795 100644 --- a/doc/src/Errors_bugs.rst +++ b/doc/src/Errors_bugs.rst @@ -1,7 +1,8 @@ Reporting bugs ============== -If you are confident that you have found a bug in LAMMPS, please follow the steps outlined below: +If you are confident that you have found a bug in LAMMPS, please follow +the steps outlined below: * Check the `New features and bug fixes `_ section of the `LAMMPS WWW site @@ -17,20 +18,22 @@ If you are confident that you have found a bug in LAMMPS, please follow the step * Check the `mailing list archives `_ to see if the issue has been discussed before. -If none of these steps yields any useful information, please file -a new bug report on the `GitHub Issue page `_\ . -The website will offer you to select a suitable template with explanations -and then you should replace those explanations with the information -that you can provide to reproduce your issue. +If none of these steps yields any useful information, please file a new +bug report on the `GitHub Issue page `_. The website will offer +you to select a suitable template with explanations and then you should +replace those explanations with the information that you can provide to +reproduce your issue. The most useful thing you can do to help us verify and fix a bug is to isolate the problem. Run it on the smallest number of atoms and fewest number of processors with the simplest input script that reproduces the -bug. Try to identify what command or combination of commands is -causing the problem and upload the complete input deck as a tar or zip -archive. Please avoid using binary restart files unless the issue requires -it. In the latter case you should also include an input deck to quickly +bug. Try to identify what command or combination of commands is causing +the problem and upload the complete input deck as a tar or zip archive. +Please avoid using binary restart files unless the issue requires it. +In the latter case you should also include an input deck to quickly generate this restart from a data file or a simple additional input. +This input deck can be used with tools like a debugger or `valgrind +`_ to further :doc:`debug the crash `. You may also send an email to the LAMMPS mailing list at "lammps-users at lists.sourceforge.net" describing the problem with the @@ -43,3 +46,4 @@ have looked at it. .. _lws: https://lammps.sandia.gov .. _gip: https://github.com/lammps/issues +.. _valgrind: https://valgrind.org diff --git a/doc/src/Errors_debug.rst b/doc/src/Errors_debug.rst new file mode 100644 index 0000000000..a21099ee18 --- /dev/null +++ b/doc/src/Errors_debug.rst @@ -0,0 +1,237 @@ +Debugging crashes +================= + +If LAMMPS crashes with a "segmentation fault" or a "bus error" or +similar message, then you can use the following two methods to further +narrow down the origin of the issue. This will help the LAMMPS +developers (or yourself) to understand the reason for the crash and +apply a fix (either to the input script or the source code). +This requires that your LAMMPS executable includes the required +:ref:`debug information `. Otherwise it is not possible to +look up the names of functions or variables. + +The following patch will introduce a bug into the code for pair style +:doc:`lj/cut ` when using the ``examples/melt/in.melt`` input. +We use it to show how to identify the origin of a segmentation fault. + +.. code-block:: diff + + --- a/src/pair_lj_cut.cpp + +++ b/src/pair_lj_cut.cpp + @@ -81,6 +81,7 @@ void PairLJCut::compute(int eflag, int vflag) + int nlocal = atom->nlocal; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + + double comx = 0.0; + + inum = list->inum; + ilist = list->ilist; + @@ -134,8 +135,10 @@ void PairLJCut::compute(int eflag, int vflag) + evdwl,0.0,fpair,delx,dely,delz); + } + } + - } + + + comx += atom->rmass[i]*x[i][0]; /* BUG */ + + } + + printf("comx = %g\n",comx); + if (vflag_fdotr) virial_fdotr_compute(); + } + +After recompiling LAMMPS and running the input you should get something like this: + +.. code-block: + + $ ./lmp -in in.melt + LAMMPS (19 Mar 2020) + OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:94) + using 1 OpenMP thread(s) per MPI task + Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 + Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 1 by 1 by 1 MPI processor grid + Created 4000 atoms + create_atoms CPU = 0.000432253 secs + Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 12 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + Setting up Verlet run ... + Unit style : lj + Current step : 0 + Time step : 0.005 + Segmentation fault (core dumped) + + +Using the GDB debugger to get a stack trace +------------------------------------------- + +There are two options to use the GDB debugger for identifying the origin +of the segmentation fault or similar crash. The GDB debugger has many +more features and options, as can be seen for example its `online +documentation `_. + +Run LAMMPS from within the debugger +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Running LAMMPS under the control of the debugger as shown below only +works for a single MPI rank (for debugging a program running in parallel +you usually need a parallel debugger program). A simple way to launch +GDB is to prefix the LAMMPS command line with ``gdb --args`` and then +type the command "run" at the GDB prompt. This will launch the +debugger, load the LAMMPS executable and its debug info, and then run +it. When it reaches the code causing the segmentation fault, it will +stop with a message why it stopped, print the current line of code, and +drop back to the GDB prompt. + +.. code-block:: + + [...] + Setting up Verlet run ... + Unit style : lj + Current step : 0 + Time step : 0.005 + + Program received signal SIGSEGV, Segmentation fault. + 0x00000000006653ab in LAMMPS_NS::PairLJCut::compute (this=0x829740, eflag=1, vflag=) at /home/akohlmey/compile/lammps/src/pair_lj_cut.cpp:139 + 139 comx += atom->rmass[i]*x[i][0]; /* BUG */ + (gdb) + +Now typing the command "where" will show the stack of functions starting from +the current function back to "main()". + +.. code-block:: + + (gdb) where + #0 0x00000000006653ab in LAMMPS_NS::PairLJCut::compute (this=0x829740, eflag=1, vflag=) at /home/akohlmey/compile/lammps/src/pair_lj_cut.cpp:139 + #1 0x00000000004cf0a2 in LAMMPS_NS::Verlet::setup (this=0x7e6c90, flag=1) at /home/akohlmey/compile/lammps/src/verlet.cpp:131 + #2 0x000000000049db42 in LAMMPS_NS::Run::command (this=this@entry=0x7fffffffcca0, narg=narg@entry=1, arg=arg@entry=0x7e8750) + at /home/akohlmey/compile/lammps/src/run.cpp:177 + #3 0x000000000041258a in LAMMPS_NS::Input::command_creator (lmp=, narg=1, arg=0x7e8750) + at /home/akohlmey/compile/lammps/src/input.cpp:878 + #4 0x0000000000410ad3 in LAMMPS_NS::Input::execute_command (this=0x7d1410) at /home/akohlmey/compile/lammps/src/input.cpp:864 + #5 0x00000000004111fb in LAMMPS_NS::Input::file (this=0x7d1410) at /home/akohlmey/compile/lammps/src/input.cpp:229 + #6 0x000000000040933a in main (argc=, argv=) at /home/akohlmey/compile/lammps/src/main.cpp:65 + (gdb) + +You can also print the value of variables and see if there is anything +unexpected. Segmentation faults, for example, commonly happen when a +pointer variable is not assigned and still initialized to NULL. + +.. code-block:: + + (gdb) print x + $1 = (double **) 0x7ffff7ca1010 + (gdb) print i + $2 = 0 + (gdb) print x[0] + $3 = (double *) 0x7ffff6d80010 + (gdb) print x[0][0] + $4 = 0 + (gdb) print x[1][0] + $5 = 0.83979809569125363 + (gdb) print atom->rmass + $6 = (double *) 0x0 + (gdb) + + +Inspect a core dump file with the debugger +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +When an executable crashes with a "core dumped" message, it creates a +file "core" or "core." which contains the information about the +current state. This file may be located in the folder where you ran +LAMMPS or in some hidden folder managed by the systemd daemon. In the +latter case, you need to "extract" the core file with the ``coredumpctl`` +utility to the current folder. Example: ``coredumpctl -o core dump lmp``. +Now you can launch the debugger to load the executable, its debug info +and the core dump and drop you to a prompt like before. + +.. code-block:: + + $ gdb lmp core + Reading symbols from lmp... + [New LWP 1928535] + [Thread debugging using libthread_db enabled] + Using host libthread_db library "/lib64/libthread_db.so.1". + Core was generated by `./lmp -in in.melt'. + Program terminated with signal SIGSEGV, Segmentation fault. + #0 0x00000000006653ab in LAMMPS_NS::PairLJCut::compute (this=0x1b10740, eflag=1, vflag=) + at /home/akohlmey/compile/lammps/src/pair_lj_cut.cpp:139 + 139 comx += atom->rmass[i]*x[i][0]; /* BUG */ + (gdb) + +From here on, you use the same commands as shown before to get a stack +trace and print current values of (pointer) variables. + + +Using valgrind to get a stack trace +----------------------------------- + +The `valgrind `_ suite of tools allows to closely +inspect the behavior of a compiled program by essentially emulating a +CPU and instrumenting the program while running. This slows down +execution quite significantly, but can also report issues that are not +resulting in a crash. The default valgrind tool is a memory checker and +you can use it by prefixing the normal command line with ``valgrind``. +Unlike GDB, this will also work for parallel execution, but it is +recommended to redirect the valgrind output to a file (e.g. with +``--log-file=crash-%p.txt``, the %p will be substituted with the +process ID) so that the messages of the multiple valgrind instances to +the console are not mixed. + +.. code-block:: + + $ valgrind ./lmp -in in.melt + ==1933642== Memcheck, a memory error detector + ==1933642== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. + ==1933642== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info + ==1933642== Command: ./lmp -in in.melt + ==1933642== + LAMMPS (19 Mar 2020) + OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:94) + using 1 OpenMP thread(s) per MPI task + Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 + Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 1 by 1 by 1 MPI processor grid + Created 4000 atoms + create_atoms CPU = 0.032964 secs + Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 12 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + Setting up Verlet run ... + Unit style : lj + Current step : 0 + Time step : 0.005 + ==1933642== Invalid read of size 8 + ==1933642== at 0x6653AB: LAMMPS_NS::PairLJCut::compute(int, int) (pair_lj_cut.cpp:139) + ==1933642== by 0x4CF0A1: LAMMPS_NS::Verlet::setup(int) (verlet.cpp:131) + ==1933642== by 0x49DB41: LAMMPS_NS::Run::command(int, char**) (run.cpp:177) + ==1933642== by 0x412589: void LAMMPS_NS::Input::command_creator(LAMMPS_NS::LAMMPS*, int, char**) (input.cpp:881) + ==1933642== by 0x410AD2: LAMMPS_NS::Input::execute_command() (input.cpp:864) + ==1933642== by 0x4111FA: LAMMPS_NS::Input::file() (input.cpp:229) + ==1933642== by 0x409339: main (main.cpp:65) + ==1933642== Address 0x0 is not stack'd, malloc'd or (recently) free'd + ==1933642== + +As you can see, the stack trace information is similar to that obtained +from GDB. In addition you get a more specific hint about what cause the +segmentation fault, i.e. that it is a NULL pointer dereference. To find +out which pointer exactly was NULL, you need to use the debugger, though. + diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 396c99e2b5..3f2233c108 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -584,6 +584,7 @@ dephasing dequidt Dequidt der +dereference derekt Derjagin Derjaguin @@ -2839,6 +2840,7 @@ Synechococcus sys sysdim Syst +systemd Sz Tabbernor tabinner From 3201213bec8a1084a75668ce9e93fbaf400e1fb0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 12 Apr 2020 16:32:16 -0400 Subject: [PATCH 26/39] remove tabs --- doc/src/Errors_debug.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/Errors_debug.rst b/doc/src/Errors_debug.rst index a21099ee18..1e7e678602 100644 --- a/doc/src/Errors_debug.rst +++ b/doc/src/Errors_debug.rst @@ -101,7 +101,7 @@ drop back to the GDB prompt. Program received signal SIGSEGV, Segmentation fault. 0x00000000006653ab in LAMMPS_NS::PairLJCut::compute (this=0x829740, eflag=1, vflag=) at /home/akohlmey/compile/lammps/src/pair_lj_cut.cpp:139 - 139 comx += atom->rmass[i]*x[i][0]; /* BUG */ + 139 comx += atom->rmass[i]*x[i][0]; /* BUG */ (gdb) Now typing the command "where" will show the stack of functions starting from @@ -165,7 +165,7 @@ and the core dump and drop you to a prompt like before. Program terminated with signal SIGSEGV, Segmentation fault. #0 0x00000000006653ab in LAMMPS_NS::PairLJCut::compute (this=0x1b10740, eflag=1, vflag=) at /home/akohlmey/compile/lammps/src/pair_lj_cut.cpp:139 - 139 comx += atom->rmass[i]*x[i][0]; /* BUG */ + 139 comx += atom->rmass[i]*x[i][0]; /* BUG */ (gdb) From here on, you use the same commands as shown before to get a stack From ebf6e23a6755476f273f9dff8f3973bf41c2dc39 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 12 Apr 2020 16:32:40 -0400 Subject: [PATCH 27/39] explain error message when using a non-c++11 compliant compiler. --- doc/src/Build_basics.rst | 36 +++++++++++++++++++++++++++--------- doc/src/Build_make.rst | 4 +++- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/doc/src/Build_basics.rst b/doc/src/Build_basics.rst index df99c8643d..6abfa9806a 100644 --- a/doc/src/Build_basics.rst +++ b/doc/src/Build_basics.rst @@ -270,17 +270,35 @@ Serial build with GNU gcc (see ``src/MAKE/Makefile.serial``): LINK = g++ LINKFLAGS = -g -O + .. note:: - If you build LAMMPS with any :doc:`accelerator packages ` - included, there may be specific optimization flags that are either - required or recommended to enable required features and to achieve - optimal performance. You need to include these in the CCFLAGS and - LINKFLAGS settings above. For details, see the individual package - doc pages listed on the :doc:`Speed packages ` doc - page. Or examine these files in the src/MAKE/OPTIONS directory. - They correspond to each of the 5 accelerator packages and their - hardware variants: + If compilation stops with a message like the following: + + .. code-block:: + + g++ -g -O3 -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 -I../STUBS -c ../main.cpp + In file included from ../pointers.h:24:0, + from ../input.h:17, + from ../main.cpp:16: + ../lmptype.h:34:2: error: #error LAMMPS requires a C++11 (or later) compliant compiler. Enable C++11 compatibility or upgrade the compiler. + + then you have either an unsupported (old) compiler or you have to + turn on C++11 mode. The latter applies to GCC 4.8.x shipped with + RHEL 7.x and CentOS 7.x. For those compilers, you need to add the + ``-std=c++11`` flag. Otherwise, you would have to install a newer + compiler that supports C++11; either as a binary package or through + compiling from source. + +If you build LAMMPS with any :doc:`accelerator packages +` included, there may be specific optimization flags +that are either required or recommended to enable required features and +to achieve optimal performance. You need to include these in the +CCFLAGS and LINKFLAGS settings above. For details, see the individual +package doc pages listed on the :doc:`Speed packages ` +doc page. Or examine these files in the src/MAKE/OPTIONS directory. +They correspond to each of the 5 accelerator packages and their hardware +variants: .. code-block:: bash diff --git a/doc/src/Build_make.rst b/doc/src/Build_make.rst index bc294175e0..af5e319121 100644 --- a/doc/src/Build_make.rst +++ b/doc/src/Build_make.rst @@ -20,7 +20,9 @@ with :doc:`CMake `. The makefiles of the traditional make based build process and the scripts they are calling expect a few additional tools to be available and functioning. - * a working C/C++ compiler toolchain; on Linux these are often the GNU compilers + * a working C/C++ compiler toolchain supporting the C++11 standard; on + Linux these are often the GNU compilers. Some older compilers + require adding flags like ``-std=c++11`` to enable the C++11 mode. * a Bourne shell compatible "Unix" shell program (often this is ``bash``) * a few shell utilities: ``ls``, ``mv``, ``ln``, ``rm``, ``grep``, ``sed``, ``tr``, ``cat``, ``touch``, ``diff``, ``dirname`` * python (optional, required for ``make lib-`` in the src folder). From fbce1a85495dfb4967f392c638818f04c75e9d29 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 12 Apr 2020 21:39:19 -0400 Subject: [PATCH 28/39] write initial part of CMake tutorial --- doc/src/Howto_cmake.rst | 244 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 239 insertions(+), 5 deletions(-) diff --git a/doc/src/Howto_cmake.rst b/doc/src/Howto_cmake.rst index 2e97a92f9f..96ef039ab8 100644 --- a/doc/src/Howto_cmake.rst +++ b/doc/src/Howto_cmake.rst @@ -1,10 +1,192 @@ Using CMake with LAMMPS tutorial ================================ -Thus a configuration can be quickly modified by directing CMake to the -location of this cache file and then using options that are supposed to -be altered. +The support for building LAMMPS with CMake is a recent addition to +LAMMPS thanks to the efforts of Christoph Junghans (LANL) and Richard +Berger (Temple U). One of the key strengths of CMake is that it is not +tied to a specific platform or build system and thus generate the files +necessary to build and develop for different build systems and on +different platforms. Note, that this applies to the build system itself +not the LAMMPS code. In other words, without additional porting effort, +it is not possible - for example - to compile LAMMPS with Visual C++ on +Windows. The build system output can also include support files +necessary to programm LAMMPS as a project in integrated development +environments (IDE) like Eclipse, Visual Studio, QtCreator, Xcode, +CodeBlocks, Kate and others. +A second important feature of CMake is, that it can detect and validate +available libraries, optimal settings, available support tools and so +on, so that by default LAMMPS will take advantage of available tools +without requiring to provide the details about how to enable/integrate +them. + +The downside of this approach is, that there is some complexity +associated with running CMake itself and how to achieve desired +customizations and modifications to the LAMMPS configuration and +compilation. And for as long as this facility is relatively new and +not as widely used as the traditional build process, there are chances +that the scripts that CMake processes may have bugs or are missing +options, despite the best efforts to test and verify its functionality. + +This tutorial will show how to manage this through some selected +examples. Please see the chapter about :doc:`building LAMMPS ` +for descriptions of specific flags and options for LAMMPS in general and +for specific packages. + +CMake can be used through either the command-line interface (CLI) +program ``cmake`` (or ``cmake3``), a text mode interactive user +interface (TUI) program ``ccmake`` (or ``ccmake3``), or a graphical user +interface (GUI) program ``cmake-gui``. All of them are portable +software available on all supported platforms and can be used +interchangeably. The minimum supported CMake version is 3.10 (3.12 or +later is recommended). + + +Prerequisites +------------- + +This tutorial assumes that you are operating in a command-line environment +using a shell like Bash. + +- Linux: any Terminal window will work +- MacOS X: launch the Terminal application. +- Windows 10: install and run the :doc:`Windows subsystem for Linux ` + +We also assume that you have downloaded and unpacked a recent LAMMPS source code package +or used Git to create a clone of the LAMMPS sources on your compilation machine. + +You should change into the top level directory of the LAMMPS source tree all +paths mentioned in the tutorial are relative to that. Immediately after downloading +it should look like this: + +.. code-block:: bash + + $ ls + bench doc lib potentials README tools + cmake examples LICENSE python src + +Build directory versus source directory +--------------------------------------- + +When using CMake the build procedure is separated into multiple distinct phases: + + #. **Configuration:** detect or define which features and settings + should be enable and used and how LAMMPS should be compiled + #. **Compilation:** generate and compile all necessary source files + and build libraries and executables. + #. **Installation:** copy selected files from the compilation into + your file system, so they can be used without having to keep the + source and build tree around. + +The configuration and compilation of LAMMPS has to happen in a dedicated +*build directory* which must be different from the source directory. +Also the source directory (``src``) must remain pristine, so it is not +allowed to "install" packages using the traditional make process and +after an compilation attempt all created source files must be removed. +This can be achieved with ``make no-all purge``. + +You can pick **any** folder outside the source tree. We recommend to +create a folder ``build`` in the top-level directory, or multiple +folders in case you want to compile LAMMPS in different configurations +(``build-parallel``, ``build-serial``) or with different compilers +(``build-gnu``, ``build-clang``, ``build-intel``) and so on. + + +Running CMake +------------- + +CLI version +^^^^^^^^^^^ + +In the (empty) ``build`` directory, we now run the command ``cmake +../cmake``, which will start the configuration phase and you will see +the progress of the configuration printed to the screen followed by a +summary of the enabled features, options and compiler settings. A typical +summary screen will look like this: + +.. code-block:: + + $ cmake ../cmake/ + -- The CXX compiler identification is GNU 8.2.0 + -- Check for working CXX compiler: /opt/tools/gcc-8.2.0/bin/c++ + -- Check for working CXX compiler: /opt/tools/gcc-8.2.0/bin/c++ - works + -- Detecting CXX compiler ABI info + -- Detecting CXX compiler ABI info - done + -- Detecting CXX compile features + -- Detecting CXX compile features - done + -- Found Git: /usr/bin/git (found version "2.25.2") + -- Running check for auto-generated files from make-based build system + -- Found MPI_CXX: /usr/lib64/mpich/lib/libmpicxx.so (found version "3.1") + -- Found MPI: TRUE (found version "3.1") + -- Looking for C++ include omp.h + -- Looking for C++ include omp.h - found + -- Found OpenMP_CXX: -fopenmp (found version "4.5") + -- Found OpenMP: TRUE (found version "4.5") + -- Found JPEG: /usr/lib64/libjpeg.so (found version "62") + -- Found PNG: /usr/lib64/libpng.so (found version "1.6.37") + -- Found ZLIB: /usr/lib64/libz.so (found version "1.2.11") + -- Found GZIP: /usr/bin/gzip + -- Found FFMPEG: /usr/bin/ffmpeg + -- Performing Test COMPILER_SUPPORTS-ffast-math + -- Performing Test COMPILER_SUPPORTS-ffast-math - Success + -- Performing Test COMPILER_SUPPORTS-march=native + -- Performing Test COMPILER_SUPPORTS-march=native - Success + -- Looking for C++ include cmath + -- Looking for C++ include cmath - found + -- Generating style_angle.h... + [...] + -- Generating lmpinstalledpkgs.h... + -- The following tools and libraries have been found and configured: + * Git + * MPI + * OpenMP + * JPEG + * PNG + * ZLIB + + -- <<< Build configuration >>> + Build type: RelWithDebInfo + Install path: /home/akohlmey/.local + Generator: Unix Makefiles using /usr/bin/gmake + -- <<< Compilers and Flags: >>> + -- C++ Compiler: /opt/tools/gcc-8.2.0/bin/c++ + Type: GNU + Version: 8.2.0 + C++ Flags: -O2 -g -DNDEBUG + Defines: LAMMPS_SMALLBIG;LAMMPS_MEMALIGN=64;LAMMPS_JPEG;LAMMPS_PNG;LAMMPS_GZIP;LAMMPS_FFMPEG + Options: -ffast-math;-march=native + -- <<< Linker flags: >>> + -- Executable name: lmp + -- Static library flags: + -- <<< MPI flags >>> + -- MPI includes: /usr/include/mpich-x86_64 + -- MPI libraries: /usr/lib64/mpich/lib/libmpicxx.so;/usr/lib64/mpich/lib/libmpi.so; + -- Configuring done + -- Generating done + -- Build files have been written to: /home/akohlmey/compile/lammps/build + +The ``cmake`` command has one mandatory argument, and that is a folder +with either the file ``CMakeLists.txt`` or ``CMakeCache.txt``. The +``CMakeCache.txt`` file is created during the CMake configuration run +and contains all active settings, thus after a first run of CMake +all future runs in the build folder can use the folder ``.`` and CMake +will know where to find the CMake scripts and reload the settings +from the previous step. This means, that one can modify an existing +configuration by re-running CMake, but only needs to provide flags +indicating the desired change, everything else will be retained. One +can also mix compilation and configuration, i.e. start with a minimal +configuration and then, if needed, enable additional features and +recompile. + +The steps above **will NOT compile the code**\ . The compilation can be +started in a portable fashion with ``cmake --build .``, or you use the +selected built tool, e.g. ``make``. + +TUI version +^^^^^^^^^^^ + +For the text mode UI CMake program the basical principle is the same. +You start the command ``ccmake ../cmake`` in the ``build`` folder. .. list-table:: @@ -26,6 +208,32 @@ be altered. Options screen of ``ccmake`` + +This will show you the initial screen (left image) with the empty +configuration cache. Now you type the 'c' key to run the configuration +step. That will do a first configuration run and show the summary +(center image). You exit the summary screen with 'e' and see now the +main screen with detected options and settings. You can now make changes +by moving and down with the arrow keys of the keyboard and modify +entries. For on/off settings, the enter key will toggle the state. +For others, hitting enter will allow you to modify the value and +you commit the change by hitting the enter key again or cancel using +the escape key. All "new" settings will be marked with a star '\*' +and for as long as one setting is marked like this, you have to +re-run the configuration by hitting the 'c' key again, sometimes +multiple times unless the TUI shows the word "generate" next to the +letter 'g' and by hitting the 'g' key the build files will be written +to the folder and the TUI exits. You can quit without generating +build files by hitting 'q'. + +GUI version +^^^^^^^^^^^ + +For the graphical CMake program the steps are similar to the TUI +version. You can type the command ``cmake-gui ../cmake`` in the +``build`` folder. In this case the path to the CMake script folder is +not required, it can also be entered from the GUI. + .. list-table:: * - .. figure:: JPG/cmake-gui-initial.png @@ -46,8 +254,34 @@ be altered. Options screen of ``cmake-gui`` -You must have CMake version 3.10 or later on your system to build -LAMMPS. Installation instructions for CMake are below. +Again, you start with an empty configuration cache (left image) and need +to start the configuration step. For the very first configuration in a +folder, you will have a popup dialog (center image) asking to select the +desired build tool and some configuration settings (stick with the +default) and then you get the option screen with all new settings +highlighted in red. You can modify them (or not) and click on the +"configure" button again until satisfied and click on the "generate" +button to write out the build files. You can exit the GUI from the +"File" menu or hit "ctrl-q". + + +Setting options +--------------- + + + + +Using presets +------------- + +Since LAMMPS has a lot of optional features specifying them all +on the command line, or - when selecting a different compiler toolchain - +multiple options have to be changed + + +Choosing generators +------------------- + After the initial build, if you edit LAMMPS source files, or add your own new files to the source directory, you can just re-type make from From 29f9ca4b546d2fe80667837eb4ad89971d7366e1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 13 Apr 2020 07:22:37 -0400 Subject: [PATCH 29/39] use list-table and figure to have side-by-side images --- doc/src/Howto_cmake.rst | 1 - doc/src/balance.rst | 34 +++++++++++++++++++--------------- doc/src/fix_balance.rst | 37 ++++++++++++++++++------------------- 3 files changed, 37 insertions(+), 35 deletions(-) diff --git a/doc/src/Howto_cmake.rst b/doc/src/Howto_cmake.rst index 96ef039ab8..adeaf35114 100644 --- a/doc/src/Howto_cmake.rst +++ b/doc/src/Howto_cmake.rst @@ -208,7 +208,6 @@ You start the command ``ccmake ../cmake`` in the ``build`` folder. Options screen of ``ccmake`` - This will show you the initial screen (left image) with the empty configuration cache. Now you type the 'c' key to run the configuration step. That will do a first configuration run and show the summary diff --git a/doc/src/balance.rst b/doc/src/balance.rst index 5e631fdd27..5873724924 100644 --- a/doc/src/balance.rst +++ b/doc/src/balance.rst @@ -175,23 +175,27 @@ a logical 3d grid of processors. They operate by changing the cutting planes (or lines) between processors in 3d (or 2d), to adjust the volume (area in 2d) assigned to each processor, as in the following 2d diagram where processor sub-domains are shown and particles are -colored by the processor that owns them. The leftmost diagram is the -default partitioning of the simulation box across processors (one -sub-box for each of 16 processors); the middle diagram is after a -"grid" method has been applied. +colored by the processor that owns them. -.. image:: JPG/balance_uniform_small.jpg - :target: JPG/balance_uniform.jpg -.. image:: JPG/balance_nonuniform_small.jpg - :target: JPG/balance_nonuniform.jpg -.. image:: JPG/balance_rcb_small.jpg - :target: JPG/balance_rcb.jpg +.. list-table:: -The *rcb* style is a "tiling" method which does not produce a logical -3d grid of processors. Rather it tiles the simulation domain with -rectangular sub-boxes of varying size and shape in an irregular -fashion so as to have equal numbers of particles (or weight) in each -sub-box, as in the rightmost diagram above. + * - .. figure:: JPG/balance_uniform_small.jpg + :target: JPG/balance_uniform.jpg + + - .. figure:: JPG/balance_nonuniform_small.jpg + :target: JPG/balance_nonuniform.jpg + + - .. figure:: JPG/balance_rcb_small.jpg + :target: JPG/balance_rcb.jpg + +The leftmost diagram is the default partitioning of the simulation box +across processors (one sub-box for each of 16 processors); the middle +diagram is after a "grid" method has been applied. The *rcb* style is a +"tiling" method which does not produce a logical 3d grid of processors. +Rather it tiles the simulation domain with rectangular sub-boxes of +varying size and shape in an irregular fashion so as to have equal +numbers of particles (or weight) in each sub-box, as in the rightmost +diagram above. The "grid" methods can be used with either of the :doc:`comm_style ` command options, *brick* or *tiled*\ . The diff --git a/doc/src/fix_balance.rst b/doc/src/fix_balance.rst index 13fdf6b1c7..b92644fcd9 100644 --- a/doc/src/fix_balance.rst +++ b/doc/src/fix_balance.rst @@ -154,28 +154,27 @@ of processors. It operates by changing the cutting planes (or lines) between processors in 3d (or 2d), to adjust the volume (area in 2d) assigned to each processor, as in the following 2d diagram where processor sub-domains are shown and atoms are colored by the processor -that owns them. The leftmost diagram is the default partitioning of -the simulation box across processors (one sub-box for each of 16 -processors); the middle diagram is after a "grid" method has been -applied. +that owns them. -.. |bal_uni| image:: JPG/balance_uniform_small.jpg - :target: JPG/balance_uniform.jpg - :width: 31% -.. |bal_non| image:: JPG/balance_nonuniform_small.jpg - :target: JPG/balance_nonuniform.jpg - :width: 31% -.. |bal_rcb| image:: JPG/balance_rcb_small.jpg - :target: JPG/balance_rcb.jpg - :width: 31% +.. list-table:: -|bal_uni| |bal_non| |bal_rcb| + * - .. figure:: JPG/balance_uniform_small.jpg + :target: JPG/balance_uniform.jpg -The *rcb* style is a "tiling" method which does not produce a logical -3d grid of processors. Rather it tiles the simulation domain with -rectangular sub-boxes of varying size and shape in an irregular -fashion so as to have equal numbers of particles (or weight) in each -sub-box, as in the rightmost diagram above. + - .. figure:: JPG/balance_nonuniform_small.jpg + :target: JPG/balance_nonuniform.jpg + + - .. figure:: JPG/balance_rcb_small.jpg + :target: JPG/balance_rcb.jpg + +The leftmost diagram is the default partitioning of the simulation box +across processors (one sub-box for each of 16 processors); the middle +diagram is after a "grid" method has been applied. The *rcb* style is a +"tiling" method which does not produce a logical 3d grid of processors. +Rather it tiles the simulation domain with rectangular sub-boxes of +varying size and shape in an irregular fashion so as to have equal +numbers of particles (or weight) in each sub-box, as in the rightmost +diagram above. The "grid" methods can be used with either of the :doc:`comm_style ` command options, *brick* or *tiled*\ . The From e9fdc5e84b8d30738d1c529c3f9d40e1131a43fd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 13 Apr 2020 14:34:23 -0400 Subject: [PATCH 30/39] rework the debug info section to be more readable and make the options more visible --- doc/src/Build_basics.rst | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/doc/src/Build_basics.rst b/doc/src/Build_basics.rst index 62eb902d61..7bb167a3df 100644 --- a/doc/src/Build_basics.rst +++ b/doc/src/Build_basics.rst @@ -7,7 +7,7 @@ CMake and make: * :ref:`Serial vs parallel build ` * :ref:`Choice of compiler and compile/link options ` * :ref:`Build the LAMMPS executable and library ` -* :ref:`Debug support ` +* :ref:`Including and removing debug support ` * :ref:`Build the LAMMPS documentation ` * :ref:`Install LAMMPS after a build ` @@ -418,21 +418,30 @@ recommended to ensure the integrity of the system software installation. .. _debug: -Debug support -------------- +Excluding or removing debug support +----------------------------------- By default the compilation settings will include the *-g* flag which instructs the compiler to include debug information (e.g. which line of -source code particular instructions correspond to). This can be +source code a particular instruction correspond to). This can be extremely useful in case LAMMPS crashes and can help to provide crucial information in :doc:`tracking down the origin of a crash ` -and possibly help fix a bug in the source code. However, this increases -the storage requirements for object files, libraries, and the executable -3-5 fold. If this is a concern, you can change the compilation settings -(either by editing the machine makefile or setting the compiler flags or -build time when using CMake). If you are only concerned about the -executable being too large, you can use the ``strip`` tool (e.g. ``strip -lmp_serial``) to remove the debug information from the file. +and help the LAMMPS developers fix bugs in the source code. However, +this increases the storage requirements for object files, libraries, and +the executable 3-5 fold. + +If this is a concern, you can change the compilation settings or remove +the debug information from the LAMMPS executable: + +- **Traditional make**: edit your ``Makefile.`` to remove the + *-g* flag from the ``CCFLAGS`` and ``LINKFLAGS`` definitions +- **CMake**: use ``-D CMAKE_BUILD_TYPE=Release`` or explicitly reset + the applicable compiler flags (best done using the text mode or + graphical user interface). +- **Remove debug info**: If you are only concerned about the executable + being too large, you can use the ``strip`` tool (e.g. ``strip + lmp_serial``) to remove the debug information from the executable file. + Do not strip libraries or object files, as that will render them unusable. ---------- From 6e4d5fd020200c0167a9660e2e7594459c3f94d5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 13 Apr 2020 14:34:39 -0400 Subject: [PATCH 31/39] address spelling and other minor issues --- doc/src/Howto_cmake.rst | 20 +++++++------------- doc/utils/sphinx-config/false_positives.txt | 1 + 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/doc/src/Howto_cmake.rst b/doc/src/Howto_cmake.rst index adeaf35114..5c8a543bb8 100644 --- a/doc/src/Howto_cmake.rst +++ b/doc/src/Howto_cmake.rst @@ -10,7 +10,7 @@ different platforms. Note, that this applies to the build system itself not the LAMMPS code. In other words, without additional porting effort, it is not possible - for example - to compile LAMMPS with Visual C++ on Windows. The build system output can also include support files -necessary to programm LAMMPS as a project in integrated development +necessary to program LAMMPS as a project in integrated development environments (IDE) like Eclipse, Visual Studio, QtCreator, Xcode, CodeBlocks, Kate and others. @@ -21,17 +21,11 @@ without requiring to provide the details about how to enable/integrate them. The downside of this approach is, that there is some complexity -associated with running CMake itself and how to achieve desired -customizations and modifications to the LAMMPS configuration and -compilation. And for as long as this facility is relatively new and -not as widely used as the traditional build process, there are chances -that the scripts that CMake processes may have bugs or are missing -options, despite the best efforts to test and verify its functionality. - -This tutorial will show how to manage this through some selected -examples. Please see the chapter about :doc:`building LAMMPS ` -for descriptions of specific flags and options for LAMMPS in general and -for specific packages. +associated with running CMake itself and how to customize the building +of LAMMPS. This tutorial will show how to manage this through some +selected examples. Please see the chapter about :doc:`building LAMMPS +` for descriptions of specific flags and options for LAMMPS in +general and for specific packages. CMake can be used through either the command-line interface (CLI) program ``cmake`` (or ``cmake3``), a text mode interactive user @@ -185,7 +179,7 @@ selected built tool, e.g. ``make``. TUI version ^^^^^^^^^^^ -For the text mode UI CMake program the basical principle is the same. +For the text mode UI CMake program the basic principle is the same. You start the command ``ccmake ../cmake`` in the ``build`` folder. .. list-table:: diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 167c72c6c2..c19349f3e6 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -492,6 +492,7 @@ cstdlib cstring cstyle csvr +ctrl Ctypes ctypes cuda From 8962da19ca678946471cc5bb8f274df8b1ee23ca Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 13 Apr 2020 19:34:46 -0400 Subject: [PATCH 32/39] complete cmake howto --- doc/src/Howto_cmake.rst | 303 ++++++++++++++++++------------- doc/src/JPG/cmake-codeblocks.png | Bin 0 -> 132288 bytes 2 files changed, 174 insertions(+), 129 deletions(-) create mode 100644 doc/src/JPG/cmake-codeblocks.png diff --git a/doc/src/Howto_cmake.rst b/doc/src/Howto_cmake.rst index 5c8a543bb8..127b550c5a 100644 --- a/doc/src/Howto_cmake.rst +++ b/doc/src/Howto_cmake.rst @@ -35,6 +35,9 @@ software available on all supported platforms and can be used interchangeably. The minimum supported CMake version is 3.10 (3.12 or later is recommended). +All details about features and settings for CMake are in the `CMake +online documentation `_. We focus +below on the most important aspects with respect to compiling LAMMPS. Prerequisites ------------- @@ -81,9 +84,12 @@ This can be achieved with ``make no-all purge``. You can pick **any** folder outside the source tree. We recommend to create a folder ``build`` in the top-level directory, or multiple -folders in case you want to compile LAMMPS in different configurations -(``build-parallel``, ``build-serial``) or with different compilers -(``build-gnu``, ``build-clang``, ``build-intel``) and so on. +folders in case you want to have separate builds of LAMMPS with +different options (``build-parallel``, ``build-serial``) or with +different compilers (``build-gnu``, ``build-clang``, ``build-intel``) +and so on. All the auxiliary files created by one build process +(executable, object files, log files, etc) are stored in this directory +or sub-directories within it that CMake creates. Running CMake @@ -249,8 +255,8 @@ not required, it can also be entered from the GUI. Again, you start with an empty configuration cache (left image) and need to start the configuration step. For the very first configuration in a -folder, you will have a popup dialog (center image) asking to select the -desired build tool and some configuration settings (stick with the +folder, you will have a pop-up dialog (center image) asking to select +the desired build tool and some configuration settings (stick with the default) and then you get the option screen with all new settings highlighted in red. You can modify them (or not) and click on the "configure" button again until satisfied and click on the "generate" @@ -261,146 +267,185 @@ button to write out the build files. You can exit the GUI from the Setting options --------------- +Options that enable, disable or modify settings are modified by setting +the value of CMake variables. This is done on the command line with the +*-D* flag in the format ``-D VARIABLE=value``, e.g. ``-D +CMAKE_BUILD_TYPE=Release`` or ``-D BUILD_MPI=on``. There is one quirk: +when used before the CMake directory, there may be a space between the +*-D* flag and the variable, after it must not be. Such CMake variables +can have boolean values (on/off, yes/no, or 1/0 are all valid) or are +strings representing a choice, or a path, or are free format. If the +string would contain whitespace, it must be put in quotes, for example +``-D CMAKE_TUNE_FLAGS="-ftree-vectorize -ffast-math"``. +CMake variables fall into two categories: 1) common CMake variables that +are used by default for any CMake configuration setup and 2) project +specific variables, i.e. settings that are specific for LAMMPS. +Also CMake variables can be flagged as *advanced*, which means they are +not shown in the text mode or graphical CMake program in the overview +of all settings by default, but only when explicitly requested (by hitting +the 't' key or clicking on the 'Advanced' check-box). + +Some common CMake variables +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :header-rows: 1 + + * - Variable + - Description + * - ``CMAKE_INSTALL_PREFIX`` + - root directory of install location for ``make install`` (default: ``$HOME/.local``) + * - ``CMAKE_BUILD_TYPE`` + - controls compilation options: + one of ``RelWithDebInfo`` (default), ``Release``, ``Debug``, ``MinSizeRel`` + * - ``BUILD_SHARED_LIBS`` + - if set to ``on`` build the LAMMPS library as shared library (default: ``off``) + * - ``CMAKE_MAKE_PROGRAM`` + - name/path of the compilation command (default depends on *-G* option, usually ``make``) + * - ``CMAKE_VERBOSE_MAKEFILE`` + - if set to ``on`` echo commands while executing during build (default: ``off``) + * - ``CMAKE_C_COMPILER`` + - C compiler to be used for compilation (default: system specific, ``gcc`` on Linux) + * - ``CMAKE_CXX_COMPILER`` + - C++ compiler to be used for compilation (default: system specific, ``g++`` on Linux) + * - ``CMAKE_Fortran_COMPILER`` + - Fortran compiler to be used for compilation (default: system specific, ``gfortran`` on Linux) + * - ``CXX_COMPILER_LAUNCHER`` + - tool to launch the C++ compiler, e.g. ``ccache`` or ``distcc`` for faster compilation (default: empty) + +Some common LAMMPS specific variables +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :header-rows: 1 + + * - Variable + - Description + * - ``BUILD_MPI`` + - build LAMMPS with MPI support (default: ``on`` if a working MPI available, else ``off``) + * - ``BUILD_OMP`` + - build LAMMPS with OpenMP support (default: ``on`` if compiler supports OpenMP fully, else ``off``) + * - ``BUILD_TOOLS`` + - compile some additional executables from the ``tools`` folder (default: ``off``) + * - ``BUILD_DOC`` + - include building the documentation (default: ``off``) + * - ``CMAKE_TUNE_FLAGS`` + - common compiler flags, for optimization or instrumentation (default: compiler specific) + * - ``LAMMPS_MACHINE`` + - when set to ``name`` the LAMMPS executable and library will be called ``lmp_name`` and ``liblammps_name.a`` + * - ``LAMMPS_EXCEPTIONS`` + - when set to ``on`` errors will throw a C++ exception instead of aborting (default: ``off``) + * - ``FFT`` + - select which FFT library to use: ``FFTW3``, ``MKL``, ``KISS`` (default, unless FFTW3 is found) + * - ``FFT_SINGLE`` + - select whether to use single precision FFTs (default: ``off``) + * - ``WITH_JPEG`` + - whether to support JPEG format in :doc:`dump image ` (default: ``on`` if found) + * - ``WITH_PNG`` + - whether to support PNG format in :doc:`dump image ` (default: ``on`` if found) + * - ``WITH_GZIP`` + - whether to support reading and writing compressed files (default: ``on`` if found) + * - ``WITH_FFMPEG`` + - whether to support generating movies with :doc:`dump movie ` (default: ``on`` if found) + +Enabling or disabling LAMMPS packages +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The LAMMPS software is organized into a common core that is always +included and a large number of :doc:`add-on packages ` that +have to be enabled to be included into a LAMMPS executable. Packages +are enabled through setting variables of the kind ``PKG_`` to +``on`` and disabled by setting them to ``off`` (or using ``yes``, +``no``, ``1``, ``0`` correspondingly). ```` has to be replaced by +the name of the package, e.g. ``MOLECULE`` or ``USER-MISC``. Using presets ------------- -Since LAMMPS has a lot of optional features specifying them all -on the command line, or - when selecting a different compiler toolchain - -multiple options have to be changed +Since LAMMPS has a lot of optional features and packages, specifying +them all on the command line can be tedious. Or when selecting a +different compiler toolchain, multiple options have to be changed +consistently and that is rather error prone. Or when enabling certain +packages, they require consistent settings to be operated in a +particular mode. For this purpose, we are providing a selection of +"preset files" for CMake in the folder ``cmake/presets``. They +represent a way to pre-load or override the CMake configuration cache by +setting or changing CMake variables. Preset files are loaded using the +*-C* command line flag. You can combine loading multiple preset files or +change some variables later with additional *-D* flags. A few examples: +.. code-block:: bash + cmake -C ../cmake/preset/minimal.cmake -D PKG_MISC=on ../cmake + cmake -C ../cmake/preset/clang.cmake -C ../cmake/preset/most.cmake ../cmake + cmake -C ../cmake/preset/minimal.cmake -D BUILD_MPI=off ../cmake + +The first command will install the packages ``KSPACE``, ``MANYBODY``, +``MOLECULE``, ``RIGID`` and ``MISC``; the first four from the preset +file and the fifth from the explicit variable definition. The second +command will first switch the compiler toolchain to use the Clang +compilers and install a large number of packages that are not depending +on any special external libraries or tools and are not very unusual. +The third command will enable the first four packages like above and +then enforce compiling LAMMPS as a serial program (using the MPI STUBS +library). + +It is also possible to do this incrementally. + +.. code-block:: bash + + cmake -C ../cmake/preset/minimal.cmake ../cmake + cmake -D PKG_MISC=on . + +will achieve the same configuration like in the first example above. In +this scenario it is particularly convenient to do the second +configuration step using either the text mode or graphical user +interface (``ccmake`` or ``cmake-gui``). + + Choosing generators ------------------- +While CMake usually defaults to creating makefiles to compile software +with the ``make`` program, it supports multiple alternate build tools +(e.g. ``ninja-build`` which tends to be faster and more efficient in +parallelizing builds than ``make``) and can generate project files for +integrated development environments (IDEs) like VisualStudio, Eclipse or +CodeBlocks. This is specific to how the local CMake version was +configured and compiled. The list of available options can be seen at +the end of the output of ``cmake --help``. Example on Fedora 31 this is: -After the initial build, if you edit LAMMPS source files, or add your -own new files to the source directory, you can just re-type make from -your build directory and it will re-compile only the files that have -changed. If you want to change CMake options you can run cmake (or -ccmake or cmake-gui) again from the same build directory and alter -various options; see details below. Or you can remove the entire build -folder, recreate the directory and start over. +.. code-block:: -. Further details about features and settings for CMake -are in the `CMake online documentation `_ -For the rest of this manual we will assume that the build environment -is generated for "Unix Makefiles" and thus the ``cmake --build .`` will -call the ``make`` command or you can use it directly. + Generators + The following generators are available on this platform (* marks default): + * Unix Makefiles = Generates standard UNIX makefiles. + Green Hills MULTI = Generates Green Hills MULTI files + (experimental, work-in-progress). + Ninja = Generates build.ninja files. + Ninja Multi-Config = Generates build-.ninja files. + Watcom WMake = Generates Watcom WMake makefiles. + CodeBlocks - Ninja = Generates CodeBlocks project files. + CodeBlocks - Unix Makefiles = Generates CodeBlocks project files. + CodeLite - Ninja = Generates CodeLite project files. + CodeLite - Unix Makefiles = Generates CodeLite project files. + Sublime Text 2 - Ninja = Generates Sublime Text 2 project files. + Sublime Text 2 - Unix Makefiles + = Generates Sublime Text 2 project files. + Kate - Ninja = Generates Kate project files. + Kate - Unix Makefiles = Generates Kate project files. + Eclipse CDT4 - Ninja = Generates Eclipse CDT 4.0 project files. + Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files. - -There are 3 variants of the CMake command itself: a command-line version -(``cmake`` or ``cmake3``), a text mode UI version (``ccmake`` or ``ccmake3``), -and a graphical GUI version (``cmake-gui``). You can use any of them -interchangeably to configure and create the LAMMPS build environment. -On Linux all the versions produce a Makefile as their output by default. -See more details on each below. - -You can specify a variety of options with any of the 3 versions, which -affect how the build is performed and what is included in the LAMMPS -executable. Links to pages explaining all the options are listed on -the :doc:`Build ` doc page. - -You must perform the CMake build system generation and compilation in -a new directory you create. It can be anywhere on your local machine. -In these Build pages we assume that you are building in a directory -called ``lammps/build``. You can perform separate builds independently -with different options, so long as you perform each of them in a -separate directory you create. All the auxiliary files created by one -build process (executable, object files, log files, etc) are stored in -this directory or sub-directories within it that CMake creates. - ----------- - -**Command-line version of CMake**\ : +Below is a screenshot of using the CodeBlocks IDE with the ninja build tool +after running CMake as follows: .. code-block:: bash - cmake [options ...] /path/to/lammps/cmake # build from any dir - cmake [options ...] ../cmake # build from lammps/build - cmake3 [options ...] ../cmake # build from lammps/build - -The cmake command takes one required argument, which is the LAMMPS -cmake directory which contains the CMakeLists.txt file. - -The argument can be prefixed or followed by various CMake -command-line options. Several useful ones are: - -.. code-block:: bash - - -D CMAKE_INSTALL_PREFIX=path # where to install LAMMPS executable/lib if desired - -D CMAKE_BUILD_TYPE=type # type = RelWithDebInfo (default), Release, MinSizeRel, or Debug - -G output # style of output CMake generates (e.g. "Unix Makefiles" or "Ninja") - -D CMAKE_MAKE_PROGRAM=builder # name of the builder executable (e.g. when using "gmake" instead of "make") - -DVARIABLE=value # setting for a LAMMPS feature to enable - -D VARIABLE=value # ditto, but cannot come after CMakeLists.txt dir - -C path/to/preset/file # load some CMake settings before configuring - -All the LAMMPS-specific -D variables that a LAMMPS build supports are -described on the pages linked to from the :doc:`Build ` doc page. -All of these variable names are upper-case and their values are -lower-case, e.g. -D LAMMPS_SIZES=smallbig. For boolean values, any of -these forms can be used: yes/no, on/off, 1/0. - -On Unix/Linux machines, CMake generates a Makefile by default to -perform the LAMMPS build. Alternate forms of build info can be -generated via the -G switch, e.g. Visual Studio on a Windows machine, -Xcode on MacOS, or KDevelop on Linux. Type ``cmake --help`` to see the -"Generator" styles of output your system supports. - -.. note:: - - When CMake runs, it prints configuration info to the screen. - You should review this to verify all the features you requested were - enabled, including packages. You can also see what compilers and - compile options will be used for the build. Any errors in CMake - variable syntax will also be flagged, e.g. mis-typed variable names or - variable values. - -CMake creates a CMakeCache.txt file when it runs. This stores all the -settings, so that when running CMake again you can use the current -folder '.' instead of the path to the LAMMPS cmake folder as the -required argument to the CMake command. Either way the existing -settings will be inherited unless the CMakeCache.txt file is removed. - -If you later want to change a setting you can rerun cmake in the build -directory with different setting. Please note that some automatically -detected variables will not change their value when you rerun cmake. -In these cases it is usually better to first remove all the -files/directories in the build directory, or start with a fresh build -directory. - ----------- - -**Curses version (terminal-style menu) of CMake**\ : - -.. code-block:: bash - - ccmake ../cmake - -You initiate the configuration and build environment generation steps -separately. For the first you have to type **c**\ , for the second you -have to type **g**\ . You may need to type **c** multiple times, and may be -required to edit some of the entries of CMake configuration variables -in between. Please see the `ccmake manual `_ for -more information. - ----------- - -**GUI version of CMake**\ : - -.. code-block:: bash - - cmake-gui ../cmake - -You initiate the configuration and build environment generation steps -separately. For the first you have to click on the **Configure** button, -for the second you have to click on the **Generate** button. You may -need to click on **Configure** multiple times, and may be required to -edit some of the entries of CMake configuration variables in between. -Please see the `cmake-gui manual `_ -for more information. + cmake -G 'CodeBlocks - Ninja' ../cmake/presets/most.cmake ../cmake/ +.. image:: JPG/cmake-codeblocks.png + :align: center diff --git a/doc/src/JPG/cmake-codeblocks.png b/doc/src/JPG/cmake-codeblocks.png new file mode 100644 index 0000000000000000000000000000000000000000..d0d96fec8c5666fe3eb0721c426a435ea73c8167 GIT binary patch literal 132288 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