summary refs log tree commit diff
path: root/pkgs/os-specific/gnu/default.nix
blob: c002447d64b1dea84794305f292d8bef74c66d83 (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
95
96
97
98
99
100
101
102
103
104
105
# Packages that make up the GNU/Hurd operating system (aka. GNU).

args@{ fetchgit, stdenv, autoconf, automake, automake111x, libtool
, texinfo, glibcCross, hurdPartedCross, libuuid, samba
, gccCrossStageStatic, gccCrossStageFinal
, forcedNativePackages, forceSystem, newScope, platform, config, crossSystem
, overrides ? {} }:

with args;

let
  callPackage = newScope gnu;

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

    hurdCrossIntermediate = forcedNativePackages.callPackage ./hurd {
      inherit fetchgit stdenv autoconf libtool texinfo glibcCross;
      inherit (gnu) machHeaders mig;
      hurdPartedCross = null;
      libuuid = null;
      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 = forcedNativePackages.callPackage ./libpthread {
      inherit fetchgit stdenv autoconf automake libtool glibcCross;
      inherit (gnu) machHeaders hurdHeaders;
      hurd = gnu.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 {
      # Build natively, but force use of a 32-bit environment because we're
      # targeting `i586-pc-gnu'.
      stdenv = (forceSystem "i686-linux" "i386").stdenv;
    };

    # XXX: Use this one for its `.crossDrv'.  Using the one above from
    # `x86_64-linux' leads to building a different cross-toolchain because of
    # the `forceSystem'.
    mig_raw = callPackage ./mig {};

    smbfs = callPackage ./smbfs {
      hurd = gnu.hurdCross;
    };

    unionfs = callPackage ./unionfs {
      hurd = gnu.hurdCross;
    };
  }

  # Allow callers to override elements of this attribute set.
  // overrides;

in gnu # we trust!