From f31b38f6849862aac502a9483a1cf67a2481ce16 Mon Sep 17 00:00:00 2001 From: adodin Date: Mon, 18 Nov 2024 17:22:48 -0800 Subject: [PATCH 01/15] CMake Build System for libnnp --- .gitignore | 1 + include/.gitignore | 1 + lib/.gitignore | 2 ++ src/CMakeLists.txt | 38 ++++++++++++++++++++++++++++++++++++++ src/libnnp/CMakeLists.txt | 15 +++++++++++++++ 5 files changed, 57 insertions(+) create mode 100644 src/CMakeLists.txt create mode 100644 src/libnnp/CMakeLists.txt diff --git a/.gitignore b/.gitignore index d305c323f2..f821414356 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.o compile_commands.json .clangd +build/ diff --git a/include/.gitignore b/include/.gitignore index e69de29bb2..db4787e66c 100644 --- a/include/.gitignore +++ b/include/.gitignore @@ -0,0 +1 @@ +*.h \ No newline at end of file diff --git a/lib/.gitignore b/lib/.gitignore index e69de29bb2..17a27a73ab 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -0,0 +1,2 @@ +*.a +*.so \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000000..30d8fa7981 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,38 @@ +################################################################################################### +# CMake Build System for n2p2 +################################################################################################### + +################################################################################################### +# Project & CMake Information +project(n2p2) +cmake_minimum_required(VERSION 3.16) # Same required version as LAMMPS (no extra dependencies) +################################################################################################### + +################################################################################################### +# Set C++ Standard +if(NOT CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 11) +endif() +if(CMAKE_CXX_STANDARD LESS 11) + message(FATAL_ERROR "C++ standard must be set to at least 11") +endif() +################################################################################################### + +################################################################################################### +# Project Path Variables +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../lib) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../lib) +set(PROJECT_INCLUDE ${CMAKE_BINARY_DIR}/../include) +set(CMAKE_SHARED_LIBRARY_SUFFIX .so) +################################################################################################### + +################################################################################################### +# Document CLI Option Defaults +option(BUILD_SHARED_LIBS "Build using shared libraries" OFF) +################################################################################################### + +################################################################################################### +# Go into each subdirectory +add_subdirectory(libnnp) +################################################################################################### \ No newline at end of file diff --git a/src/libnnp/CMakeLists.txt b/src/libnnp/CMakeLists.txt new file mode 100644 index 0000000000..76bedfd1e0 --- /dev/null +++ b/src/libnnp/CMakeLists.txt @@ -0,0 +1,15 @@ +################################################################################################### +# CMake Build System for n2p2/libnnp +################################################################################################### + +################################################################################################### +# Set Source Files +file(GLOB SRC_FILES "*.cpp") +file(GLOB HDR_FILES "*.h") +################################################################################################### + +################################################################################################### +# Specify Build Targets +add_library(nnp ${SRC_FILES}) # Build libnnp.X library. (Shared, pass -D BUILD_SHARED_LIBS) +install(FILES ${HDR_FILES} DESTINATION ${PROJECT_INCLUDE}) # Headers copied at install time +################################################################################################### \ No newline at end of file From 60d10324e0bec55b67425c3b4c25ac425070b67a Mon Sep 17 00:00:00 2001 From: adodin Date: Tue, 19 Nov 2024 13:30:18 -0800 Subject: [PATCH 02/15] libnnptrain CMake build system --- src/CMakeLists.txt | 3 ++- src/libnnptrain/CMakeLists.txt | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 src/libnnptrain/CMakeLists.txt diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 30d8fa7981..b73ac13fbc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -4,8 +4,8 @@ ################################################################################################### # Project & CMake Information -project(n2p2) cmake_minimum_required(VERSION 3.16) # Same required version as LAMMPS (no extra dependencies) +project(n2p2) ################################################################################################### ################################################################################################### @@ -35,4 +35,5 @@ option(BUILD_SHARED_LIBS "Build using shared libraries" OFF) ################################################################################################### # Go into each subdirectory add_subdirectory(libnnp) +add_subdirectory(libnnptrain) ################################################################################################### \ No newline at end of file diff --git a/src/libnnptrain/CMakeLists.txt b/src/libnnptrain/CMakeLists.txt new file mode 100644 index 0000000000..b0249c2fe8 --- /dev/null +++ b/src/libnnptrain/CMakeLists.txt @@ -0,0 +1,25 @@ +################################################################################################### +# CMake Build System for n2p2/libnnptrain +################################################################################################### + +################################################################################################### +# Set Source Files +file(GLOB SRC_FILES "*.cpp") +file(GLOB HDR_FILES "*.h") +################################################################################################### + +################################################################################################### +# Specify Build Targets +add_library(nnptrain ${SRC_FILES}) # Build libnnp.X library. (Shared, pass -D BUILD_SHARED_LIBS) +install(FILES ${HDR_FILES} DESTINATION ${PROJECT_INCLUDE}) # Headers copied at install time +################################################################################################### + +################################################################################################### +# Find Required Package dependencies +message("DIR: ${PROJECT_SOURCE_DIR}/libnnp") +find_package(MPI REQUIRED) +find_package(GSL REQUIRED) +find_package(Eigen3 3.4 REQUIRED NO_MODULE) +include_directories(${PROJECT_SOURCE_DIR}/libnnp ${GSL_INCLUDE_DIRS}) +target_link_libraries(nnptrain MPI GSL Eigen3::Eigen) +################################################################################################### \ No newline at end of file From 8a5aeee87282243c773a6621d57179fa250870f0 Mon Sep 17 00:00:00 2001 From: adodin Date: Tue, 19 Nov 2024 13:50:35 -0800 Subject: [PATCH 03/15] Corrected MPI include bug CMake --- src/libnnp/CMakeLists.txt | 7 +++++++ src/libnnptrain/CMakeLists.txt | 3 +-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/libnnp/CMakeLists.txt b/src/libnnp/CMakeLists.txt index 76bedfd1e0..779747a1bc 100644 --- a/src/libnnp/CMakeLists.txt +++ b/src/libnnp/CMakeLists.txt @@ -12,4 +12,11 @@ file(GLOB HDR_FILES "*.h") # Specify Build Targets add_library(nnp ${SRC_FILES}) # Build libnnp.X library. (Shared, pass -D BUILD_SHARED_LIBS) install(FILES ${HDR_FILES} DESTINATION ${PROJECT_INCLUDE}) # Headers copied at install time +################################################################################################### + +################################################################################################### +# Find Required Package dependencies +find_package(MPI REQUIRED) +target_link_libraries(nnp MPI) +include_directories(${MPI_INCLUDE_PATH}) ################################################################################################### \ No newline at end of file diff --git a/src/libnnptrain/CMakeLists.txt b/src/libnnptrain/CMakeLists.txt index b0249c2fe8..87a93ab9d4 100644 --- a/src/libnnptrain/CMakeLists.txt +++ b/src/libnnptrain/CMakeLists.txt @@ -16,10 +16,9 @@ install(FILES ${HDR_FILES} DESTINATION ${PROJECT_INCLUDE}) # Headers copied at ################################################################################################### # Find Required Package dependencies -message("DIR: ${PROJECT_SOURCE_DIR}/libnnp") find_package(MPI REQUIRED) find_package(GSL REQUIRED) find_package(Eigen3 3.4 REQUIRED NO_MODULE) -include_directories(${PROJECT_SOURCE_DIR}/libnnp ${GSL_INCLUDE_DIRS}) +include_directories(${MPI_INCLUDE_PATH} ${PROJECT_SOURCE_DIR}/libnnp ${GSL_INCLUDE_DIRS}) target_link_libraries(nnptrain MPI GSL Eigen3::Eigen) ################################################################################################### \ No newline at end of file From a5b10a7e125f2738fa7ed91a9a05e9dd29d2a33e Mon Sep 17 00:00:00 2001 From: adodin Date: Mon, 25 Nov 2024 22:45:00 -0800 Subject: [PATCH 04/15] Added Command Line Options to CMake Builds --- src/CMakeLists.txt | 62 ++++++++++++++++++++++++++++++++++ src/libnnp/CMakeLists.txt | 3 +- src/libnnptrain/CMakeLists.txt | 3 +- 3 files changed, 66 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b73ac13fbc..c3087b1bd8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -30,6 +30,68 @@ set(CMAKE_SHARED_LIBRARY_SUFFIX .so) ################################################################################################### # Document CLI Option Defaults option(BUILD_SHARED_LIBS "Build using shared libraries" OFF) +option(N2P2_NO_SF_GROUPS "Disable Symmetry function groups (NOT RECOMMENDED)" OFF) +option(N2P2_FULL_SFD_MEMORY "Store zero symmetry function derivatives" OFF) +option(N2P2_NO_SF_CACHE "Do not use symmetry function cache." OFF) +option(N2P2_NO_ASYM_POLY "Disable asymmetric polynomial symmetry functions." OFF) +option(N2P2_NO_TIME "Build with dummy Stopwatch class." OFF) +option(N2P2_NO_NEIGH_CHECK "Disable check for low number of neighbors." OFF) +option(N2P2_NO_MPI "Compile without MPI support." OFF) +option(NDEBUG "Disable all C++ asserts (also Eigen debugging)." OFF) +option(EIGEN_DONT_PARALLELIZE "Disable Eigen multi threading." ON) + +# TODO: Automatically Select BLAS vs MKL based on compiler +option(EIGEN_USE_BLAS "Use BLAS together with Eigen." ON) +option(EIGEN_USE_MKL_ALL "Use Intel MKL together with Eigen." OFF) +################################################################################################### + +################################################################################################### +# Set N2P2 Preprocessor Options Variable (Used in subdirectory CMakeLists) +if(N2P2_NO_SF_GROUPS) + set(N2P2_PROJECT_OPTIONS "${N2P2_PROJECT_OPTIONS} -DN2P2_NO_SF_GROUPS") +endif(N2P2_NO_SF_GROUPS) + +if(N2P2_FULL_SFD_MEMORY) + set(N2P2_PROJECT_OPTIONS "${N2P2_PROJECT_OPTIONS} -DN2P2_FULL_SFD_MEMORY") +endif(N2P2_FULL_SFD_MEMORY) + +if(N2P2_NO_SF_CACHE) + set(N2P2_PROJECT_OPTIONS "${N2P2_PROJECT_OPTIONS} -DN2P2_NO_SF_CACHE") +endif(N2P2_NO_SF_CACHE) + +if(N2P2_NO_ASYM_POLY) + set(N2P2_PROJECT_OPTIONS "${N2P2_PROJECT_OPTIONS} -DN2P2_NO_ASYM_POLY") +endif(N2P2_NO_ASYM_POLY) + +if(N2P2_NO_TIME) + set(N2P2_PROJECT_OPTIONS "${N2P2_PROJECT_OPTIONS} -DN2P2_NO_TIME") +endif(N2P2_NO_TIME) + +if(N2P2_NO_NEIGH_CHECK) + set(N2P2_PROJECT_OPTIONS "${N2P2_PROJECT_OPTIONS} -DN2P2_NO_NEIGH_CHECK") +endif(N2P2_NO_NEIGH_CHECK) + +if(N2P2_NO_MPI) + set(N2P2_PROJECT_OPTIONS "${N2P2_PROJECT_OPTIONS} -DN2P2_NO_MPI") +endif(N2P2_NO_MPI) + +if(EIGEN_DONT_PARALLELIZE) + set(EIGEN_PROJECT_OPTIONS "${EIGEN_PROJECT_OPTIONS} -DEIGEN_DONT_PARALLELIZE") +endif(EIGEN_DONT_PARALLELIZE) + +if(EIGEN_USE_BLAS) + set(EIGEN_PROJECT_OPTIONS "${EIGEN_PROJECT_OPTIONS} -DEIGEN_USE_BLAS") +endif(EIGEN_USE_BLAS) + +if(EIGEN_USE_MKL_ALL) + set(EIGEN_PROJECT_OPTIONS "${EIGEN_PROJECT_OPTIONS} -DEIGEN_USE_MKL_ALL") +endif(EIGEN_USE_MKL_ALL) + +set(PROJECT_OPTIONS "${PROJECT_OPTIONS} ${N2P2_PROJECT_OPTIONS} ${EIGEN_PROJECT_OPTIONS}") + +if(NDEBUG) + set(PROJECT_OPTIONS "${PROJECT_OPTIONS} -DNDEBUG") +endif(NDEBUG) ################################################################################################### ################################################################################################### diff --git a/src/libnnp/CMakeLists.txt b/src/libnnp/CMakeLists.txt index 779747a1bc..b330bae441 100644 --- a/src/libnnp/CMakeLists.txt +++ b/src/libnnp/CMakeLists.txt @@ -10,7 +10,8 @@ file(GLOB HDR_FILES "*.h") ################################################################################################### # Specify Build Targets -add_library(nnp ${SRC_FILES}) # Build libnnp.X library. (Shared, pass -D BUILD_SHARED_LIBS) +add_library(nnp ${SRC_FILES}) +add_compile_options(${PROJECT_OPTIONS}) install(FILES ${HDR_FILES} DESTINATION ${PROJECT_INCLUDE}) # Headers copied at install time ################################################################################################### diff --git a/src/libnnptrain/CMakeLists.txt b/src/libnnptrain/CMakeLists.txt index 87a93ab9d4..d9bcb9b67b 100644 --- a/src/libnnptrain/CMakeLists.txt +++ b/src/libnnptrain/CMakeLists.txt @@ -10,7 +10,8 @@ file(GLOB HDR_FILES "*.h") ################################################################################################### # Specify Build Targets -add_library(nnptrain ${SRC_FILES}) # Build libnnp.X library. (Shared, pass -D BUILD_SHARED_LIBS) +add_library(nnptrain ${SRC_FILES}) +add_compile_options(${PROJECT_OPTIONS}) install(FILES ${HDR_FILES} DESTINATION ${PROJECT_INCLUDE}) # Headers copied at install time ################################################################################################### From 8271d98a9108cb1c38b978ac95d3a45d051a8834 Mon Sep 17 00:00:00 2001 From: adodin Date: Tue, 26 Nov 2024 10:05:34 -0800 Subject: [PATCH 05/15] Added automatic versioning to CMake --- src/CMakeLists.txt | 14 ++++++++++++-- src/libnnp/CMakeLists.txt | 1 + src/libnnp/version.config.h | 25 +++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 src/libnnp/version.config.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c3087b1bd8..33a00d1be5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,7 +5,17 @@ ################################################################################################### # Project & CMake Information cmake_minimum_required(VERSION 3.16) # Same required version as LAMMPS (no extra dependencies) -project(n2p2) +project(n2p2 VERSION 2.2.0) +################################################################################################### + +################################################################################################### +# Git version info for project +execute_process(COMMAND git describe --tags --always + OUTPUT_VARIABLE GIT_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) +execute_process(COMMAND git rev-parse HEAD + OUTPUT_VARIABLE GIT_REV OUTPUT_STRIP_TRAILING_WHITESPACE) +execute_process(COMMAND git rev-parse --abbrev-ref HEAD + OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE) ################################################################################################### ################################################################################################### @@ -40,7 +50,7 @@ option(N2P2_NO_MPI "Compile without MPI support." OFF) option(NDEBUG "Disable all C++ asserts (also Eigen debugging)." OFF) option(EIGEN_DONT_PARALLELIZE "Disable Eigen multi threading." ON) -# TODO: Automatically Select BLAS vs MKL based on compiler + option(EIGEN_USE_BLAS "Use BLAS together with Eigen." ON) option(EIGEN_USE_MKL_ALL "Use Intel MKL together with Eigen." OFF) ################################################################################################### diff --git a/src/libnnp/CMakeLists.txt b/src/libnnp/CMakeLists.txt index b330bae441..182788fca3 100644 --- a/src/libnnp/CMakeLists.txt +++ b/src/libnnp/CMakeLists.txt @@ -12,6 +12,7 @@ file(GLOB HDR_FILES "*.h") # Specify Build Targets add_library(nnp ${SRC_FILES}) add_compile_options(${PROJECT_OPTIONS}) +configure_file(version.config.h ${CMAKE_CURRENT_SOURCE_DIR}/version.h) install(FILES ${HDR_FILES} DESTINATION ${PROJECT_INCLUDE}) # Headers copied at install time ################################################################################################### diff --git a/src/libnnp/version.config.h b/src/libnnp/version.config.h new file mode 100644 index 0000000000..26e4f614f1 --- /dev/null +++ b/src/libnnp/version.config.h @@ -0,0 +1,25 @@ +// n2p2 - A neural network potential package +// Copyright (C) 2018 Andreas Singraber (University of Vienna) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#ifndef VERSION_H +#define VERSION_H + +#define N2P2_VERSION "${PROJECT_VERSION}" +#define N2P2_GIT_VERSION "${GIT_VERSION}" +#define N2P2_GIT_REV "${GIT_REV}" +#define N2P2_GIT_BRANCH "${GIT_BRANCH}" + +#endif From bc79ac68442615f90f44a0c5d52a136071319ac2 Mon Sep 17 00:00:00 2001 From: adodin Date: Tue, 26 Nov 2024 11:56:46 -0800 Subject: [PATCH 06/15] libnnpif build in CMake (TODO: LAMMPS interface prep) --- src/CMakeLists.txt | 19 +++++++++++++++++-- src/libnnpif/CMakeLists.txt | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 src/libnnpif/CMakeLists.txt diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 33a00d1be5..ef1b221b40 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -40,6 +40,9 @@ set(CMAKE_SHARED_LIBRARY_SUFFIX .so) ################################################################################################### # Document CLI Option Defaults option(BUILD_SHARED_LIBS "Build using shared libraries" OFF) +option(NDEBUG "Disable all C++ asserts (also Eigen debugging)." OFF) + +# N2P2 Compile Options option(N2P2_NO_SF_GROUPS "Disable Symmetry function groups (NOT RECOMMENDED)" OFF) option(N2P2_FULL_SFD_MEMORY "Store zero symmetry function derivatives" OFF) option(N2P2_NO_SF_CACHE "Do not use symmetry function cache." OFF) @@ -47,10 +50,13 @@ option(N2P2_NO_ASYM_POLY "Disable asymmetric polynomial symmetry functions." OFF option(N2P2_NO_TIME "Build with dummy Stopwatch class." OFF) option(N2P2_NO_NEIGH_CHECK "Disable check for low number of neighbors." OFF) option(N2P2_NO_MPI "Compile without MPI support." OFF) -option(NDEBUG "Disable all C++ asserts (also Eigen debugging)." OFF) -option(EIGEN_DONT_PARALLELIZE "Disable Eigen multi threading." ON) +# Which interfaces to build +option(N2P2_IF_LAMMPS "Build LAMMPS interface into libnnpif" ON) +option(N2P2_IF_CABANA "Build CabanaMD interface into libnnpif" ON) +# Eigen Optimization Options +option(EIGEN_DONT_PARALLELIZE "Disable Eigen multi threading." ON) option(EIGEN_USE_BLAS "Use BLAS together with Eigen." ON) option(EIGEN_USE_MKL_ALL "Use Intel MKL together with Eigen." OFF) ################################################################################################### @@ -102,10 +108,19 @@ set(PROJECT_OPTIONS "${PROJECT_OPTIONS} ${N2P2_PROJECT_OPTIONS} ${EIGEN_PROJECT_ if(NDEBUG) set(PROJECT_OPTIONS "${PROJECT_OPTIONS} -DNDEBUG") endif(NDEBUG) + +if(N2P2_IF_LAMMPS) + list(APPEND INTERFACES "${INTERFACES} LAMMPS") +endif(N2P2_IF_LAMMPS) + +if(N2P2_IF_CABANA) + list(APPEND INTERFACES "${INTERFACES} CabanaMD") +endif(N2P2_IF_CABANA) ################################################################################################### ################################################################################################### # Go into each subdirectory add_subdirectory(libnnp) add_subdirectory(libnnptrain) +add_subdirectory(libnnpif) ################################################################################################### \ No newline at end of file diff --git a/src/libnnpif/CMakeLists.txt b/src/libnnpif/CMakeLists.txt new file mode 100644 index 0000000000..470bd18132 --- /dev/null +++ b/src/libnnpif/CMakeLists.txt @@ -0,0 +1,35 @@ +################################################################################################### +# CMake Build System for n2p2/libnnptrain +################################################################################################### + +################################################################################################### +# Set Source Files +file(GLOB LAMMPS_SRC_FILES "LAMMPS/*.cpp") +file(GLOB LAMMPS_HDR_FILES "LAMMPS/*.h") +file(GLOB CABANA_SRC_FILES "CabanaMD/*.cpp") +file(GLOB CABANA_HDR_FILES "CabanaMD/*.h") + +if(N2P2_IF_LAMMPS) + list(APPEND SRC_FILES ${LAMMPS_SRC_FILES}) + list(APPEND HDR_FILES ${LAMMPS_HDR_FILES}) +endif(N2P2_IF_LAMMPS) + +if(N2P2_IF_CABANA) + list(APPEND SRC_FILES ${CABANA_SRC_FILES}) + list(APPEND HDR_FILES ${CABANA_HDR_FILES}) +endif(N2P2_IF_CABANA) +################################################################################################### + +################################################################################################### +# Specify Build Targets +add_library(nnpif ${SRC_FILES}) +add_compile_options(${PROJECT_OPTIONS}) +install(FILES ${HDR_FILES} DESTINATION ${PROJECT_INCLUDE}) # Headers copied at install time +################################################################################################### + +################################################################################################### +# Find Required Package dependencies +find_package(MPI REQUIRED) +include_directories(${MPI_INCLUDE_PATH} ${PROJECT_SOURCE_DIR}/libnnp) +target_link_libraries(nnpif MPI) +################################################################################################### \ No newline at end of file From a429ceb9ff89282d6f43146eb1880bbdd70337eb Mon Sep 17 00:00:00 2001 From: adodin Date: Wed, 27 Nov 2024 11:42:45 -0800 Subject: [PATCH 07/15] Fixed CMake Build Dependencies --- src/CMakeLists.txt | 1 + src/libnnpif/CMakeLists.txt | 4 ++-- src/libnnptrain/CMakeLists.txt | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ef1b221b40..a4a563e0c3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -123,4 +123,5 @@ endif(N2P2_IF_CABANA) add_subdirectory(libnnp) add_subdirectory(libnnptrain) add_subdirectory(libnnpif) +add_subdirectory(interface) ################################################################################################### \ No newline at end of file diff --git a/src/libnnpif/CMakeLists.txt b/src/libnnpif/CMakeLists.txt index 470bd18132..0c90dfb381 100644 --- a/src/libnnpif/CMakeLists.txt +++ b/src/libnnpif/CMakeLists.txt @@ -1,5 +1,5 @@ ################################################################################################### -# CMake Build System for n2p2/libnnptrain +# CMake Build System for n2p2/libnnpif ################################################################################################### ################################################################################################### @@ -31,5 +31,5 @@ install(FILES ${HDR_FILES} DESTINATION ${PROJECT_INCLUDE}) # Headers copied at # Find Required Package dependencies find_package(MPI REQUIRED) include_directories(${MPI_INCLUDE_PATH} ${PROJECT_SOURCE_DIR}/libnnp) -target_link_libraries(nnpif MPI) +target_link_libraries(nnpif MPI nnp) ################################################################################################### \ No newline at end of file diff --git a/src/libnnptrain/CMakeLists.txt b/src/libnnptrain/CMakeLists.txt index d9bcb9b67b..cf57453193 100644 --- a/src/libnnptrain/CMakeLists.txt +++ b/src/libnnptrain/CMakeLists.txt @@ -21,5 +21,5 @@ find_package(MPI REQUIRED) find_package(GSL REQUIRED) find_package(Eigen3 3.4 REQUIRED NO_MODULE) include_directories(${MPI_INCLUDE_PATH} ${PROJECT_SOURCE_DIR}/libnnp ${GSL_INCLUDE_DIRS}) -target_link_libraries(nnptrain MPI GSL Eigen3::Eigen) +target_link_libraries(nnptrain MPI GSL Eigen3::Eigen nnp) ################################################################################################### \ No newline at end of file From 79a02984d8aba694d7bb74df4081b475b4b75a8f Mon Sep 17 00:00:00 2001 From: adodin Date: Wed, 27 Nov 2024 16:35:36 -0800 Subject: [PATCH 08/15] LAMMPS CMAKE BUILD --- src/interface/CMakeLists.txt | 91 +++++++++++++++++++ .../LAMMPS/Makefile.lammps-extra.config.in | 5 + .../LAMMPS/lammps-extra.cmake.config.in | 1 + src/interface/makefile | 1 + 4 files changed, 98 insertions(+) create mode 100644 src/interface/CMakeLists.txt create mode 100644 src/interface/LAMMPS/Makefile.lammps-extra.config.in create mode 100644 src/interface/LAMMPS/lammps-extra.cmake.config.in diff --git a/src/interface/CMakeLists.txt b/src/interface/CMakeLists.txt new file mode 100644 index 0000000000..c8f93d916f --- /dev/null +++ b/src/interface/CMakeLists.txt @@ -0,0 +1,91 @@ +################################################################################################### +# CMake Build System for n2p2 LAMMPS interface +################################################################################################### + +################################################################################################### +# Skip if not building LAMMPS or LAMMPS interface +if(NOT N2P2_IF_LAMMPS ) + return() +endif(NOT N2P2_IF_LAMMPS ) +################################################################################################### + +################################################################################################### +# LAMMPS Specific Options +# Build Internal Version or External (sets name of the lammps package) +option(LAMMPS_INTERNAL + "Build as internal package. Uses name nnp vs. hdnnp to avoid conflict with release version." + OFF) +if(LAMMPS_INTERNAL) + set(LAMMPS_PACKAGE_NAME nnp) +else() + set(LAMMPS_PACKAGE_NAME hdnnp) +endif(LAMMPS_INTERNAL) + +# Download & Build own LAMMPS executable +option(BUILD_LAMMPS + "Build minimal LAMMPS executable. (Either Specify DOWNLOAD_LAMMPS=ON or LAMMPS_PATH)" ON) + +if (NOT LAMMPS_PATH) + option(DOWNLOAD_LAMMPS "Download LAMMPS. This supersedes LAMMPS_PATH variable." ON) +else() + option(DOWNLOAD_LAMMPS "Download LAMMPS. This supersedes LAMMPS_PATH variable." OFF) +endif (NOT LAMMPS_PATH) + +# Specify Default LAMMPS Version +if (NOT LAMMPS_VERSION) + set(LAMMPS_VERSION "lammps-29Oct2020") +endif (NOT LAMMPS_VERSION) +################################################################################################### + +################################################################################################### +# Configure makefiles and extra cmake file to add N2P2 options to LAMMPS build +message("Creating LAMMPS configuration files.") +configure_file(LAMMPS/Makefile.lammps-extra.config.in ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Makefile.lammps-extra) +configure_file(LAMMPS/lammps-extra.cmake.config.in ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lammps-extra.cmake) +################################################################################################### + +################################################################################################### +# Download LAMMPS if needed +if(DOWNLOAD_LAMMPS) + if (LAMMPS_PATH) + message(WARNING "Specified both LAMMPS_PATH and DOWNLOAD_LAMMPS=ON. Ignoring LAMMPS_PATH.") + endif (LAMMPS_PATH) + + message("Downloading LAMMPS to ${CMAKE_BINARY_DIR}/_deps/lammps-nnp-src/") + include(FetchContent) + FetchContent_Declare(lammps-nnp + URL https://download.lammps.org/tars/${LAMMPS_VERSION}.tar.gz) + FetchContent_MakeAvailable(lammps-nnp) + + set(LAMMPS_PATH "${CMAKE_BINARY_DIR}/_deps/lammps-nnp-src/") +endif(DOWNLOAD_LAMMPS) +################################################################################################### + +################################################################################################### +# Symlink to n2p2 Library from LAMMPS +add_custom_target(link_n2p2 ALL + COMMAND ${CMAKE_COMMAND} -E make_directory ${LAMMPS_PATH}lib/nnp + COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${LAMMPS_PATH}/lib/nnp/lib + COMMAND ${CMAKE_COMMAND} -E create_symlink ${PROJECT_INCLUDE} ${LAMMPS_PATH}/lib/nnp/include + COMMENT "Creating Symlink from LAMMPS to n2p2.") +################################################################################################### + +################################################################################################### +# Copy Source Code to LAMMPS +add_custom_target(update_lammps ALL + COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/interface/LAMMPS/src/USER-NNP/ ${LAMMPS_PATH}src/USER-NNP + COMMENT "Updating LAMMPS USER-NNP package.") +################################################################################################### + +################################################################################################### +# Build a minimal LAMMPS Executable (uses LAMMPS make build system) +if(BUILD_LAMMPS) + add_custom_target(build_lammps ALL + COMMAND ${CMAKE_COMMAND} -E chdir ${LAMMPS_PATH}/src/ make yes-user-nnp + COMMAND ${CMAKE_COMMAND} -E chdir ${LAMMPS_PATH}/src/ make yes-molecule + COMMAND ${CMAKE_COMMAND} -E chdir ${LAMMPS_PATH}/src/ make mpi + DEPENDS "${LAMMPS_PATH}/src/USER-NNP" + COMMENT "Building minimal LAMMPS Distribution. Version: ${LAMMPS_VERSION}") + install(FILES "${LAMMPS_PATH}/src/lmp_mpi" DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) +endif(BUILD_LAMMPS) +################################################################################################### \ No newline at end of file diff --git a/src/interface/LAMMPS/Makefile.lammps-extra.config.in b/src/interface/LAMMPS/Makefile.lammps-extra.config.in new file mode 100644 index 0000000000..ef59656cfa --- /dev/null +++ b/src/interface/LAMMPS/Makefile.lammps-extra.config.in @@ -0,0 +1,5 @@ +# Settings that the LAMMPS build will import when this package library is used + +${LAMMPS_PACKAGE_NAME}_SYSINC = ${N2P2_PROJECT_OPTIONS} +${LAMMPS_PACKAGE_NAME}_SYSLIB = -lnnpif -lnnp +${LAMMPS_PACKAGE_NAME}_SYSPATH = diff --git a/src/interface/LAMMPS/lammps-extra.cmake.config.in b/src/interface/LAMMPS/lammps-extra.cmake.config.in new file mode 100644 index 0000000000..2b0b131ff9 --- /dev/null +++ b/src/interface/LAMMPS/lammps-extra.cmake.config.in @@ -0,0 +1 @@ +target_compile_definitions(lammps PRIVATE ${N2P2_PROJECT_OPTIONS}) \ No newline at end of file diff --git a/src/interface/makefile b/src/interface/makefile index 7623bc4572..aa30e44849 100644 --- a/src/interface/makefile +++ b/src/interface/makefile @@ -44,6 +44,7 @@ lammps-nnp: wget https://github.com/lammps/lammps/archive/$(LAMMPS_VERSION).tar.gz; \ fi tar -xzf $(LAMMPS_VERSION).tar.gz && mv lammps-$(LAMMPS_VERSION) lammps-nnp + echo $(PROJECT_DIR) ln -s $(PROJECT_DIR)/../../ lammps-nnp/lib/nnp cp -r ./LAMMPS/src/USER-NNP lammps-nnp/src/ @sed -i.bak "s/^CC .*$$/CC = $(PROJECT_MPICC)/" lammps-nnp/src/MAKE/Makefile.mpi From b7c1fef245f91ac6ca4df4bee89785c3f921188d Mon Sep 17 00:00:00 2001 From: adodin Date: Fri, 20 Dec 2024 13:26:47 -0800 Subject: [PATCH 09/15] LAMMPS CMAKE BUILD --- src/interface/CMakeLists.txt | 12 +++++++++++- src/libnnp/CMakeLists.txt | 2 +- src/llvm.cmake | 9 +++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 src/llvm.cmake diff --git a/src/interface/CMakeLists.txt b/src/interface/CMakeLists.txt index c8f93d916f..27471cb9a2 100644 --- a/src/interface/CMakeLists.txt +++ b/src/interface/CMakeLists.txt @@ -23,7 +23,7 @@ endif(LAMMPS_INTERNAL) # Download & Build own LAMMPS executable option(BUILD_LAMMPS - "Build minimal LAMMPS executable. (Either Specify DOWNLOAD_LAMMPS=ON or LAMMPS_PATH)" ON) + "Build minimal LAMMPS executable. (Either Specify DOWNLOAD_LAMMPS=ON or LAMMPS_PATH)" OFF) if (NOT LAMMPS_PATH) option(DOWNLOAD_LAMMPS "Download LAMMPS. This supersedes LAMMPS_PATH variable." ON) @@ -77,6 +77,16 @@ add_custom_target(update_lammps ALL COMMENT "Updating LAMMPS USER-NNP package.") ################################################################################################### +################################################################################################### +# Patch LAMMPS makefile.mpi +add_custom_target(patch_lammps_makefile ALL + COMMAND sed -i.bak "s,^CC .*$$,CC = ${MPI_CXX_COMPILER}," ${LAMMPS_PATH}/src/MAKE/Makefile.mpi + COMMAND sed -i.bak "s,^CCFLAGS .*$$,CCFLAGS = ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_MPI}," ${LAMMPS_PATH}/src/MAKE/Makefile.mpi + COMMAND sed -i.bak "s,^LINK .*$$,LINK = ${MPI_CXX_COMPILER} ," ${LAMMPS_PATH}/src/MAKE/Makefile.mpi + COMMAND sed -i.bak "s,^LINKFLAGS .*$$,LINKFLAGS = ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_MPI} -lnnp -lnnpif," ${LAMMPS_PATH}/src/MAKE/Makefile.mpi + COMMENT "Patching LAMMPS makefile.mpi") +################################################################################################### + ################################################################################################### # Build a minimal LAMMPS Executable (uses LAMMPS make build system) if(BUILD_LAMMPS) diff --git a/src/libnnp/CMakeLists.txt b/src/libnnp/CMakeLists.txt index 182788fca3..6a678506a4 100644 --- a/src/libnnp/CMakeLists.txt +++ b/src/libnnp/CMakeLists.txt @@ -12,7 +12,7 @@ file(GLOB HDR_FILES "*.h") # Specify Build Targets add_library(nnp ${SRC_FILES}) add_compile_options(${PROJECT_OPTIONS}) -configure_file(version.config.h ${CMAKE_CURRENT_SOURCE_DIR}/version.h) +configure_file(version.config.h ${CMAKE_CURRENT_SOURCE_DIR}/rm -r *version.h) install(FILES ${HDR_FILES} DESTINATION ${PROJECT_INCLUDE}) # Headers copied at install time ################################################################################################### diff --git a/src/llvm.cmake b/src/llvm.cmake new file mode 100644 index 0000000000..20528478d3 --- /dev/null +++ b/src/llvm.cmake @@ -0,0 +1,9 @@ +# CMake Cache File Setting Defaults for Mac LLVM toolchain + +#set(CMAKE_CXX_COMPILER "mpic++" CACHE STRING "" FORCE) +#set(MPI_CXX "mpic++" CACHE STRING "" FORCE) +#set(MPI_CXX_COMPILER "mpic++" CACHE STRING "" FORCE) + +set(CMAKE_CXX_FLAGS "-O3 -march=native -std=c++11" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_DEBUG "-g -pedantic-errors -Wall -Wextra" CACHE STRING "" FORCE) +set(CMAKE_AR "ar" CACHE STRING "" FORCE) \ No newline at end of file From a8149357383da950a768441937b757f067b1c116 Mon Sep 17 00:00:00 2001 From: adodin Date: Fri, 20 Dec 2024 17:25:14 -0800 Subject: [PATCH 10/15] Added Application Build --- src/CMakeLists.txt | 9 +++++ src/application/CMakeLists.txt | 64 ++++++++++++++++++++++++++++++++++ src/interface/CMakeLists.txt | 57 +++++++++++++++--------------- src/libnnp/CMakeLists.txt | 5 ++- src/libnnptrain/CMakeLists.txt | 3 -- 5 files changed, 104 insertions(+), 34 deletions(-) create mode 100644 src/application/CMakeLists.txt diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a4a563e0c3..c84b98782c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -89,6 +89,9 @@ endif(N2P2_NO_NEIGH_CHECK) if(N2P2_NO_MPI) set(N2P2_PROJECT_OPTIONS "${N2P2_PROJECT_OPTIONS} -DN2P2_NO_MPI") +else() + set(CMAKE_C_COMPILER "mpicc") + set(CMAKE_CXX_COMPILER "mpicxx") endif(N2P2_NO_MPI) if(EIGEN_DONT_PARALLELIZE) @@ -119,9 +122,15 @@ endif(N2P2_IF_CABANA) ################################################################################################### ################################################################################################### +find_package(MPI REQUIRED) +find_package(GSL REQUIRED) +find_package(Eigen3 3.4 REQUIRED NO_MODULE) +link_directories(${GSL_LIBRARY_DIRS} ${MPI_LIBRARY_DIRS}) + # Go into each subdirectory add_subdirectory(libnnp) add_subdirectory(libnnptrain) +add_subdirectory(application) add_subdirectory(libnnpif) add_subdirectory(interface) ################################################################################################### \ No newline at end of file diff --git a/src/application/CMakeLists.txt b/src/application/CMakeLists.txt new file mode 100644 index 0000000000..dcafcc03d7 --- /dev/null +++ b/src/application/CMakeLists.txt @@ -0,0 +1,64 @@ +################################################################################################### +# CMake Build System for n2p2 executables +################################################################################################### + +################################################################################################### +# Specify executables based on dependencies +# APP_CORE require only libnnp +set(APP_CORE + nnp-convert + nnp-cutoff + nnp-dist + nnp-predict + nnp-prune + nnp-select + nnp-symfunc) + +# APP_DATASET require libnnp and libnnptrain (Use class Dataset only, not Training) +# NB: These are separated out since they do not require the Eigen library +set(APP_DATASET + nnp-atomenv + nnp-checkf + nnp-comp2 + nnp-dataset + nnp-norm + nnp-scaling) + +# APP_TRAINING require libnnp and libnnptrain +set(APP_TRAINING + nnp-checkdw + nnp-norm2 + nnp-train) + +# APP contains all executables +set(APP ${APP_CORE} ${APP_DATASET} ${APP_TRAINING}) +################################################################################################### + +################################################################################################### +# Specify Build Target for Each APP +foreach(app IN ITEMS ${APP}) + add_executable(${app} ${app}.cpp) +endforeach(app IN ITEMS ${APP}) + +# Set Directory-Wide Project Options +add_compile_options(${PROJECT_OPTIONS}) +################################################################################################### + +################################################################################################### +# Find Required Package dependencies +include_directories(${MPI_INCLUDE_PATH} ${GSL_INCLUDE_DIRS} ${PROJECT_SOURCE_DIR}/libnnp ${PROJECT_SOURCE_DIR}/libnnptrain) + +# Add Link Dependencies based on requirements +foreach(app IN ITEMS ${APP_CORE}) + target_link_libraries(${app} PRIVATE nnp) +endforeach(app IN ITEMS ${APP_CORE}) + +foreach(app IN ITEMS ${APP_DATASET}) + target_link_libraries(${app} PRIVATE GSL nnp nnptrain) +endforeach(app IN ITEMS ${APP_DATASET}) + +foreach(app IN ITEMS ${APP_TRAINING}) + target_link_libraries(${app} PRIVATE GSL Eigen3::Eigen nnp nnptrain) +endforeach(app IN ITEMS ${APP_TRAINING}) + +###################################################################################################]] diff --git a/src/interface/CMakeLists.txt b/src/interface/CMakeLists.txt index 27471cb9a2..9f93da2066 100644 --- a/src/interface/CMakeLists.txt +++ b/src/interface/CMakeLists.txt @@ -61,35 +61,35 @@ if(DOWNLOAD_LAMMPS) endif(DOWNLOAD_LAMMPS) ################################################################################################### -################################################################################################### -# Symlink to n2p2 Library from LAMMPS -add_custom_target(link_n2p2 ALL - COMMAND ${CMAKE_COMMAND} -E make_directory ${LAMMPS_PATH}lib/nnp - COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${LAMMPS_PATH}/lib/nnp/lib - COMMAND ${CMAKE_COMMAND} -E create_symlink ${PROJECT_INCLUDE} ${LAMMPS_PATH}/lib/nnp/include - COMMENT "Creating Symlink from LAMMPS to n2p2.") -################################################################################################### +if(BUILD_LAMMPS) + ################################################################################################### + # Symlink to n2p2 Library from LAMMPS + add_custom_target(link_n2p2 ALL + COMMAND ${CMAKE_COMMAND} -E make_directory ${LAMMPS_PATH}lib/nnp + COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${LAMMPS_PATH}/lib/nnp/lib + COMMAND ${CMAKE_COMMAND} -E create_symlink ${PROJECT_INCLUDE} ${LAMMPS_PATH}/lib/nnp/include + COMMENT "Creating Symlink from LAMMPS to n2p2.") + ################################################################################################### -################################################################################################### -# Copy Source Code to LAMMPS -add_custom_target(update_lammps ALL - COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/interface/LAMMPS/src/USER-NNP/ ${LAMMPS_PATH}src/USER-NNP - COMMENT "Updating LAMMPS USER-NNP package.") -################################################################################################### + ################################################################################################### + # Copy Source Code to LAMMPS + add_custom_target(update_lammps ALL + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/interface/LAMMPS/src/USER-NNP/ ${LAMMPS_PATH}src/USER-NNP + COMMENT "Updating LAMMPS USER-NNP package.") + ################################################################################################### -################################################################################################### -# Patch LAMMPS makefile.mpi -add_custom_target(patch_lammps_makefile ALL - COMMAND sed -i.bak "s,^CC .*$$,CC = ${MPI_CXX_COMPILER}," ${LAMMPS_PATH}/src/MAKE/Makefile.mpi - COMMAND sed -i.bak "s,^CCFLAGS .*$$,CCFLAGS = ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_MPI}," ${LAMMPS_PATH}/src/MAKE/Makefile.mpi - COMMAND sed -i.bak "s,^LINK .*$$,LINK = ${MPI_CXX_COMPILER} ," ${LAMMPS_PATH}/src/MAKE/Makefile.mpi - COMMAND sed -i.bak "s,^LINKFLAGS .*$$,LINKFLAGS = ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_MPI} -lnnp -lnnpif," ${LAMMPS_PATH}/src/MAKE/Makefile.mpi - COMMENT "Patching LAMMPS makefile.mpi") -################################################################################################### + ################################################################################################### + # Patch LAMMPS makefile.mpi + add_custom_target(patch_lammps_makefile ALL + COMMAND sed -i.bak "s,^CC .*$$,CC = ${MPI_CXX_COMPILER}," ${LAMMPS_PATH}/src/MAKE/Makefile.mpi + COMMAND sed -i.bak "s,^CCFLAGS .*$$,CCFLAGS = ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_MPI}," ${LAMMPS_PATH}/src/MAKE/Makefile.mpi + COMMAND sed -i.bak "s,^LINK .*$$,LINK = ${MPI_CXX_COMPILER} ," ${LAMMPS_PATH}/src/MAKE/Makefile.mpi + COMMAND sed -i.bak "s,^LINKFLAGS .*$$,LINKFLAGS = ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_MPI} -lnnp -lnnpif," ${LAMMPS_PATH}/src/MAKE/Makefile.mpi + COMMENT "Patching LAMMPS makefile.mpi") + ################################################################################################### -################################################################################################### -# Build a minimal LAMMPS Executable (uses LAMMPS make build system) -if(BUILD_LAMMPS) + ################################################################################################### + # Build a minimal LAMMPS Executable (uses LAMMPS make build system) add_custom_target(build_lammps ALL COMMAND ${CMAKE_COMMAND} -E chdir ${LAMMPS_PATH}/src/ make yes-user-nnp COMMAND ${CMAKE_COMMAND} -E chdir ${LAMMPS_PATH}/src/ make yes-molecule @@ -97,5 +97,6 @@ if(BUILD_LAMMPS) DEPENDS "${LAMMPS_PATH}/src/USER-NNP" COMMENT "Building minimal LAMMPS Distribution. Version: ${LAMMPS_VERSION}") install(FILES "${LAMMPS_PATH}/src/lmp_mpi" DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) -endif(BUILD_LAMMPS) -################################################################################################### \ No newline at end of file + add_dependencies(build_lammps link_n2p2 update_lammps patch_lammps_makefile nnpif) + ################################################################################################### +endif(BUILD_LAMMPS) \ No newline at end of file diff --git a/src/libnnp/CMakeLists.txt b/src/libnnp/CMakeLists.txt index 6a678506a4..0f93261de9 100644 --- a/src/libnnp/CMakeLists.txt +++ b/src/libnnp/CMakeLists.txt @@ -12,13 +12,12 @@ file(GLOB HDR_FILES "*.h") # Specify Build Targets add_library(nnp ${SRC_FILES}) add_compile_options(${PROJECT_OPTIONS}) -configure_file(version.config.h ${CMAKE_CURRENT_SOURCE_DIR}/rm -r *version.h) +configure_file(version.config.h ${CMAKE_CURRENT_SOURCE_DIR}/version.h) install(FILES ${HDR_FILES} DESTINATION ${PROJECT_INCLUDE}) # Headers copied at install time ################################################################################################### ################################################################################################### # Find Required Package dependencies -find_package(MPI REQUIRED) -target_link_libraries(nnp MPI) +target_link_libraries(nnp PUBLIC MPI) include_directories(${MPI_INCLUDE_PATH}) ################################################################################################### \ No newline at end of file diff --git a/src/libnnptrain/CMakeLists.txt b/src/libnnptrain/CMakeLists.txt index cf57453193..671c828b3b 100644 --- a/src/libnnptrain/CMakeLists.txt +++ b/src/libnnptrain/CMakeLists.txt @@ -17,9 +17,6 @@ install(FILES ${HDR_FILES} DESTINATION ${PROJECT_INCLUDE}) # Headers copied at ################################################################################################### # Find Required Package dependencies -find_package(MPI REQUIRED) -find_package(GSL REQUIRED) -find_package(Eigen3 3.4 REQUIRED NO_MODULE) include_directories(${MPI_INCLUDE_PATH} ${PROJECT_SOURCE_DIR}/libnnp ${GSL_INCLUDE_DIRS}) target_link_libraries(nnptrain MPI GSL Eigen3::Eigen nnp) ################################################################################################### \ No newline at end of file From c374145f7e9eb63a07196276ca4d98699c70d291 Mon Sep 17 00:00:00 2001 From: adodin Date: Fri, 20 Dec 2024 17:38:47 -0800 Subject: [PATCH 11/15] Copy LAMMPSInterface.h at compile time --- src/libnnpif/CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/libnnpif/CMakeLists.txt b/src/libnnpif/CMakeLists.txt index 0c90dfb381..3324442aca 100644 --- a/src/libnnpif/CMakeLists.txt +++ b/src/libnnpif/CMakeLists.txt @@ -24,7 +24,13 @@ endif(N2P2_IF_CABANA) # Specify Build Targets add_library(nnpif ${SRC_FILES}) add_compile_options(${PROJECT_OPTIONS}) -install(FILES ${HDR_FILES} DESTINATION ${PROJECT_INCLUDE}) # Headers copied at install time + +# Headers need to be available at compile time to enable LAMMPS build +add_custom_target(install-nnpif-headers ALL + COMMAND ${CMAKE_COMMAND} -E copy ${LAMMPS_HDR_FILES} ${PROJECT_INCLUDE} + COMMAND ${CMAKE_COMMAND} -E copy ${CABANA_HDR_FILES} ${PROJECT_INCLUDE} + COMMENT "Installing libnnpif headers.") +#install(FILES ${HDR_FILES} DESTINATION ${PROJECT_INCLUDE}) # Headers copied at install time ################################################################################################### ################################################################################################### From fdf9e35a62ae0f51768b15baa9dc6c8888f9a6fe Mon Sep 17 00:00:00 2001 From: adodin Date: Tue, 11 Feb 2025 17:38:44 -0800 Subject: [PATCH 12/15] Corrected MPI linking --- src/libnnp/CMakeLists.txt | 2 +- src/libnnpif/CMakeLists.txt | 2 +- src/libnnptrain/CMakeLists.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libnnp/CMakeLists.txt b/src/libnnp/CMakeLists.txt index 0f93261de9..60197f823e 100644 --- a/src/libnnp/CMakeLists.txt +++ b/src/libnnp/CMakeLists.txt @@ -18,6 +18,6 @@ install(FILES ${HDR_FILES} DESTINATION ${PROJECT_INCLUDE}) # Headers copied at ################################################################################################### # Find Required Package dependencies -target_link_libraries(nnp PUBLIC MPI) +target_link_libraries(nnp PUBLIC MPI::MPI_CXX) include_directories(${MPI_INCLUDE_PATH}) ################################################################################################### \ No newline at end of file diff --git a/src/libnnpif/CMakeLists.txt b/src/libnnpif/CMakeLists.txt index 3324442aca..91984e16e4 100644 --- a/src/libnnpif/CMakeLists.txt +++ b/src/libnnpif/CMakeLists.txt @@ -37,5 +37,5 @@ add_custom_target(install-nnpif-headers ALL # Find Required Package dependencies find_package(MPI REQUIRED) include_directories(${MPI_INCLUDE_PATH} ${PROJECT_SOURCE_DIR}/libnnp) -target_link_libraries(nnpif MPI nnp) +target_link_libraries(nnpif MPI::MPI_CXX nnp) ################################################################################################### \ No newline at end of file diff --git a/src/libnnptrain/CMakeLists.txt b/src/libnnptrain/CMakeLists.txt index 671c828b3b..7846a4a5d5 100644 --- a/src/libnnptrain/CMakeLists.txt +++ b/src/libnnptrain/CMakeLists.txt @@ -18,5 +18,5 @@ install(FILES ${HDR_FILES} DESTINATION ${PROJECT_INCLUDE}) # Headers copied at ################################################################################################### # Find Required Package dependencies include_directories(${MPI_INCLUDE_PATH} ${PROJECT_SOURCE_DIR}/libnnp ${GSL_INCLUDE_DIRS}) -target_link_libraries(nnptrain MPI GSL Eigen3::Eigen nnp) +target_link_libraries(nnptrain MPI::MPI_CXX GSL Eigen3::Eigen nnp) ################################################################################################### \ No newline at end of file From 2de9263e6c616b73ad4bcaf0ddcf191d00a78393 Mon Sep 17 00:00:00 2001 From: adodin Date: Tue, 11 Feb 2025 17:46:21 -0800 Subject: [PATCH 13/15] Corrected GSL Linking --- src/application/CMakeLists.txt | 4 ++-- src/libnnptrain/CMakeLists.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/application/CMakeLists.txt b/src/application/CMakeLists.txt index dcafcc03d7..e8fc3f48f5 100644 --- a/src/application/CMakeLists.txt +++ b/src/application/CMakeLists.txt @@ -54,11 +54,11 @@ foreach(app IN ITEMS ${APP_CORE}) endforeach(app IN ITEMS ${APP_CORE}) foreach(app IN ITEMS ${APP_DATASET}) - target_link_libraries(${app} PRIVATE GSL nnp nnptrain) + target_link_libraries(${app} PRIVATE ${GSL_LIBRARIES} nnp nnptrain) endforeach(app IN ITEMS ${APP_DATASET}) foreach(app IN ITEMS ${APP_TRAINING}) - target_link_libraries(${app} PRIVATE GSL Eigen3::Eigen nnp nnptrain) + target_link_libraries(${app} PRIVATE ${GSL_LIBRARIES} Eigen3::Eigen nnp nnptrain) endforeach(app IN ITEMS ${APP_TRAINING}) ###################################################################################################]] diff --git a/src/libnnptrain/CMakeLists.txt b/src/libnnptrain/CMakeLists.txt index 7846a4a5d5..22b41ab169 100644 --- a/src/libnnptrain/CMakeLists.txt +++ b/src/libnnptrain/CMakeLists.txt @@ -18,5 +18,5 @@ install(FILES ${HDR_FILES} DESTINATION ${PROJECT_INCLUDE}) # Headers copied at ################################################################################################### # Find Required Package dependencies include_directories(${MPI_INCLUDE_PATH} ${PROJECT_SOURCE_DIR}/libnnp ${GSL_INCLUDE_DIRS}) -target_link_libraries(nnptrain MPI::MPI_CXX GSL Eigen3::Eigen nnp) +target_link_libraries(nnptrain MPI::MPI_CXX ${GSL_LIBRARIES} Eigen3::Eigen nnp) ################################################################################################### \ No newline at end of file From 860d09e7b4196413e2eb8a41d4380fe8fe3a0063 Mon Sep 17 00:00:00 2001 From: adodin Date: Fri, 14 Feb 2025 11:35:58 -0800 Subject: [PATCH 14/15] Turned off LAMMPS Download by default --- src/interface/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interface/CMakeLists.txt b/src/interface/CMakeLists.txt index 9f93da2066..e1dc5bcb7b 100644 --- a/src/interface/CMakeLists.txt +++ b/src/interface/CMakeLists.txt @@ -26,7 +26,7 @@ option(BUILD_LAMMPS "Build minimal LAMMPS executable. (Either Specify DOWNLOAD_LAMMPS=ON or LAMMPS_PATH)" OFF) if (NOT LAMMPS_PATH) - option(DOWNLOAD_LAMMPS "Download LAMMPS. This supersedes LAMMPS_PATH variable." ON) + option(DOWNLOAD_LAMMPS "Download LAMMPS. This supersedes LAMMPS_PATH variable." OFF) else() option(DOWNLOAD_LAMMPS "Download LAMMPS. This supersedes LAMMPS_PATH variable." OFF) endif (NOT LAMMPS_PATH) From b3d1d916ecf293e8f1fe7ae7f778b5b75d49c51a Mon Sep 17 00:00:00 2001 From: adodin Date: Fri, 25 Apr 2025 12:07:10 -0700 Subject: [PATCH 15/15] Updated CMake Build System --- src/CMakeLists.txt | 8 ++++++ src/interface/CMakeLists.txt | 28 ++++++++++--------- .../LAMMPS/Makefile.lammps-extra.config.in | 2 +- src/libnnp/CMakeLists.txt | 2 +- src/llvm.cmake | 1 + 5 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c84b98782c..d99c6ba05c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -26,6 +26,12 @@ endif() if(CMAKE_CXX_STANDARD LESS 11) message(FATAL_ERROR "C++ standard must be set to at least 11") endif() + +# Manually append the standard flag to CMAKE_CXX_FLAGS for external Makefile usage +if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +#elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") +endif() ################################################################################################### ################################################################################################### @@ -126,6 +132,8 @@ find_package(MPI REQUIRED) find_package(GSL REQUIRED) find_package(Eigen3 3.4 REQUIRED NO_MODULE) link_directories(${GSL_LIBRARY_DIRS} ${MPI_LIBRARY_DIRS}) +list(GET GSL_LIBRARIES 0 FIRST_GSL_LIBRARY) +get_filename_component(GSL_LIBRARY_DIR "${FIRST_GSL_LIBRARY}" DIRECTORY) # Go into each subdirectory add_subdirectory(libnnp) diff --git a/src/interface/CMakeLists.txt b/src/interface/CMakeLists.txt index e1dc5bcb7b..55685c3b6b 100644 --- a/src/interface/CMakeLists.txt +++ b/src/interface/CMakeLists.txt @@ -33,7 +33,7 @@ endif (NOT LAMMPS_PATH) # Specify Default LAMMPS Version if (NOT LAMMPS_VERSION) - set(LAMMPS_VERSION "lammps-29Oct2020") + set(LAMMPS_VERSION "lammps-29Aug2024") endif (NOT LAMMPS_VERSION) ################################################################################################### @@ -53,11 +53,11 @@ if(DOWNLOAD_LAMMPS) message("Downloading LAMMPS to ${CMAKE_BINARY_DIR}/_deps/lammps-nnp-src/") include(FetchContent) - FetchContent_Declare(lammps-nnp + FetchContent_Declare(lammps-hdnnp URL https://download.lammps.org/tars/${LAMMPS_VERSION}.tar.gz) - FetchContent_MakeAvailable(lammps-nnp) + FetchContent_MakeAvailable(lammps-hdnnp) - set(LAMMPS_PATH "${CMAKE_BINARY_DIR}/_deps/lammps-nnp-src/") + set(LAMMPS_PATH "${CMAKE_BINARY_DIR}/_deps/lammps-hdnnp-src/") endif(DOWNLOAD_LAMMPS) ################################################################################################### @@ -65,36 +65,38 @@ if(BUILD_LAMMPS) ################################################################################################### # Symlink to n2p2 Library from LAMMPS add_custom_target(link_n2p2 ALL - COMMAND ${CMAKE_COMMAND} -E make_directory ${LAMMPS_PATH}lib/nnp - COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${LAMMPS_PATH}/lib/nnp/lib - COMMAND ${CMAKE_COMMAND} -E create_symlink ${PROJECT_INCLUDE} ${LAMMPS_PATH}/lib/nnp/include + #COMMAND ${CMAKE_COMMAND} -E make_directory ${LAMMPS_PATH}lib/nnp + COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${LAMMPS_PATH}/lib/hdnnp/liblink + COMMAND ${CMAKE_COMMAND} -E create_symlink ${PROJECT_INCLUDE} ${LAMMPS_PATH}/lib/hdnnp/includelink + COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Makefile.lammps-extra ${LAMMPS_PATH}/lib/hdnnp/Makefile.lammps COMMENT "Creating Symlink from LAMMPS to n2p2.") ################################################################################################### ################################################################################################### # Copy Source Code to LAMMPS add_custom_target(update_lammps ALL - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/interface/LAMMPS/src/USER-NNP/ ${LAMMPS_PATH}src/USER-NNP - COMMENT "Updating LAMMPS USER-NNP package.") + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/interface/LAMMPS/src/ML-HDNNP/ ${LAMMPS_PATH}src/ML-HDNNP + COMMENT "Updating LAMMPS ML-HDNNP package.") ################################################################################################### ################################################################################################### # Patch LAMMPS makefile.mpi add_custom_target(patch_lammps_makefile ALL COMMAND sed -i.bak "s,^CC .*$$,CC = ${MPI_CXX_COMPILER}," ${LAMMPS_PATH}/src/MAKE/Makefile.mpi - COMMAND sed -i.bak "s,^CCFLAGS .*$$,CCFLAGS = ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_MPI}," ${LAMMPS_PATH}/src/MAKE/Makefile.mpi + COMMAND sed -i.bak "s,^CCFLAGS .*$$,CCFLAGS = ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_MPI} -I${GSL_INCLUDE_DIRS} -I${EIGEN3_INCLUDE_DIR}," ${LAMMPS_PATH}/src/MAKE/Makefile.mpi COMMAND sed -i.bak "s,^LINK .*$$,LINK = ${MPI_CXX_COMPILER} ," ${LAMMPS_PATH}/src/MAKE/Makefile.mpi - COMMAND sed -i.bak "s,^LINKFLAGS .*$$,LINKFLAGS = ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_MPI} -lnnp -lnnpif," ${LAMMPS_PATH}/src/MAKE/Makefile.mpi + COMMAND sed -i.bak "s,^LINKFLAGS .*$$,LINKFLAGS = ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_MPI} -L${GSL_LIBRARY_DIR}," ${LAMMPS_PATH}/src/MAKE/Makefile.mpi COMMENT "Patching LAMMPS makefile.mpi") ################################################################################################### ################################################################################################### # Build a minimal LAMMPS Executable (uses LAMMPS make build system) add_custom_target(build_lammps ALL - COMMAND ${CMAKE_COMMAND} -E chdir ${LAMMPS_PATH}/src/ make yes-user-nnp + COMMAND ${CMAKE_COMMAND} -E chdir ${LAMMPS_PATH}/src/ make yes-ml-hdnnp + COMMAND ${CMAKE_COMMAND} -E chdir ${LAMMPS_PATH}/src/ make yes-kspace COMMAND ${CMAKE_COMMAND} -E chdir ${LAMMPS_PATH}/src/ make yes-molecule COMMAND ${CMAKE_COMMAND} -E chdir ${LAMMPS_PATH}/src/ make mpi - DEPENDS "${LAMMPS_PATH}/src/USER-NNP" + DEPENDS "${LAMMPS_PATH}/src/ML-HDNNP" COMMENT "Building minimal LAMMPS Distribution. Version: ${LAMMPS_VERSION}") install(FILES "${LAMMPS_PATH}/src/lmp_mpi" DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) add_dependencies(build_lammps link_n2p2 update_lammps patch_lammps_makefile nnpif) diff --git a/src/interface/LAMMPS/Makefile.lammps-extra.config.in b/src/interface/LAMMPS/Makefile.lammps-extra.config.in index ef59656cfa..6f8cdb5fc8 100644 --- a/src/interface/LAMMPS/Makefile.lammps-extra.config.in +++ b/src/interface/LAMMPS/Makefile.lammps-extra.config.in @@ -1,5 +1,5 @@ # Settings that the LAMMPS build will import when this package library is used ${LAMMPS_PACKAGE_NAME}_SYSINC = ${N2P2_PROJECT_OPTIONS} -${LAMMPS_PACKAGE_NAME}_SYSLIB = -lnnpif -lnnp +${LAMMPS_PACKAGE_NAME}_SYSLIB = -lnnpif -lnnp -lgsl -lgslcblas ${LAMMPS_PACKAGE_NAME}_SYSPATH = diff --git a/src/libnnp/CMakeLists.txt b/src/libnnp/CMakeLists.txt index 60197f823e..1a1674650e 100644 --- a/src/libnnp/CMakeLists.txt +++ b/src/libnnp/CMakeLists.txt @@ -18,6 +18,6 @@ install(FILES ${HDR_FILES} DESTINATION ${PROJECT_INCLUDE}) # Headers copied at ################################################################################################### # Find Required Package dependencies -target_link_libraries(nnp PUBLIC MPI::MPI_CXX) +target_link_libraries(nnp PUBLIC MPI::MPI_CXX Eigen3::Eigen) include_directories(${MPI_INCLUDE_PATH}) ################################################################################################### \ No newline at end of file diff --git a/src/llvm.cmake b/src/llvm.cmake index 20528478d3..1baa836059 100644 --- a/src/llvm.cmake +++ b/src/llvm.cmake @@ -5,5 +5,6 @@ #set(MPI_CXX_COMPILER "mpic++" CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS "-O3 -march=native -std=c++11" CACHE STRING "" FORCE) +set(CMAKE_OSX_DEPLOYMENT_TARGET "14.0" CACHE STRING "Minimum macOS deployment target") set(CMAKE_CXX_FLAGS_DEBUG "-g -pedantic-errors -Wall -Wextra" CACHE STRING "" FORCE) set(CMAKE_AR "ar" CACHE STRING "" FORCE) \ No newline at end of file