summary refs log tree commit diff
path: root/pkgs/stdenv/linux/make-bootstrap-tools.nix
blob: c0de7032a8bb2e0db1c26304bc4353c74c41139b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
let

  pkgs = import ../../top-level/all-packages.nix {};

  
  # Have to do removeAttrs to prevent all-packages from copying
  # stdenv-linux's dependencies, rather than building new ones with
  # dietlibc.
  pkgsToRemove = 
    [ "binutils" "gcc" "coreutils" "findutils" "diffutils" "gnused" "gnugrep"
      "gawk" "gnutar" "gzip" "bzip2" "gnumake" "bash" "patch" "patchelf"
    ];

  pkgsDiet = import ../../top-level/all-packages.nix {
    bootStdenv = removeAttrs (pkgs.useDietLibC pkgs.stdenv) pkgsToRemove;
  };

  pkgsStatic = import ../../top-level/all-packages.nix {
    bootStdenv = removeAttrs (pkgs.makeStaticBinaries pkgs.stdenv) pkgsToRemove;
  };

  
  generator = pkgs.stdenv.mkDerivation {
    name = "bootstrap-tools-generator";
    builder = ./make-bootstrap-tools.sh;
    
    inherit (pkgsDiet)
      coreutils findutils diffutils gnugrep
      gzip bzip2 gnumake bash patch;
      
    gnused = pkgsDiet.gnused412; # 4.1.5 gives "Memory exhausted" errors

    # patchelf is C++, won't work with dietlibc.
    inherit (pkgsStatic) patchelf;

    gnutar =
      # Tar seems to be broken on dietlibc on x86_64.
      if pkgs.stdenv.system == "i686-linux"
      then pkgsDiet.gnutar
      else pkgsStatic.gnutar;

    gawk = 
      # Dietlibc only provides sufficient math functions (fmod, sin,
      # cos, etc.) on i686.  On other platforms, use Glibc.
      if pkgs.stdenv.system == "i686-linux"
      then pkgsDiet.gawk
      else pkgsStatic.gawk;
      
    binutils = pkgsDiet.binutils217;
   
    gcc = import ../../development/compilers/gcc-static-4.1 {
      inherit (pkgs) fetchurl stdenv;
      profiledCompiler = false;
      langCC = false;
    };
  
    curl = pkgsDiet.realCurl;

    glibc = pkgs.glibc;

    # The result should not contain any references (store paths) so
    # that we can safely copy them out of the store and to other
    # locations in the store.
    allowedReferences = [];
  };

in generator