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