summaryrefslogtreecommitdiff
path: root/microkernel/mach/gnumach/building.mdwn
blob: 5f53d83d0d3bdd8089a5522a1f713a2b2939bd12 (plain)
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
# Building [[GNU_Mach|gnumach]] from Source

If you want to build the [[GNU_Mach|gnumach]] kernel yourself instead of just using a
pre-built binary, follow these instructions.

The unpacked source tree is around 20 MiB, and the build tree (with all drivers
enabled) is around 50 MiB.

## Getting the Source Code

You can either use the git repository (see <http://savannah.gnu.org/git/?group=hurd>),

    $ git clone git.savannah.gnu.org:/srv/git/hurd/gnumach.git

... or Debian sources, if you're using Debian. (See
[here](http://packages.debian.net/source/unstable/gnumach).)

    $ apt-get source gnumach

Please see the Debian [[running/debian/FAQ]] before using `apt-get source`.

## On Debian Systems:

### Preparing for the Build

Building GNU Mach requires the *build-essential* and *fakeroot* packages, their
dependencies and additional packages that are specified by the source gnumach
package:

    # apt-get install build-essential fakeroot
    # apt-get build-dep gnumach

### Building and Installing ... Debian `.deb` files

Change into the directory with the downloaded / unpacked GNU Mach sources, e.g.

    $ cd gnumach-XXXXXXXX

Start the build process with

    $ dpkg-buildpackage -us -uc -b -rfakeroot

[[GNU_Mach|gnumach]] is now building.  To use the new kernel, you must install the
resulting `.deb` package which is located one directory above the build
directory and has a similar name as the build directory, e.g.

    # dpkg -i ../gnumach_XXXXXXXX-X_hurd-i386.deb

You can now reboot your computer and enjoy the new kernel.

## On non-Debian Systems:

### Preparing for the Build

Building GNU Mach requires a C compiler, a _static_ 32 bit standard C library and
your favourite flavor of awk (gawk) and GNU make.

First, create the configuartion files:

    $ cd gnumach
    $ autoreconf --install

GNU Mach and its headers should be built in a subdirectory:

    $ mkdir build
    $ cd build

Run configure:

    $ ../configure --prefix=

Use the --host flag and some options on 64 bit systems:

    $ CPP='gcc -m32 -E -x c -undef -ansi' CC='gcc -m32' LD='ld -melf_i386' ../configure --prefix= --host=i686-unknown-linux-gnu

### Installing the Header Files First

In order to build GNU Mach, you must build and install MIG, which requires that
you install the GNU Mach header files, for example into `~/gnu/include/`:

    $ make DESTDIR=~/gnu install-data

### Building and Installing

After you've already installed the header files (above), as well as the the
Mach Interface Generator, you may finish building GNU Mach.  (See
[[building_MIG|mig/gnu_mig/building]], then come back here.)

GNU Mach should be built in the subdirectory created above. If you've cleared
your directory since then, you'll need to rerun the configure script.

Build the kernel image:

    $ make gnumach.gz

Optionally run the (tiny) test suite:

    $ make check

You can now install and use `gnumach.gz`.

[TODO]