default.nix 5.27 KB
Newer Older
Valentin Reis's avatar
Valentin Reis committed
1
2
3
4
5
6
7
{ # host package set (unused except for fetching nixpkgs)
  hostPkgs        ? import <nixpkgs> {}

, # versioned nixpkgs
  pkgs            ? import (hostPkgs.nix-update-source.fetch ./pkgs.json).src {}

, # fetcher alias for the remaining arguments
Valentin Reis's avatar
Valentin Reis committed
8
  fetched         ? s: (pkgs.nix-update-source.fetch s).src
Valentin Reis's avatar
Valentin Reis committed
9
10

, #source overrides: core nrm components
Valentin Reis's avatar
Valentin Reis committed
11
12
13
14
  aml-src         ? fetched aml/pin.json
, libnrm-src      ? fetched libnrm/pin.json
, nrm-src         ? fetched nrm/pin.json
, containers-src  ? fetched containers/pin.json
Valentin Reis's avatar
Valentin Reis committed
15
16

, #source overrides: applications
Valentin Reis's avatar
Valentin Reis committed
17
18
19
20
21
  amg-src         ? fetched amg/pin.json
, qmcpack-src     ? fetched qmcpack/pin.json
, openmc-src      ? fetched openmc/pin.json
, stream-src      ? fetched stream/pin.json
, lammps-src      ? fetched lammps/pin.json
Valentin Reis's avatar
Valentin Reis committed
22
23

, #source overrides :tooling
Valentin Reis's avatar
Valentin Reis committed
24
25
26
  argotk-src       ? builtins.fetchGit {inherit (fetched argotk/pin.json) url rev;},
  repoquality-src  ? builtins.fetchGit {inherit (fetched repoquality/pin.json) url rev;},
  argonix-src      ? builtins.fetchGit {inherit (fetched argonix/pin.json) url rev;},
Valentin Reis's avatar
.  
Valentin Reis committed
27
28
}:
let
Valentin Reis's avatar
Valentin Reis committed
29
30
  callPackage = pkgs.lib.callPackageWith (pkgs // argopkgs);
  argopkgs = rec {
Valentin Reis's avatar
Valentin Reis committed
31
    argolib     = import ../lib/utils.nix;
Valentin Reis's avatar
Valentin Reis committed
32
33
34
35
36
37
38
39
40
    # Argo components (source overridabel via argument):
    aml        = callPackage ./aml        {src = aml-src;};
    nrm        = callPackage ./nrm        {src = nrm-src;};
    containers = callPackage ./containers {src = containers-src;};
    libnrm     = callPackage ./libnrm     {src = libnrm-src;};
    libnrm-pmpi = libnrm.overrideAttrs (oldAttrs: rec {
      configureFlags = "--enable-pmpi";
      buildInputs = oldAttrs.buildInputs ++ [ pkgs.mpich2 ];
    });
41

Valentin Reis's avatar
Valentin Reis committed
42
    # Applications (source overridable via argument):
43

Valentin Reis's avatar
Valentin Reis committed
44
45
46
47
48
    amg     = callPackage ./amg     { nrmSupport=true; src = amg-src; };
    qmcpack = callPackage ./qmcpack { nrmSupport=true; src = qmcpack-src; };
    openmc  = callPackage ./openmc  { nrmSupport=true; src = openmc-src; };
    stream  = callPackage ./stream  { nrmSupport=true; src = stream-src; };
    lammps  = callPackage ./lammps  { nrmSupport=true; src = lammps-src; };
Valentin Reis's avatar
Valentin Reis committed
49

Valentin Reis's avatar
Valentin Reis committed
50
51
    # Data (static, non source overridable via arguments):
    openmc-data = fetched openmc/data.json;
Valentin Reis's avatar
Valentin Reis committed
52

Valentin Reis's avatar
Valentin Reis committed
53
54
55
    #Tools:
    haskellPackages = pkgs.haskellPackages.override {
      overrides = self: super: with pkgs.haskell.lib;
Valentin Reis's avatar
Valentin Reis committed
56
      rec {
Valentin Reis's avatar
Valentin Reis committed
57
58
        panpipe        = (pkgs.haskell.lib.doJailbreak super.panpipe);
        generic-pretty = doJailbreak super.generic-pretty;
Valentin Reis's avatar
Valentin Reis committed
59

Valentin Reis's avatar
Valentin Reis committed
60
61
62
63
64
        #minor cabal and version fix
        panhandle    = (self.callCabal2nix "panhandle" (builtins.fetchGit {
                      inherit (panhandle-src) url rev; })) {};

        #argo tools
Valentin Reis's avatar
Valentin Reis committed
65
66
67
        argotk = (self.callCabal2nix "argotk" argotk-src) {};
        argonix = (self.callCabal2nix "argonix" argonix-src) {};
        repoquality = (self.callCabal2nix "repoquality" repoquality-src) {};
68
      };
Valentin Reis's avatar
Valentin Reis committed
69
    };
Valentin Reis's avatar
Valentin Reis committed
70
71
72
73
74

    # re-export from hpkgs and add non-haskell build rule specializations..
    inherit (haskellPackages) repoquality;

    argotk = haskellPackages.argotk.overrideAttrs (old:{
Valentin Reis's avatar
Valentin Reis committed
75
76
77
78
79
80
81
82
83
84
85
86
        buildInputs=old.buildInputs ++ [pkgs.hwloc];
        installPhase = old.installPhase + ''
          mkdir $out/share/
          ARGOTK_SHARE=share $out/bin/argotk --bash-completion-script argotk > $out/share/argotk.sh
          cp -r share/* $out/share/
          substituteInPlace $out/share/simple-H2O.xml --replace \
                H2O.HF.wfs.xml $out/share/H2O.HF.wfs.xml
          substituteInPlace $out/share/simple-H2O.xml --replace \
                O.BFD.xml $out/share/O.BFD.xml
          substituteInPlace $out/share/simple-H2O.xml --replace \
                H.BFD.xml $out/share/H.BFD.xml
        '';
Valentin Reis's avatar
Valentin Reis committed
87
88
89
90
91
92
93
94
      });

    argonix = haskellPackages.argonix.overrideAttrs (old:{
        installPhase = old.installPhase + ''
          mkdir $out/share/
          $out/bin/argonix --bash-completion-script argonix > $out/share/argonix.sh
        '';
      });
95

Valentin Reis's avatar
Valentin Reis committed
96
97
    # Fixing the pyzmq package in this attribute set.
    pyzmq = pkgs.pythonPackages.pyzmq.override { zeromq3 = pkgs.zeromq; };
Valentin Reis's avatar
Valentin Reis committed
98

Valentin Reis's avatar
Valentin Reis committed
99
100
    # archived for sake of the simplicity of this file:
    #zmcat = pkgs-stable.haskellPackages.callPackage ./tools/zmcat {};
101

Valentin Reis's avatar
Valentin Reis committed
102
103
104
    # nix-shell environments, can not be built.
    test = pkgs.stdenv.mkDerivation rec {
      name = "testEnv";
105

Valentin Reis's avatar
Valentin Reis committed
106
107
108
      #required to be able to build the drv.
      installPhase = "mkdir $$out";
      unpackPhase = "true";
Valentin Reis's avatar
Valentin Reis committed
109

Valentin Reis's avatar
Valentin Reis committed
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
      buildInputs =  [
        # argotk runs mpiexec:
        pkgs.mpich2
        # argotk uses hwloc to choose CPU counts:
        pkgs.hwloc
        # these are needed for some reason:
        pkgs.coreutils
        pkgs.utillinux
        pkgs.git
        # argo tools
        argotk
        # argo components
        containers
        nrm
        # sample application for testing progress reports:
        (stream.override {libnrm = libnrm; iterationCount = "20";})
      ];
      shellHook ="source ${argotk}/share/argotk.sh"; # bash completion
      ARGOTK_SHARE = "${argotk}/share"; # for argotk to find its versioned data
    };
Valentin Reis's avatar
Valentin Reis committed
130

Valentin Reis's avatar
Valentin Reis committed
131
132
133
134
135
136
    expe = test.overrideAttrs (old:{
      buildInputs = old.buildInputs ++
      [amg lammps qmcpack stream openmc openmc-data];
      OPENMC_CROSS_SECTIONS = "${openmc-data}/cross_sections.xml";
      OPENMC_PWD = "${argotk}/share/openmc";
    });
Valentin Reis's avatar
Valentin Reis committed
137

138
  };
Valentin Reis's avatar
Valentin Reis committed
139
# This file re-exports a full nixpkgs-like package set.
140
in pkgs // argopkgs