diff --git a/lib/pace/Install.py b/lib/pace/Install.py index 790acd4cf4..bf4723a090 100644 --- a/lib/pace/Install.py +++ b/lib/pace/Install.py @@ -1,4 +1,4 @@ -# TODO#!/usr/bin/env python +#!/usr/bin/env python """ Install.py tool to download, compile, and setup the pace library @@ -6,7 +6,10 @@ used to automate the steps described in the README file in this dir """ from __future__ import print_function -import sys, subprocess + +import shutil +import subprocess +import sys from argparse import ArgumentParser sys.path.append('..') @@ -19,19 +22,17 @@ version = 'v.2021.10.25.fix2' # known checksums for different PACE versions. used to validate the download. checksums = { \ - 'v.2021.2.3.upd2' : '8fd1162724d349b930e474927197f20d', - 'v.2021.4.9' : '4db54962fbd6adcf8c18d46e1798ceb5', - 'v.2021.9.28' : 'f98363bb98adc7295ea63974738c2a1b', - 'v.2021.10.25' : 'a2ac3315c41a1a4a5c912bcb1bc9c5cc', - 'v.2021.10.25.fix': 'e0572de57039d4afedefb25707b6ceae', - 'v.2021.10.25.fix2': '32394d799bc282bb57696c78c456e64f' - } - + 'v.2021.2.3.upd2': '8fd1162724d349b930e474927197f20d', + 'v.2021.4.9': '4db54962fbd6adcf8c18d46e1798ceb5', + 'v.2021.9.28': 'f98363bb98adc7295ea63974738c2a1b', + 'v.2021.10.25': 'a2ac3315c41a1a4a5c912bcb1bc9c5cc', + 'v.2021.10.25.fix': 'e0572de57039d4afedefb25707b6ceae', + 'v.2021.10.25.fix2': '32394d799bc282bb57696c78c456e64f' +} parser = ArgumentParser(prog='Install.py', description="LAMMPS library build wrapper script") - # help message HELP = """ @@ -55,55 +56,68 @@ parser.add_argument("-v", "--version", default=version, choices=checksums.keys() help="set version of PACE library to download and build (default: %s)" % version) parser.add_argument("-vv", "--verbose", action="store_true", help="be more verbose about is happening while this script runs") +parser.add_argument("-l", "--local", default=None, + help="use local version of PACE library build") args = parser.parse_args() # print help message and exit, if neither build nor path options are given if not args.build: - parser.print_help() - sys.exit(HELP) + parser.print_help() + sys.exit(HELP) buildflag = args.build verboseflag = args.verbose version = args.version - +local = args.local archive_extension = "tar.gz" url = "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/%s.%s" % (version, archive_extension) -unarchived_folder_name = "lammps-user-pace-%s"%(version) +unarchived_folder_name = "lammps-user-pace-%s" % (version) # download PACE tarball, unpack, build PACE if buildflag: + if not local: + # download entire tarball + print("Downloading pace tarball ...") + archive_filename = "%s.%s" % (version, archive_extension) + download_filename = "%s/%s" % (thisdir, archive_filename) + print("Downloading from ", url, " to ", download_filename, end=" ") + geturl(url, download_filename) + print(" done") - # download entire tarball + # verify downloaded archive integrity via md5 checksum, if known. + if version in checksums: + if not checkmd5sum(checksums[version], archive_filename): + sys.exit("Checksum for pace library does not match") - print("Downloading pace tarball ...") - archive_filename = "%s.%s" % (version, archive_extension) - download_filename = "%s/%s" % (thisdir, archive_filename) - print("Downloading from ",url," to ",download_filename, end=" ") - geturl(url, download_filename) - print(" done") + print("Unpacking pace tarball ...") + src_folder = thisdir + "/src" + cmd = 'cd "%s"; rm -rf "%s"; tar -xvf %s; mv %s %s' % ( + thisdir, src_folder, archive_filename, unarchived_folder_name, src_folder) + subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) + else: + # copy from local version of library PACE + print("Copy pace from ", local) + src_folder = thisdir + "/src" + shutil.copytree(local, src_folder, + # ignore=lambda (s1,s2): ('.git' in s1 or '.git' in s2), + dirs_exist_ok=True) - # verify downloaded archive integrity via md5 checksum, if known. - if version in checksums: - if not checkmd5sum(checksums[version], archive_filename): - sys.exit("Checksum for pace library does not match") - print("Unpacking pace tarball ...") - src_folder = thisdir+"/src" - cmd = 'cd "%s"; rm -rf "%s"; tar -xvf %s; mv %s %s' % (thisdir, src_folder, archive_filename, unarchived_folder_name, src_folder) - subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) + # build + print("Building libpace ...") + cmd = 'make lib -j2' + txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) + if verboseflag: + print(txt.decode("UTF-8")) - # build - print("Building libpace ...") - cmd = 'make lib -j2' - txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) - if verboseflag: - print(txt.decode("UTF-8")) + # remove source files -# remove source files + print("Removing pace build files and archive ...") + cmd = 'make clean-build' + if not local: + cmd = ('rm %s;' % (download_filename))+cmd + subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) - print("Removing pace build files and archive ...") - cmd = 'rm %s; make clean-build' % (download_filename) - subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) diff --git a/lib/pace/Makefile b/lib/pace/Makefile index 81f7c9db95..e6d7bff2b9 100644 --- a/lib/pace/Makefile +++ b/lib/pace/Makefile @@ -5,8 +5,14 @@ SHELL = /bin/sh YAML_CPP_PATH = src/yaml-cpp YAML_CPP_INC = $(YAML_CPP_PATH)/include +WIGNER_CPP_INC = src/wigner-cpp/include/wigner + +CNPY_CPP_PATH = src/cnpy +CNPY_CPP_INC = $(CNPY_CPP_PATH) +CNPY_SRC_FILES = $(CNPY_CPP_PATH)/cnpy.cpp + SRC_FILES = $(wildcard src/ML-PACE/*.cpp) -SRC = $(filter-out src/ML-PACE/pair_pace.cpp, $(SRC_FILES)) +SRC = $(filter-out src/ML-PACE/pair_pace.cpp, $(SRC_FILES)) $(CNPY_SRC_FILES) # ------ DEFINITIONS ------ @@ -15,7 +21,7 @@ OBJ = $(SRC:.cpp=.o) # ------ SETTINGS ------ -CXXFLAGS = -O3 -fPIC -Isrc/ML-PACE -I$(YAML_CPP_INC) +CXXFLAGS = -O3 -fPIC -Isrc/ML-PACE -I$(YAML_CPP_INC) -I$(WIGNER_CPP_INC) -I$(CNPY_CPP_INC) -DEXTRA_C_PROJECTIONS ARCHIVE = ar ARCHFLAG = -rc diff --git a/lib/pace/Makefile.lammps b/lib/pace/Makefile.lammps index f4cbeb8ffd..7e4513e36d 100644 --- a/lib/pace/Makefile.lammps +++ b/lib/pace/Makefile.lammps @@ -1,3 +1,3 @@ -pace_SYSINC =-I../../lib/pace/src/ML-PACE -I../../lib/pace/src/yaml-cpp/include +pace_SYSINC =-I../../lib/pace/src/ML-PACE -I../../lib/pace/src/yaml-cpp/include -I../../lib/pace/src/wigner-cpp/include/wigner -DEXTRA_C_PROJECTIONS pace_SYSLIB = -L../../lib/pace/ -lpace -L../../lib/pace/src/yaml-cpp/ -lyaml-cpp -pace_SYSPATH = +pace_SYSPATH = \ No newline at end of file