default.nix 5.86 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
24
25
26
27
28
29
  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
30
31
}:
let
Valentin Reis's avatar
Valentin Reis committed
32
33
  callPackage = pkgs.lib.callPackageWith (pkgs // argopkgs);
  argopkgs = rec {
Valentin Reis's avatar
Valentin Reis committed
34
    argolib     = import ../lib/utils.nix;
Valentin Reis's avatar
Valentin Reis committed
35
36
37
38
39
40
41
42
43
    # 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 ];
    });
44

Valentin Reis's avatar
Valentin Reis committed
45
    # Applications (source overridable via argument):
46

Valentin Reis's avatar
Valentin Reis committed
47
48
49
50
51
    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
52

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

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

Valentin Reis's avatar
Valentin Reis committed
64
65
66
67
68
        #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
69
70
71
        argotk = (self.callCabal2nix "argotk" argotk-src) {};
        argonix = (self.callCabal2nix "argonix" argonix-src) {};
        repoquality = (self.callCabal2nix "repoquality" repoquality-src) {};
72
      };
Valentin Reis's avatar
Valentin Reis committed
73
    };
Valentin Reis's avatar
Valentin Reis committed
74
75
76
77
78

    # 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
79
80
81
82
83
84
85
86
87
88
89
90
        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
91
92
93
94
95
96
97
98
      });

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

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

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

Valentin Reis's avatar
Valentin Reis committed
106
107
108
    # nix-shell environments, can not be built.
    test = pkgs.stdenv.mkDerivation rec {
      name = "testEnv";
109

Valentin Reis's avatar
Valentin Reis committed
110
111
112
      #required to be able to build the drv.
      installPhase = "mkdir $$out";
      unpackPhase = "true";
Valentin Reis's avatar
Valentin Reis committed
113

Valentin Reis's avatar
Valentin Reis committed
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
      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
133
      #SUDO = builtins.toPath sudoPath;
Valentin Reis's avatar
Valentin Reis committed
134
    };
Valentin Reis's avatar
Valentin Reis committed
135

Valentin Reis's avatar
Valentin Reis committed
136
137
138
139
140
141
    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
142

Valentin Reis's avatar
Valentin Reis committed
143
144
145
146
147
148
149
150
151
152
153
154
155
156
    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";

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