From 8dda256fad0d04cb0c438dc5520c73b8684d2731 Mon Sep 17 00:00:00 2001 From: Tyson Whitehead Date: Thu, 18 Jan 2018 00:17:48 -0500 Subject: [PATCH] firedrake: Moved to new overlay system and shared sub-scope Firedrake contains a ton of inter-connected dependencies, many of which are either firedrake specific or forked versions of upstream packages. Cleaner to create a firedrake sub-scope for all these. --- firedrake/coffee.nix | 32 ---------- firedrake/default.nix | 63 ------------------- firedrake/finat.nix | 30 --------- firedrake/parmetis.nix | 33 ---------- firedrake/petsc.nix | 61 ------------------ firedrake/petsc4py.nix | 36 ----------- firedrake/pyop2.nix | 52 --------------- firedrake/tsfc.nix | 38 ----------- pkgs/all-packages.nix | 2 + pkgs/firedrake/coffee.nix | 27 ++++++++ pkgs/firedrake/default.nix | 49 +++++++++++++++ .../firedrake}/exodus-include.patch | 0 {firedrake => pkgs/firedrake}/exodus.nix | 5 +- {firedrake => pkgs/firedrake}/fiat.nix | 12 ++-- pkgs/firedrake/finat.nix | 25 ++++++++ .../firedrake}/firedrake-setup.patch | 0 pkgs/firedrake/firedrake.nix | 52 +++++++++++++++ {firedrake => pkgs/firedrake}/hypre.nix | 8 +-- {firedrake => pkgs/firedrake}/metis.nix | 4 +- {firedrake => pkgs/firedrake}/mpi4py.nix | 5 +- pkgs/firedrake/parmetis.nix | 29 +++++++++ pkgs/firedrake/petsc.nix | 53 ++++++++++++++++ pkgs/firedrake/petsc4py.nix | 31 +++++++++ {firedrake => pkgs/firedrake}/pulp.nix | 9 +-- pkgs/firedrake/pyop2.nix | 45 +++++++++++++ {firedrake => pkgs/firedrake}/sowing.nix | 4 +- pkgs/firedrake/tsfc.nix | 30 +++++++++ {firedrake => pkgs/firedrake}/ufl.nix | 10 +-- 28 files changed, 373 insertions(+), 372 deletions(-) delete mode 100644 firedrake/coffee.nix delete mode 100644 firedrake/default.nix delete mode 100644 firedrake/finat.nix delete mode 100644 firedrake/parmetis.nix delete mode 100644 firedrake/petsc.nix delete mode 100644 firedrake/petsc4py.nix delete mode 100644 firedrake/pyop2.nix delete mode 100644 firedrake/tsfc.nix create mode 100644 pkgs/firedrake/coffee.nix create mode 100644 pkgs/firedrake/default.nix rename {firedrake => pkgs/firedrake}/exodus-include.patch (100%) rename {firedrake => pkgs/firedrake}/exodus.nix (87%) rename {firedrake => pkgs/firedrake}/fiat.nix (72%) create mode 100644 pkgs/firedrake/finat.nix rename {firedrake => pkgs/firedrake}/firedrake-setup.patch (100%) create mode 100644 pkgs/firedrake/firedrake.nix rename {firedrake => pkgs/firedrake}/hypre.nix (85%) rename {firedrake => pkgs/firedrake}/metis.nix (89%) rename {firedrake => pkgs/firedrake}/mpi4py.nix (95%) create mode 100644 pkgs/firedrake/parmetis.nix create mode 100644 pkgs/firedrake/petsc.nix create mode 100644 pkgs/firedrake/petsc4py.nix rename {firedrake => pkgs/firedrake}/pulp.nix (81%) create mode 100644 pkgs/firedrake/pyop2.nix rename {firedrake => pkgs/firedrake}/sowing.nix (86%) create mode 100644 pkgs/firedrake/tsfc.nix rename {firedrake => pkgs/firedrake}/ufl.nix (75%) diff --git a/firedrake/coffee.nix b/firedrake/coffee.nix deleted file mode 100644 index ee95e27..0000000 --- a/firedrake/coffee.nix +++ /dev/null @@ -1,32 +0,0 @@ -with import {}; - -let - - pulp = import ./pulp.nix; - -in - - python27Packages.buildPythonPackage rec { - version = "bdbc5fc0a8dfc45683489c6835c3c00cb27c0427"; - name = "firedrake-COFFEE-${version}"; - - src = fetchFromGitHub { - owner = "coneoproject"; - repo = "COFFEE"; - rev = "${version}"; - sha256 = "0b4jgnz05n6lapcnljpnq1p5z6j4bbdnq0mm3c53gzx4r47rkgyk"; - }; - - propagatedBuildInputs = [ - python27Packages.networkx - python27Packages.numpy - python27Packages.six - pulp - ]; - - meta = { - homepage = "https://github.com/coneoproject/COFFEE"; - description = "A COmpiler For Fast Expression Evaluation (COFFEE)."; - license = licenses.bsd3; - }; - } diff --git a/firedrake/default.nix b/firedrake/default.nix deleted file mode 100644 index 93c33b9..0000000 --- a/firedrake/default.nix +++ /dev/null @@ -1,63 +0,0 @@ -with import {}; - -let - - ufl = import ./ufl.nix; - fiat = import ./fiat.nix; - finat = import ./finat.nix; - tsfc = import ./tsfc.nix; - pyop2 = import ./pyop2.nix; - petsc = import ./petsc.nix; - petsc4py = import ./petsc4py.nix; - coffee = import ./coffee.nix; - -in - - python27Packages.buildPythonPackage rec { - version = "a967a34c0f05d3dbfb9be05825777da40a6195dc"; - name = "firedrake-${version}"; - - src = fetchFromGitHub { - owner = "firedrakeproject"; - repo = "firedrake"; - rev = "${version}"; - sha256 = "1mf9vmmin51x2wgz8fdvbw27y6w41qg488f7c2hifx74jdr2ggfd"; - }; - - buildInputs = [ - openmpi - hdf5 - libspatialindex - python27Packages.cython - python27Packages.pytest_29 - python27Packages.pytest_xdist - python27Packages.pylint - petsc - ]; - - propagatedBuildInputs = [ - python27Packages.h5py - python27Packages.six - python27Packages.sympy - python27Packages.psutil - python27Packages.cachetools - python27Packages.singledispatch - python27Packages.ipython - python27Packages.matplotlib - ufl - fiat - finat - tsfc - pyop2 - petsc4py - coffee - ]; - - patches = [ ./firedrake-setup.patch ]; - - meta = { - homepage = "http://www.firedrakeproject.org"; - description = "Firedrake is an automated system for the portable solution of partial differential equations using the finite element method (FEM)."; - license = licenses.gpl3; - }; - } diff --git a/firedrake/finat.nix b/firedrake/finat.nix deleted file mode 100644 index 88e020c..0000000 --- a/firedrake/finat.nix +++ /dev/null @@ -1,30 +0,0 @@ -with import {}; - -let - - fiat = import ./fiat.nix; - -in - - python27Packages.buildPythonPackage rec { - version = "fecac5b4d4ecf4b02b1ee440bdc4a57bfa9f1d87"; - name = "FInAT-${version}"; - - src = fetchFromGitHub { - owner = "FInAT"; - repo = "FInAT"; - rev = "${version}"; - sha256 = "1ad7vzpvlwmx5pgmvj2v8s6n5kdrz02j7wzj25wn974a2ff6pvvd"; - }; - - propagatedBuildInputs = [ - python27Packages.numpy - fiat - ]; - - meta = { - homepage = "https://github.com/FInAT/FInAT"; - description = "FInAT is an attempt to provide a more abstract, smarter library of finite elements."; - license = licenses.mit; - }; - } diff --git a/firedrake/parmetis.nix b/firedrake/parmetis.nix deleted file mode 100644 index 91edb42..0000000 --- a/firedrake/parmetis.nix +++ /dev/null @@ -1,33 +0,0 @@ -with import {}; - -let - - metis = import ./metis.nix; - -in - - stdenv.mkDerivation rec { - version = "4.0.3-p4"; - name = "parmetis-${version}"; - - src = fetchFromBitbucket { - owner = "petsc"; - repo = "pkg-parmetis"; - rev = "v${version}"; - sha256 = "088pzcyjgv1i8jbdznxnxy04cd8kk5y3a46vc7mh1na901s0msm2"; - }; - - buildInputs = [ - cmake - openmpi - metis - ]; - - cmakeFlags = [ "-DGKLIB_PATH=../headers" ]; - makeFlags = [ "VERBOSE=1" ]; - - meta = { - homepage = "http://glaros.dtc.umn.edu/gkhome/metis/parmetis"; - description = "An MPI-based parallel library that implements a variety of algorithms for partitioning unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices."; - }; - } diff --git a/firedrake/petsc.nix b/firedrake/petsc.nix deleted file mode 100644 index 48f8ef4..0000000 --- a/firedrake/petsc.nix +++ /dev/null @@ -1,61 +0,0 @@ -with import {}; - -let - - sowing = import ./sowing.nix; - metis = import ./metis.nix; - parmetis = import ./parmetis.nix; - hypre = import ./hypre.nix; - exodus = import ./exodus.nix; - -in - - stdenv.mkDerivation rec { - version = "156a1856fd44f55220132393778f0fda1e6096e3"; - name = "firedrake-petsc-${version}"; - - src = fetchFromGitHub { - owner = "firedrakeproject"; - repo = "petsc"; - rev = "${version}"; - sha256 = "1fmkd818idbiwbr6q9bmsxgwsc7igk13amfvb160llvsj32i93s9"; - }; - - buildInputs = [ - sowing - metis - parmetis - hypre - exodus - python27 - gfortran - openmpi - blas - liblapack - hdf5 - netcdf - eigen - ]; - - postPatch = "patchShebangs ."; - - configureFlags = [ - "--with-sowing-dir=${sowing}" - "--with-hdf5-dir=${hdf5}" - "--with-netcdf-dir=${netcdf}" - "--with-metis-dir=${metis}" - "--with-parmetis-dir=${parmetis}" - "--with-hypre-dir=${hypre}" - "--with-exodusii-dir=${exodus}" - "--with-eign-dir=${eigen}" - "--with-64-bit-indices" - ]; - - setupHook = writeText "setupHook.sh" "export PETSC_DIR=@out@"; - - meta = { - homepage = "https://github.com/firedrakeproject/petsc"; - description = "A suite of data structures and routines for the scalable (parallel) solution of scientific applications modeled by partial differential equations."; - license = licenses.bsd2; - }; - } diff --git a/firedrake/petsc4py.nix b/firedrake/petsc4py.nix deleted file mode 100644 index 2de6475..0000000 --- a/firedrake/petsc4py.nix +++ /dev/null @@ -1,36 +0,0 @@ -with import {}; - -let - - petsc = import ./petsc.nix; - -in - - python27Packages.buildPythonPackage rec { - version = "fbe23a494ab485f44f00ee37eee9f8be8dcd9eb5"; - name = "firedrake-petsc4py-${version}"; - - src = fetchFromGitHub { - owner = "firedrakeproject"; - repo = "petsc4py"; - rev = "${version}"; - sha256 = "0172rgpyqh2ylr4wv4a79xfls8fbbdb86n4p6r7cx5kdy8d2y05b"; - }; - - buildInputs = [ - python27Packages.cython - openmpi - hdf5 - petsc - ]; - - propagatedBuildInputs = [ - python27Packages.numpy - ]; - - meta = { - homepage = "https://bitbucket.org/petsc/petsc4py/"; - description = "Python bindings for PETSc."; - license = licenses.bsd2; - }; - } diff --git a/firedrake/pyop2.nix b/firedrake/pyop2.nix deleted file mode 100644 index cbbd3b7..0000000 --- a/firedrake/pyop2.nix +++ /dev/null @@ -1,52 +0,0 @@ -with import {}; - -let - - mpi4py = import ./mpi4py.nix; - coffee = import ./coffee.nix; - petsc = import ./petsc.nix; - petsc4py = import ./petsc4py.nix; - -in - - python27Packages.buildPythonPackage rec { - version = "98aab7bbbab2945317c1b9ecf5885652cf20e709"; - name = "PyOP2-${version}"; - - src = fetchFromGitHub { - owner = "OP2"; - repo = "PyOP2"; - rev = "${version}"; - sha256 = "167yl4vmw8r9pbn7issjvpflhisjnn42dnw6rfz6bp1rw9v4n4md"; - }; - - buildInputs = [ - openmpi - python27Packages.cython - python27Packages.pytest - python27Packages.flake8 - python27Packages.pycparser - petsc - ]; - - propagatedBuildInputs = [ - python27Packages.six - python27Packages.numpy - python27Packages.decorator - mpi4py - coffee - petsc4py - ]; - - postPatch = '' - sed -i -e 's|self\._cc = os\.environ\.get(ccenv, cc)|self._cc = '\'"$(type -p mpicxx)"\''' if cpp else '\'"$(type -p mpicc)"\'''|' pyop2/compilation.py - sed -i -e 's|self\._ld = os\.environ\.get('\'''LDSHARED'\''', ld)|self._ld = None|' pyop2/compilation.py - sed -i -e 's|os\.environ\['\'''PETSC_DIR'\'''\]|'\'''${petsc}'\'''|' pyop2/utils.py - ''; - - meta = { - homepage = "http://op2.github.io/PyOP2/"; - description = "Framework for performance-portable parallel computations on unstructured meshes."; - license = licenses.bsd3; - }; - } diff --git a/firedrake/tsfc.nix b/firedrake/tsfc.nix deleted file mode 100644 index cf5085b..0000000 --- a/firedrake/tsfc.nix +++ /dev/null @@ -1,38 +0,0 @@ -with import {}; - -let - - coffee = import ./coffee.nix; - ufl = import ./ufl.nix; - fiat = import ./fiat.nix; - finat = import ./finat.nix; - -in - - python27Packages.buildPythonPackage rec { - version = "ee5670ab1ad90aaf8f550de01255c6752583255d"; - name = "firedrake-tsfc-${version}"; - - src = fetchFromGitHub { - owner = "firedrakeproject"; - repo = "tsfc"; - rev = "${version}"; - sha256 = "07v5v1nhcywn2rpdr0380ck120ppzlvpfknmjh1rss6xkzf2s9lf"; - }; - - propagatedBuildInputs = [ - python27Packages.numpy - python27Packages.singledispatch - python27Packages.six - coffee - ufl - fiat - finat - ]; - - meta = { - homepage = "https://github.com/firedrakeproject/tsfc"; - description = "Form compiler for the Firedrake project."; - license = licenses.gpl3; - }; - } diff --git a/pkgs/all-packages.nix b/pkgs/all-packages.nix index f99127a..d68bd59 100644 --- a/pkgs/all-packages.nix +++ b/pkgs/all-packages.nix @@ -1,4 +1,6 @@ self: pkgs: with pkgs; { cryptominisat = callPackage ./cryptominisat.nix { }; + + firedrake = callPackage ./firedrake { }; } diff --git a/pkgs/firedrake/coffee.nix b/pkgs/firedrake/coffee.nix new file mode 100644 index 0000000..d77f012 --- /dev/null +++ b/pkgs/firedrake/coffee.nix @@ -0,0 +1,27 @@ +{ lib, callPackage, fetchFromGitHub, pythonPackages +, pulp }: + +pythonPackages.buildPythonPackage rec { + version = "bdbc5fc0a8dfc45683489c6835c3c00cb27c0427"; + name = "firedrake-COFFEE-${version}"; + + src = fetchFromGitHub { + owner = "coneoproject"; + repo = "COFFEE"; + rev = "${version}"; + sha256 = "0b4jgnz05n6lapcnljpnq1p5z6j4bbdnq0mm3c53gzx4r47rkgyk"; + }; + + propagatedBuildInputs = [ + pythonPackages.networkx + pythonPackages.numpy + pythonPackages.six + pulp + ]; + + meta = with lib; { + homepage = "https://github.com/coneoproject/COFFEE"; + description = "A COmpiler For Fast Expression Evaluation (COFFEE)."; + license = licenses.bsd3; + }; +} diff --git a/pkgs/firedrake/default.nix b/pkgs/firedrake/default.nix new file mode 100644 index 0000000..c54d954 --- /dev/null +++ b/pkgs/firedrake/default.nix @@ -0,0 +1,49 @@ +# This just brings in everything. +# +# This isn't really informative or overridable in any practical sense. Could put the closure of the dependencies +# of all the packages declared here instead. This would be overridable/informative, but a bigger pain to maintain. +# +# Likely this should be added into the python packages set instead of dropped on the top-level. +# +{ pkgs }: + +let + self = + let + # Top-level scope extended with this set of packages. + # + # Possibly it would make more sense to use the python-level scope instead? + # + callPackage = pkgs.newScope self; + + in + with self; { + inherit callPackages; + + # Python to use for all this stuff (much of it is python) + python = pkgs.python27; + pythonPackages = python.pkgs; + + # Forked and unavailable packages required by firedrake and its dependencies + ufl = callPackage ./ufl.nix { }; + fiat = callPackage ./fiat.nix { }; + finat = callPackage ./finat.nix { }; + tsfc = callPackage ./tsfc.nix { }; + pyop2 = callPackage ./pyop2.nix { }; + petsc = callPackage ./petsc.nix { }; + petsc4py = callPackage ./petsc4py.nix { }; + coffee = callPackage ./coffee.nix { }; + firedrake = callPackage ./firedrake.nix { }; + pulp = callPackage ./pulp.nix { }; + sowing = callPackage ./sowing.nix { }; + metis = callPackage ./metis.nix { }; + hypre = callPackage ./hypre.nix { }; + parmetis = callPackage ./parmetis.nix { }; + exodus = callPackage ./exodus.nix { }; + + # Incompatible version (something with communicator/datatype cleanup callbacks?) + mpi4py = callPackage ./mpi4py.nix { }; + }; + +in + self.firedrake diff --git a/firedrake/exodus-include.patch b/pkgs/firedrake/exodus-include.patch similarity index 100% rename from firedrake/exodus-include.patch rename to pkgs/firedrake/exodus-include.patch diff --git a/firedrake/exodus.nix b/pkgs/firedrake/exodus.nix similarity index 87% rename from firedrake/exodus.nix rename to pkgs/firedrake/exodus.nix index e06c095..d8f7a11 100644 --- a/firedrake/exodus.nix +++ b/pkgs/firedrake/exodus.nix @@ -1,4 +1,5 @@ -with import {}; +{ stdenv, fetchurl, cmake, gfortran +, netcdf, hdf5 }: stdenv.mkDerivation rec { version = "5.24"; @@ -20,7 +21,7 @@ stdenv.mkDerivation rec { patches = ./exodus-include.patch; sourceRoot = "${name}/exodus"; - meta = { + meta = with stdenv.lib; { homepage = "http://gsjaardema.github.io/seacas"; description = "A model developed to store and retrieve data for finite element analyses."; license = licenses.bsd3; diff --git a/firedrake/fiat.nix b/pkgs/firedrake/fiat.nix similarity index 72% rename from firedrake/fiat.nix rename to pkgs/firedrake/fiat.nix index 03c2e10..3e6a702 100644 --- a/firedrake/fiat.nix +++ b/pkgs/firedrake/fiat.nix @@ -1,6 +1,6 @@ -with import {}; +{ lib, fetchFromGitHub, pythonPackages }: -python27Packages.buildPythonPackage rec { +pythonPackages.buildPythonPackage rec { version = "20847cdee0d323726571324f565ff3da6f19e700"; name = "firedrake-fiat-${version}"; @@ -12,12 +12,12 @@ python27Packages.buildPythonPackage rec { }; propagatedBuildInputs = [ - python27Packages.numpy - python27Packages.sympy - python27Packages.six + pythonPackages.numpy + pythonPackages.sympy + pythonPackages.six ]; - meta = { + meta = with lib; { homepage = "https://github.com/firedrakeproject/fiat"; description = "Copy of upstream FIAT for use with Firedrake."; license = licenses.lgpl3; diff --git a/pkgs/firedrake/finat.nix b/pkgs/firedrake/finat.nix new file mode 100644 index 0000000..87f64ce --- /dev/null +++ b/pkgs/firedrake/finat.nix @@ -0,0 +1,25 @@ +{ lib, callPackage, fetchFromGitHub, pythonPackages +, fiat }: + +pythonPackages.buildPythonPackage rec { + version = "fecac5b4d4ecf4b02b1ee440bdc4a57bfa9f1d87"; + name = "FInAT-${version}"; + + src = fetchFromGitHub { + owner = "FInAT"; + repo = "FInAT"; + rev = "${version}"; + sha256 = "1ad7vzpvlwmx5pgmvj2v8s6n5kdrz02j7wzj25wn974a2ff6pvvd"; + }; + + propagatedBuildInputs = [ + pythonPackages.numpy + fiat + ]; + + meta = with lib; { + homepage = "https://github.com/FInAT/FInAT"; + description = "FInAT is an attempt to provide a more abstract, smarter library of finite elements."; + license = licenses.mit; + }; +} diff --git a/firedrake/firedrake-setup.patch b/pkgs/firedrake/firedrake-setup.patch similarity index 100% rename from firedrake/firedrake-setup.patch rename to pkgs/firedrake/firedrake-setup.patch diff --git a/pkgs/firedrake/firedrake.nix b/pkgs/firedrake/firedrake.nix new file mode 100644 index 0000000..0519d3e --- /dev/null +++ b/pkgs/firedrake/firedrake.nix @@ -0,0 +1,52 @@ +{ lib, callPackage, fetchFromGitHub, pythonPackages +, openmpi, hdf5, libspatialindex +, ufl, fiat, finat, tsfc, pyop2, petsc, petsc4py, coffee }: + +pythonPackages.buildPythonPackage rec { + version = "a967a34c0f05d3dbfb9be05825777da40a6195dc"; + name = "firedrake-${version}"; + + src = fetchFromGitHub { + owner = "firedrakeproject"; + repo = "firedrake"; + rev = "${version}"; + sha256 = "0flj0ca3b3pmcnak058alx5kfhz0h7s3hz0q7qiciag9m8p6ccnl"; + }; + + buildInputs = [ + openmpi + hdf5 + libspatialindex + pythonPackages.cython + pythonPackages.pytest_29 + pythonPackages.pytest_xdist + pythonPackages.pylint + petsc + ]; + + propagatedBuildInputs = [ + pythonPackages.h5py + pythonPackages.six + pythonPackages.sympy + pythonPackages.psutil + pythonPackages.cachetools + pythonPackages.singledispatch + pythonPackages.ipython + pythonPackages.matplotlib + ufl + fiat + finat + tsfc + pyop2 + petsc4py + coffee + ]; + + patches = [ ./firedrake-setup.patch ]; + + meta = with lib; { + homepage = "http://www.firedrakeproject.org"; + description = "Firedrake is an automated system for the portable solution of partial differential equations using the finite element method (FEM)."; + license = licenses.gpl3; + }; +} diff --git a/firedrake/hypre.nix b/pkgs/firedrake/hypre.nix similarity index 85% rename from firedrake/hypre.nix rename to pkgs/firedrake/hypre.nix index 04fa125..8f47979 100644 --- a/firedrake/hypre.nix +++ b/pkgs/firedrake/hypre.nix @@ -1,4 +1,5 @@ -with import {}; +{ stdenv, fetchFromGitHub, cmake +, openmpi }: stdenv.mkDerivation rec { version = "xsdk-0.2.0-rc2"; @@ -16,13 +17,12 @@ stdenv.mkDerivation rec { openmpi ]; - - sourceRoot = "${name}-src/src"; + sourceRoot = "source/src"; preConfigure = "cmakeFlags=\"-DHYPRE_INSTALL_PREFIX=$prefix $cmakeFlags\""; makeFlags = [ "VERBOSE=1" ]; - meta = { + meta = with stdenv.lib; { homepage = "http://www.llnl.gov/casc/hypre"; description = "Parallel solvers for sparse linear systems featuring multigrid methods."; license = licenses.gpl2; diff --git a/firedrake/metis.nix b/pkgs/firedrake/metis.nix similarity index 89% rename from firedrake/metis.nix rename to pkgs/firedrake/metis.nix index 81ae578..c94568f 100644 --- a/firedrake/metis.nix +++ b/pkgs/firedrake/metis.nix @@ -1,4 +1,4 @@ -with import {}; +{ stdenv, fetchFromBitbucket, cmake }: stdenv.mkDerivation rec { version = "5.1.0-p4"; @@ -17,7 +17,7 @@ stdenv.mkDerivation rec { makeFlags = [ "VERBOSE=1" ]; - meta = { + meta = with stdenv.lib; { homepage = "https://bitbucket.org/petsc/metis"; description = "A set of serial programs for partitioning graphs, partitioning finite element meshes, and producing fill reducing orderings for sparse matrices."; }; diff --git a/firedrake/mpi4py.nix b/pkgs/firedrake/mpi4py.nix similarity index 95% rename from firedrake/mpi4py.nix rename to pkgs/firedrake/mpi4py.nix index 89ab5b2..cc011f5 100644 --- a/firedrake/mpi4py.nix +++ b/pkgs/firedrake/mpi4py.nix @@ -1,6 +1,7 @@ -with import { }; +{ stdenv, fetchurl, python +, openmpi, openssh }: -python27Packages.buildPythonPackage rec { +python.pkgs.buildPythonPackage rec { name = "mpi4py-2.0.0"; src = fetchurl { diff --git a/pkgs/firedrake/parmetis.nix b/pkgs/firedrake/parmetis.nix new file mode 100644 index 0000000..6df36c1 --- /dev/null +++ b/pkgs/firedrake/parmetis.nix @@ -0,0 +1,29 @@ +{ stdenv, fetchFromBitbucket, cmake +, openmpi +, metis }: + +stdenv.mkDerivation rec { + version = "4.0.3-p4"; + name = "parmetis-${version}"; + + src = fetchFromBitbucket { + owner = "petsc"; + repo = "pkg-parmetis"; + rev = "v${version}"; + sha256 = "088pzcyjgv1i8jbdznxnxy04cd8kk5y3a46vc7mh1na901s0msm2"; + }; + + buildInputs = [ + cmake + openmpi + metis + ]; + + cmakeFlags = [ "-DGKLIB_PATH=../headers" ]; + makeFlags = [ "VERBOSE=1" ]; + + meta = with stdenv.lib; { + homepage = "http://glaros.dtc.umn.edu/gkhome/metis/parmetis"; + description = "An MPI-based parallel library that implements a variety of algorithms for partitioning unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices."; + }; +} diff --git a/pkgs/firedrake/petsc.nix b/pkgs/firedrake/petsc.nix new file mode 100644 index 0000000..96e1789 --- /dev/null +++ b/pkgs/firedrake/petsc.nix @@ -0,0 +1,53 @@ +{ stdenv, callPackage, writeText, fetchFromGitHub, python, gfortran +, openmpi, blas, liblapack, hdf5, netcdf, eigen +, sowing, metis, hypre, parmetis, exodus }: + +stdenv.mkDerivation rec { + version = "156a1856fd44f55220132393778f0fda1e6096e3"; + name = "firedrake-petsc-${version}"; + + src = fetchFromGitHub { + owner = "firedrakeproject"; + repo = "petsc"; + rev = "${version}"; + sha256 = "1fmkd818idbiwbr6q9bmsxgwsc7igk13amfvb160llvsj32i93s9"; + }; + + buildInputs = [ + sowing + metis + parmetis + hypre + exodus + python + gfortran + openmpi + blas + liblapack + hdf5 + netcdf + eigen + ]; + + postPatch = "patchShebangs ."; + + configureFlags = [ + "--with-sowing-dir=${sowing}" + "--with-hdf5-dir=${hdf5}" + "--with-netcdf-dir=${netcdf}" + "--with-metis-dir=${metis}" + "--with-parmetis-dir=${parmetis}" + "--with-hypre-dir=${hypre}" + "--with-exodusii-dir=${exodus}" + "--with-eign-dir=${eigen}" + "--with-64-bit-indices" + ]; + + setupHook = writeText "setupHook.sh" "export PETSC_DIR=@out@"; + + meta = with stdenv.lib; { + homepage = "https://github.com/firedrakeproject/petsc"; + description = "A suite of data structures and routines for the scalable (parallel) solution of scientific applications modeled by partial differential equations."; + license = licenses.bsd2; + }; +} diff --git a/pkgs/firedrake/petsc4py.nix b/pkgs/firedrake/petsc4py.nix new file mode 100644 index 0000000..cd425cf --- /dev/null +++ b/pkgs/firedrake/petsc4py.nix @@ -0,0 +1,31 @@ +{ lib, callPackage, fetchFromGitHub, pythonPackages +, openmpi, hdf5, petsc }: + +pythonPackages.buildPythonPackage rec { + version = "fbe23a494ab485f44f00ee37eee9f8be8dcd9eb5"; + name = "firedrake-petsc4py-${version}"; + + src = fetchFromGitHub { + owner = "firedrakeproject"; + repo = "petsc4py"; + rev = "${version}"; + sha256 = "0172rgpyqh2ylr4wv4a79xfls8fbbdb86n4p6r7cx5kdy8d2y05b"; + }; + + buildInputs = [ + pythonPackages.cython + openmpi + hdf5 + petsc + ]; + + propagatedBuildInputs = [ + pythonPackages.numpy + ]; + + meta = with lib; { + homepage = "https://bitbucket.org/petsc/petsc4py/"; + description = "Python bindings for PETSc."; + license = licenses.bsd2; + }; +} diff --git a/firedrake/pulp.nix b/pkgs/firedrake/pulp.nix similarity index 81% rename from firedrake/pulp.nix rename to pkgs/firedrake/pulp.nix index b1f9ecc..dc67c30 100644 --- a/firedrake/pulp.nix +++ b/pkgs/firedrake/pulp.nix @@ -1,6 +1,7 @@ -with import {}; +{ lib, fetchFromGitHub, pythonPackages +, glpk, cbc }: -python27Packages.buildPythonPackage rec { +pythonPackages.buildPythonPackage rec { version = "1.6.4"; name = "PuLP-${version}"; @@ -17,7 +18,7 @@ python27Packages.buildPythonPackage rec { ]; propagatedBuildInputs = [ - python27Packages.pyparsing + pythonPackages.pyparsing ]; postPatch = '' @@ -25,7 +26,7 @@ python27Packages.buildPythonPackage rec { sed -i -e 's|^GlpkPath = .*$|GlpkPath = ${glpk}/bin/glpsol|' src/pulp/pulp.cfg.linux ''; - meta = { + meta = with lib; { homepage = "https://github.com/coin-or/pulp"; description = "A python Linear Programming API."; license = licenses.mit; diff --git a/pkgs/firedrake/pyop2.nix b/pkgs/firedrake/pyop2.nix new file mode 100644 index 0000000..e602f71 --- /dev/null +++ b/pkgs/firedrake/pyop2.nix @@ -0,0 +1,45 @@ +{ lib, callPackage, fetchFromGitHub, pythonPackages +, openmpi +, coffee, petsc, petsc4py, mpi4py }: + +pythonPackages.buildPythonPackage rec { + version = "98aab7bbbab2945317c1b9ecf5885652cf20e709"; + name = "PyOP2-${version}"; + + src = fetchFromGitHub { + owner = "OP2"; + repo = "PyOP2"; + rev = "${version}"; + sha256 = "1hw8wpbfgw8j48jfhv72pxq33as2mkw9a9k2qg0607d77agjmpz5"; + }; + + buildInputs = [ + openmpi + pythonPackages.cython + pythonPackages.pytest + pythonPackages.flake8 + pythonPackages.pycparser + petsc + ]; + + propagatedBuildInputs = [ + pythonPackages.six + pythonPackages.numpy + pythonPackages.decorator + mpi4py + coffee + petsc4py + ]; + + postPatch = '' + sed -i -e 's|self\._cc = os\.environ\.get(ccenv, cc)|self._cc = '\'"$(type -p mpicxx)"\''' if cpp else '\'"$(type -p mpicc)"\'''|' pyop2/compilation.py + sed -i -e 's|self\._ld = os\.environ\.get('\'''LDSHARED'\''', ld)|self._ld = None|' pyop2/compilation.py + sed -i -e 's|os\.environ\['\'''PETSC_DIR'\'''\]|'\'''${petsc}'\'''|' pyop2/utils.py + ''; + + meta = with lib; { + homepage = "http://op2.github.io/PyOP2/"; + description = "Framework for performance-portable parallel computations on unstructured meshes."; + license = licenses.bsd3; + }; +} diff --git a/firedrake/sowing.nix b/pkgs/firedrake/sowing.nix similarity index 86% rename from firedrake/sowing.nix rename to pkgs/firedrake/sowing.nix index 6558fa6..b8da774 100644 --- a/firedrake/sowing.nix +++ b/pkgs/firedrake/sowing.nix @@ -1,4 +1,4 @@ -with import {}; +{ stdenv, fetchFromBitbucket, ghostscript }: stdenv.mkDerivation rec { version = "1.1.25-p1"; @@ -16,7 +16,7 @@ stdenv.mkDerivation rec { ghostscript ]; - meta = { + meta = with stdenv.lib; { homepage = "https://bitbucket.org/petsc/pkg-sowing"; description = "Tools that are part of the petsc program development and maintenance environment."; }; diff --git a/pkgs/firedrake/tsfc.nix b/pkgs/firedrake/tsfc.nix new file mode 100644 index 0000000..101c747 --- /dev/null +++ b/pkgs/firedrake/tsfc.nix @@ -0,0 +1,30 @@ +{ lib, callPackage, fetchFromGitHub, pythonPackages +, coffee, ufl, fiat, finat }: + +pythonPackages.buildPythonPackage rec { + version = "ee5670ab1ad90aaf8f550de01255c6752583255d"; + name = "firedrake-tsfc-${version}"; + + src = fetchFromGitHub { + owner = "firedrakeproject"; + repo = "tsfc"; + rev = "${version}"; + sha256 = "07v5v1nhcywn2rpdr0380ck120ppzlvpfknmjh1rss6xkzf2s9lf"; + }; + + propagatedBuildInputs = [ + pythonPackages.numpy + pythonPackages.singledispatch + pythonPackages.six + coffee + ufl + fiat + finat + ]; + + meta = with lib; { + homepage = "https://github.com/firedrakeproject/tsfc"; + description = "Form compiler for the Firedrake project."; + license = licenses.gpl3; + }; +} diff --git a/firedrake/ufl.nix b/pkgs/firedrake/ufl.nix similarity index 75% rename from firedrake/ufl.nix rename to pkgs/firedrake/ufl.nix index 2c590b2..d3492b9 100644 --- a/firedrake/ufl.nix +++ b/pkgs/firedrake/ufl.nix @@ -1,6 +1,6 @@ -with import {}; +{ lib, fetchFromGitHub, pythonPackages }: -python27Packages.buildPythonPackage rec { +pythonPackages.buildPythonPackage rec { version = "8c17257d325f5f040ad1cb74b866956ad42427ca"; name = "firedrake-ufl-${version}"; @@ -12,11 +12,11 @@ python27Packages.buildPythonPackage rec { }; propagatedBuildInputs = [ - python27Packages.numpy - python27Packages.six + pythonPackages.numpy + pythonPackages.six ]; - meta = { + meta = with lib; { homepage = "https://github.com/firedrakeproject/ufl"; description = "Copy of upstream UFL for use with Firedrake."; license = licenses.lgpl3;