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

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

Valentin Reis's avatar
Valentin Reis committed
7
8
9
, # versioned nixpkgs-older version for zmcat
  pkgs-old        ? import (hostPkgs.nix-update-source.fetch ./pkgs-old.json).src {}

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

, #source overrides: core nrm components
Valentin Reis's avatar
Valentin Reis committed
14
15
16
17
  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
18
19

, #source overrides: applications
Valentin Reis's avatar
Valentin Reis committed
20
21
22
23
24
  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
25
26

, #source overrides :tooling
27
28
29
30
31
32
  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;}

, #used for hardware experiments.
  sudoPath ? null
Valentin Reis's avatar
.  
Valentin Reis committed
33
34
}:
let
Valentin Reis's avatar
Valentin Reis committed
35
  callPackage = pkgs.lib.callPackageWith (pkgs // argopkgs);
36

Valentin Reis's avatar
Valentin Reis committed
37
  argopkgs = rec {
38
    # library of nix expressions
Valentin Reis's avatar
Valentin Reis committed
39
    argolib     = import ../lib/utils.nix;
40
    # Argo components (source overridabel via argument)
41
42
43
44
    aml        = callPackage ./aml        {src=aml-src;};
    nrm        = callPackage ./nrm        {src=nrm-src;};
    containers = callPackage ./containers {src=containers-src;};
    libnrm     = callPackage ./libnrm     {src=libnrm-src;};
Valentin Reis's avatar
Valentin Reis committed
45
46
47
48
    libnrm-pmpi = libnrm.overrideAttrs (oldAttrs: rec {
      configureFlags = "--enable-pmpi";
      buildInputs = oldAttrs.buildInputs ++ [ pkgs.mpich2 ];
    });
49

50
    # applications (source overridable via argument)
51
52
53
54
55
    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
56

57
    # data (static, non source overridable via arguments)
Valentin Reis's avatar
Valentin Reis committed
58
    openmc-data = fetched openmc/data.json;
Valentin Reis's avatar
Valentin Reis committed
59

60
61
62
63
    # tools
    zymake = callPackage ./zymake {
      inherit (pkgs.ocamlPackages) findlib ocamlbuild topkg batteries;
    };
Valentin Reis's avatar
Valentin Reis committed
64
65
    haskellPackages = pkgs.haskellPackages.override {
      overrides = self: super: with pkgs.haskell.lib;
Valentin Reis's avatar
Valentin Reis committed
66
      rec {
Valentin Reis's avatar
Valentin Reis committed
67
        panpipe        = (pkgs.haskell.lib.doJailbreak super.panpipe);
Valentin Reis's avatar
Valentin Reis committed
68
        spdx           = (pkgs.haskell.lib.doJailbreak super.spdx);
Valentin Reis's avatar
Valentin Reis committed
69
        generic-pretty = doJailbreak super.generic-pretty;
Valentin Reis's avatar
Valentin Reis committed
70

Valentin Reis's avatar
Valentin Reis committed
71
72
73
74
75
        #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
76
77
78
        argotk = (self.callCabal2nix "argotk" argotk-src) {};
        argonix = (self.callCabal2nix "argonix" argonix-src) {};
        repoquality = (self.callCabal2nix "repoquality" repoquality-src) {};
79
      };
Valentin Reis's avatar
Valentin Reis committed
80
    };
Valentin Reis's avatar
Valentin Reis committed
81

82
    # re-export from hpkgs and add non-haskell build rule specialization
Valentin Reis's avatar
Valentin Reis committed
83
84
85
    inherit (haskellPackages) repoquality;

    argotk = haskellPackages.argotk.overrideAttrs (old:{
Valentin Reis's avatar
Valentin Reis committed
86
87
88
89
90
91
92
93
94
95
96
97
        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
98
99
100
101
102
103
104
105
      });

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

107
    # fix for nrm
Valentin Reis's avatar
Valentin Reis committed
108
    pyzmq = pkgs.pythonPackages.pyzmq.override { zeromq3 = pkgs.zeromq; };
Valentin Reis's avatar
Valentin Reis committed
109

110
    # archived for sake of the simplicity of this file
Valentin Reis's avatar
Valentin Reis committed
111
112
    zmcat = pkgs-old.haskellPackages.callPackage ./zmcat {};
    zmqat = pkgs-old.haskellPackages.zmqat;
113

114
    # ci/experimental environments
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
    testBuildInputs =  [
      # 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
    ];

Valentin Reis's avatar
Valentin Reis committed
131
132
    test = pkgs.stdenv.mkDerivation rec {
      name = "testEnv";
133

134
135
      buildInputs = testBuildInputs ++ [ stream ];

Valentin Reis's avatar
Valentin Reis committed
136
      #required to be able to build the drv.
137
      installPhase = "mkdir $out";
Valentin Reis's avatar
Valentin Reis committed
138
      unpackPhase = "true";
Valentin Reis's avatar
Valentin Reis committed
139

140
141
142
143
144
145
146
      __noChroot = true;
      shellHook =''
        echo ""
        echo "ENTERING ENVIRONMENT: Sources of impurity for this build are: /tmp/ /etc/argo/ /var/run/ /var/lock/".
        echo "ENTERING ENVIRONMENT: Moreover, sandboxing is disabled, in particular because of:"
        echo "ENTERING ENVIRONMENT: /tmp/nrm-* sockets, /etc/argo, /var/run/, /var/lock/ which all need read access. "
        echo "ENTERING ENVIRONMENT: until these components are patched to allow for alternative paths, no sandbox use is possible."
147
        source ${argotk}/share/argotk.sh # bash completion
148
        echo ""
149
      '';
150
      #argotk uses this environment variable.
151
      ARGOTK_SHARE = "${argotk}/share";
Valentin Reis's avatar
Valentin Reis committed
152
    };
Valentin Reis's avatar
Valentin Reis committed
153

Valentin Reis's avatar
Valentin Reis committed
154
    expe = test.overrideAttrs (old:{
155
156
157
      buildInputs = testBuildInputs ++ [
        #debug tools
        pkgs.which
Valentin Reis's avatar
Valentin Reis committed
158
        zmcat
159
160
161
162
163
164

        #experiment tools
        zymake

        #applications
        (stream.override {iterationCount = "20000";})
Valentin Reis's avatar
bumps.    
Valentin Reis committed
165
        #lammps
166
        qmcpack
Valentin Reis's avatar
bumps.    
Valentin Reis committed
167
168
        #openmc
        #openmc-data
Valentin Reis's avatar
Valentin Reis committed
169
170
        ## amg is not ready, its progress report loop isn't tight enough.
        #amg
171
      ];
Valentin Reis's avatar
Valentin Reis committed
172
173
174
      OPENMC_CROSS_SECTIONS = "${openmc-data}/cross_sections.xml";
      OPENMC_PWD = "${argotk}/share/openmc";
    });
Valentin Reis's avatar
Valentin Reis committed
175

Valentin Reis's avatar
Valentin Reis committed
176
177
    analysis =
    pkgs.rWrapper.override{ packages = with pkgs.rPackages; [
Valentin Reis's avatar
Valentin Reis committed
178
179
      pkgs.rlwrap
      pkgs.pandoc
Valentin Reis's avatar
Valentin Reis committed
180
181
182
183
184
185
186
187
188
189
190
191
192
193
      docopt
      formatR
      purrr
      knitr
      cowplot
      plotly
      lubridate
      dplyr
      ggplot2
      xtable
      ggthemes
      data_table
    ];};

194
195
196
197
198
199
200
201
202
203
204
    jupyter =
      let
        jupyter = import (fetched jupyter/pin.json) {};
      in
       (jupyter.jupyterlabWith {
          kernels = [
            (jupyter.kernels.juniperWith {
              name = "analysis";
              packages = p: with p; [ ggplot2
                  pkgs.which
                  docopt
Valentin Reis's avatar
Valentin Reis committed
205
                  purrr
206
207
                  knitr
                  cowplot
Valentin Reis's avatar
Valentin Reis committed
208
                  plotly
209
210
211
212
213
214
215
216
217
218
219
                  lubridate
                  dplyr
                  ggplot2
                  xtable
                  ggthemes
                  data_table
              ];
            })
          ];
         }).env;

Valentin Reis's avatar
Valentin Reis committed
220
221
222
223
224
225
226
227
228
229
230
231
232
233
    doArgotk = command: test.overrideAttrs (old:{
      buildPhase = "argotk "+command;
      installPhase = ''
        mkdir $out
        cp _output/* $out/
      '';
    });
    testHello       = doArgotk "TestHello";
    testListen      = doArgotk "TestListen";
    testPerfwrapper = doArgotk "TestPerfwrapper";
    testPower       = doArgotk "TestPower";
    testSTREAM      = doArgotk "TestSTREAM";
    testAll         = doArgotk "tests";

234
  };
235
# re-exporting a full nixpkgs-like package set
236
in pkgs // argopkgs