default.nix 6.38 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

114 115
      __noChroot = true;

Valentin Reis's avatar
Valentin Reis committed
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";})
      ];
133 134 135 136 137 138 139 140 141
      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."
        source ${argotk}/share/argotk.sh
        echo ""
      ''; # bash completion
Valentin Reis's avatar
Valentin Reis committed
142
      ARGOTK_SHARE = "${argotk}/share"; # for argotk to find its versioned data
143
      #SUDO = builtins.toPath sudoPath;
Valentin Reis's avatar
Valentin Reis committed
144
    };
Valentin Reis's avatar
Valentin Reis committed
145

Valentin Reis's avatar
Valentin Reis committed
146 147 148 149 150 151
    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
152

Valentin Reis's avatar
Valentin Reis committed
153 154 155 156 157 158 159 160 161 162 163 164 165 166
    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";

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