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