From 91d97e3f57473847c112da3963ae176aebd415b6 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 7 Nov 2022 17:16:45 +0100 Subject: [PATCH] Added instal instruction and etc file --- INSTALL.rst | 93 ++++++++++++++------ etc/zz.guix.rc | 17 ++++ guix/manifest.scm | 36 ++++++++ guix/qp2.scm | 216 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 334 insertions(+), 28 deletions(-) create mode 100644 etc/zz.guix.rc create mode 100644 guix/manifest.scm create mode 100644 guix/qp2.scm diff --git a/INSTALL.rst b/INSTALL.rst index e37d31eb..6d33f1c8 100644 --- a/INSTALL.rst +++ b/INSTALL.rst @@ -10,6 +10,62 @@ repository `_. git clone https://github.com/QuantumPackage/qp2 +QP has a long list of dependencies: + +- GNU Linux OS +- Fortran compiler : GNU Fortran, Intel Fortran or IBM XL Fortran +- `GNU make`_ +- `Autoconf`_ +- `Python`_ > 3.7 +- |IRPF90| : Fortran code generator +- |EZFIO| : Easy Fortran Input/Output library generator +- |BLAS| and |LAPACK| +- `Zlib`_ +- `GNU Patch`_ +- |ZeroMQ| : networking library +- `GMP `_ : Gnu Multiple Precision Arithmetic Library +- |OCaml| compiler with |OPAM| package manager +- |Ninja| : a parallel build system +- |pkg-config| : a tool which returns information about installed libraries + +so we don't recommend the installation of all the dependencies by hand. + +Preferred installation method: Guix +=================================== + +|qp| is very easy to install on systems that have +access to `Guix `_. To install Guix +on your system, follow the `Guix installation instructions +`_. + +One Guix is installed, all the dependencies required for compiling +and running |qp| can be installed using: + +.. code:: bash + + guix package -L guix -m guix/manifest.scm + +in the :file:`qp2` root directory. + +Installation on a x86_64 system without network access +====================================================== + +Fetch the :file:`qp2-environment.tar.gz` archive containing all the +dependencies `here `_. Unpack the archive in the +:file:`guix` directory: + +.. code:: bash + + $ cd qp2/guix + $ wget qp2-environment.tar.gz + $ tar -zxf qp2-environment.tar.gz + $ ls + gnu manifest.scm qp2-environment.tar.gz qp2.scm + +That's it! + +Compilation +=========== Before anything, go into your :file:`quantum_package` directory and run @@ -37,34 +93,6 @@ Now all the requirements are met, you can compile the programs using make -Installation of dependencies via a Conda environment -==================================================== - -.. code:: bash - - conda env create -f qp2.yml - - - -Requirements -============ - -- Linux OS -- Fortran compiler : GNU Fortran, Intel Fortran or IBM XL Fortran -- `GNU make`_ -- `Autoconf`_ -- `Python`_ > 3.7 -- |IRPF90| : Fortran code generator -- |EZFIO| : Easy Fortran Input/Output library generator -- |BLAS| and |LAPACK| -- `Zlib`_ -- `GNU Patch`_ -- |ZeroMQ| : networking library -- `GMP `_ : Gnu Multiple Precision Arithmetic Library -- |OCaml| compiler with |OPAM| package manager -- |Ninja| : a parallel build system -- |pkg-config| : a tool which returns information about installed libraries - When all the dependencies have been installed, go into the :file:`config` directory, and copy the configuration file that corresponds to your @@ -354,3 +382,12 @@ If you have *pip* for Python3, you can do +Installation of dependencies via a Conda environment +==================================================== + +.. code:: bash + + conda env create -f qp2.yml + + + diff --git a/etc/zz.guix.rc b/etc/zz.guix.rc new file mode 100644 index 00000000..187ae903 --- /dev/null +++ b/etc/zz.guix.rc @@ -0,0 +1,17 @@ +# Default flags for Guix + +export GUIX_BUILD_OPTIONS="-L $QP_ROOT/guix" + +export QP_GUIX_ROOT=$(ls -d $QP_ROOT/guix/gnu/store/*profile) + +if [[ -d "$QP_GUIX_ROOT" ]] ; +then + export PATH=$QP_GUIX_ROOT/bin:$PATH + unset LD_LIBRARY_PATH= + export LIBRARY_PATH=$LIBRARY_PATH:$QP_GUIX_ROOT/lib + export C_INCLUDE_PATH=$C_INCLUDE_PATH:$QP_GUIX_ROOT/include + export CPATH=$CPATH:$QP_GUIX_ROOT/include +fi + + + diff --git a/guix/manifest.scm b/guix/manifest.scm new file mode 100644 index 00000000..73f7e751 --- /dev/null +++ b/guix/manifest.scm @@ -0,0 +1,36 @@ +;; This "manifest" file can be passed to 'guix package -m' to reproduce +;; the content of your profile. This is "symbolic": it only specifies +;; package names. To reproduce the exact same profile, you also need to +;; capture the channels being used, as returned by "guix describe". +;; See the "Replicating Guix" section in the manual. +;; +;; guix shell --load-path="guix/" \ +;; --manifest="manifest.scm" + +(specifications->manifest + (list "nss-certs" + "ocaml-cryptokit" + "ocaml-zmq" + "git" + "ocaml-sexplib" + "ocaml-ppx-sexp-conv" + "ocaml-ppx-deriving" + "ocaml-getopt" + "ocamlbuild" + "python-resultsfile" + "f77_zmq" + "bubblewrap" + "ocaml-findlib" + "ocaml" + "bash" + "glibc-locales" + "python-docopt" + "bats" + "python" + "gmp" + "zeromq" + "zlib" + "ninja" + "openblas" + "gfortran-toolchain" + "gcc-toolchain")) diff --git a/guix/qp2.scm b/guix/qp2.scm new file mode 100644 index 00000000..8f8e8a95 --- /dev/null +++ b/guix/qp2.scm @@ -0,0 +1,216 @@ +;; Custom Guix module definitions for dependencies of QP + +(define-module (qp2) + #:use-module (guix download) + #:use-module (guix build-system dune) + #:use-module (guix build-system gnu) + #:use-module (guix build-system ocaml) + #:use-module (guix build-system python) + #:use-module (guix build-system copy) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages) + #:use-module (gnu packages base) + #:use-module (gnu packages bash) + #:use-module (gnu packages certs) + #:use-module (gnu packages commencement) + #:use-module (gnu packages compression) + #:use-module (gnu packages gcc) + #:use-module (gnu packages maths) + #:use-module (gnu packages multiprecision) + #:use-module (gnu packages networking) + #:use-module (gnu packages ninja) + #:use-module (gnu packages ocaml) + #:use-module (gnu packages python) + #:use-module (gnu packages python-xyz) + #:use-module (gnu packages version-control) + #:use-module (gnu packages virtualization)) + +(define-public ocaml-cryptokit + (package + (name "ocaml-cryptokit") + (version "1.17") + (source (origin + (method url-fetch) + (uri + "https://github.com/xavierleroy/cryptokit/archive/release117.tar.gz") + (sha256 + (base32 + "0gsgb4bwy389ndkribgk5fmzjp3fgml0xi8sd9amx3krwd1k1qak")))) + (build-system dune-build-system) + (propagated-inputs (list zlib ocaml-zarith gmp)) + (home-page "https://github.com/xavierleroy/cryptokit") + (synopsis "A library of cryptographic primitives") + (description + "Cryptokit includes authenticated encryption (AES-GCM, Chacha20-Poly1305), block +ciphers (AES, DES, 3DES), stream ciphers (Chacha20, ARCfour), public-key +cryptography (RSA, DH), hashes (SHA-256, SHA-512, SHA-3, Blake2), MACs, +compression, random number generation -- all presented with a compositional, +extensible interface.") + (license license:lgpl2.0+))) + +(define-public ocaml-getopt + (package + (name "ocaml-getopt") + (version "20120615") + (source (origin + (method url-fetch) + (uri + "https://download.ocamlcore.org/ocaml-getopt/ocaml-getopt/20120615/ocaml-getopt-20120615.tar.gz") + (sha256 + (base32 + "1rz2mi3gddwpd249bvz6h897swiajk4d6cczrsscibwpkmdvrfwa")))) + (build-system ocaml-build-system) + (native-inputs (list ocamlbuild)) + (home-page #f) + (synopsis + "Parsing of command line arguments (similar to GNU GetOpt) for OCaml") + (description + "General command line syntax of GNU getopt and getopt_long, but is close to the +spirit of the Arg module.") + (license license:expat))) + + +(define-public ocaml-stdint + (package + (name "ocaml-stdint") + (version "0.7.2") + (source (origin + (method url-fetch) + (uri + "https://github.com/andrenth/ocaml-stdint/releases/download/0.7.2/stdint-0.7.2.tbz") + (sha256 + (base32 + "1rkpx48k5d7ypgwzvhzc2116jri6x2mhvi2jm4zaziy9if6ijq0m")))) + (build-system dune-build-system) + (arguments `(#:tests? #f)) + (propagated-inputs (list ocaml-odoc ocaml-base)) + (native-inputs (list ocaml-qcheck)) + (home-page "https://github.com/andrenth/ocaml-stdint") + (synopsis "Signed and unsigned integer types having specified widths") + (description + "The stdint library provides signed and unsigned integer types of various fixed +widths: 8, 16, 24, 32, 40, 48, 56, 64 and 128 bit. This interface is similar to +Int32 and Int64 from the base library but provides more functions and constants +like arithmetic and bit-wise operations, constants like maximum and minimum +values, infix operators conversion to and from every other integer type +(including int, float and nativeint), parsing from and conversion to readable +strings (binary, octal, decimal, hexademical), conversion to and from buffers in +both big endian and little endian byte order.") + (license license:expat))) + + +(define-public ocaml-zmq + (package + (name "ocaml-zmq") + (version "5.1.5") + (source (origin + (method url-fetch) + (uri + "https://github.com/issuu/ocaml-zmq/releases/download/5.1.5/zmq-lwt-5.1.5.tbz") + (sha256 + (base32 + "0mkvlrr9ykmaidwch39gb7jpqnb90n50iw30rn95fg2bmcyx2iwr")))) + (build-system dune-build-system) + (arguments + `(#:package "zmq" + #:test-target ".")) + (propagated-inputs (list zeromq ocaml-stdint)) + (native-inputs (list ocaml-ounit2)) + (home-page "https://github.com/issuu/ocaml-zmq") + (synopsis "OCaml bindings for ZeroMQ 4.x") + (description + "This library contains basic bindings for ZMQ.") + (license license:expat))) + + +(define-public f77_zmq + (package + (name "f77_zmq") + (version "4.3.3") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/zeromq/f77_zmq/releases/download/v" + version + "/f77-zmq-" + version + ".tar.gz")) + (sha256 + (base32 + "0k70riil3fczymp17184rzfvzfvy0k8a6s9yfwyrrh2qyrz797hf")))) + (build-system gnu-build-system) + (arguments '(#:configure-flags '("--enable-silent-rules"))) + (inputs `( + ("gcc", gcc) + ("gfortran", gfortran) + ("python", python) + ("zeromq", zeromq) + )) + (synopsis "ZeroMQ Fortran77 binding") + (description "Fortran77 binding for the ZeroMQ lightweight messaging library.") + (home-page "https://github.com/zeromq/f77_zmq") + (license license:lgpl2.1+))) + + +(define-public python-resultsfile + (package + (name "python-resultsfile") + (version "2.4") + (source (origin + (method url-fetch) + (uri (pypi-uri "resultsFile" version)) + (sha256 + (base32 + "199agrkihv3vh0y4h0gpsa5w2d24q991k4sgxmscs75nl3z8sx90")))) + (build-system python-build-system) + (home-page "https://gitlab.com/scemama/resultsFile") + (synopsis "Module for reading output files of quantum chemistry codes.") + (description "Module for reading output files of quantum chemistry codes.") + (license license:gpl2+))) + + + +;(define-public qp2-environment +; (package +; (name "qp2-environment") +; (version "2.0") +; (source #f) +; (build-system copy-build-system) +; (arguments +; '(#:install-plan #f)) +; (inputs +; (list nss-certs +; ocaml-cryptokit +; ocaml-zmq +; git +; ocaml-sexplib +; ocaml-ppx-sexp-conv +; ocaml-ppx-deriving +; ocaml-getopt +; ocamlbuild +; python-resultsfile +; f77_zmq +; bubblewrap +; ocaml-findlib +; ocaml +; bash +; glibc-locales +; python-docopt +; bats +; python +; gmp +; zeromq +; zlib +; ninja +; openblas +; gfortran-toolchain +; gcc-toolchain)) +; (home-page "https://quantumpackage.github.io/qp2/") +; (synopsis "A programming environment for wave function methods") +; (description "Quantum Package is an open-source programming environment for +; quantum chemistry specially designed for wave function methods. Its main +; goal is the development of determinant-driven selected configuration +; interaction (sCI) methods and multi-reference second-order perturbation +; theory (PT2).") +; (license license:agpl3+))) +