about summary refs log tree commit diff
path: root/pkgs/os-specific/gnu/default.nix
blob: 326918dd55ef777a03aed937c530019972693b1e (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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# Packages that make up the GNU/Hurd operating system (aka. GNU).

args@{ fetchgit, stdenv, autoconf, automake, automake111x, libtool
, texinfo, glibcCross, hurdPartedCross, libuuid, samba_light
, gccCrossStageStatic, gccCrossStageFinal
, forceBuildDrv, callPackage, platform, config, crossSystem }:

with args;

rec {
  hurdCross = forceBuildDrv(import ./hurd {
    inherit fetchgit stdenv autoconf libtool texinfo machHeaders
      mig glibcCross hurdPartedCross;
    libuuid = libuuid.hostDrv;
    automake = automake111x;
    headersOnly = false;
    cross = assert crossSystem != null; crossSystem;
    gccCross = gccCrossStageFinal;
  });

  hurdCrossIntermediate = forceBuildDrv(import ./hurd {
    inherit fetchgit stdenv autoconf libtool texinfo machHeaders
      mig glibcCross;
    automake = automake111x;
    headersOnly = false;
    cross = assert crossSystem != null; crossSystem;

    # The "final" GCC needs glibc and the Hurd libraries (libpthread in
    # particular) so we first need an intermediate Hurd built with the
    # intermediate GCC.
    gccCross = gccCrossStageStatic;

    # This intermediate Hurd is only needed to build libpthread, which needs
    # libihash, and to build Parted, which needs libstore and
    # libshouldbeinlibc.
    buildTarget = "libihash libstore libshouldbeinlibc";
    installTarget = "libihash-install libstore-install libshouldbeinlibc-install";
  });

  hurdHeaders = callPackage ./hurd {
    automake = automake111x;
    headersOnly = true;
    gccCross = null;
    glibcCross = null;
    libuuid = null;
    hurdPartedCross = null;
  };

  libpthreadHeaders = callPackage ./libpthread {
    headersOnly = true;
    hurd = null;
  };

  libpthreadCross = forceBuildDrv(import ./libpthread {
    inherit fetchgit stdenv autoconf automake libtool
      machHeaders hurdHeaders glibcCross;
    hurd = hurdCrossIntermediate;
    gccCross = gccCrossStageStatic;
    cross = assert crossSystem != null; crossSystem;
  });

  # In theory GNU Mach doesn't have to be cross-compiled.  However, since it
  # has to be built for i586 (it doesn't work on x86_64), one needs a cross
  # compiler for that host.
  mach = callPackage ./mach {
    automake = automake111x;
  };

  machHeaders = callPackage ./mach {
    automake = automake111x;
    headersOnly = true;
    mig = null;
  };

  mig = callPackage ./mig
    (if stdenv.isLinux
     then {
       # Build natively, but force use of a 32-bit environment because we're
       # targeting `i586-pc-gnu'.
       stdenv = (import ../../stdenv {
         system = "i686-linux";
         stdenvType = "i686-linux";
         allPackages = args:
           import ../../top-level/all-packages.nix ({ inherit config; } // args);
         inherit platform;
       }).stdenv;
     }
     else { });

  smbfs = callPackage ./smbfs {
    samba = samba_light;
    hurd = hurdCross;
  };
}