summaryrefslogtreecommitdiff
path: root/microkernel/mach/gnumach/building.mdwn
blob: 5226a4b0b3dcf8868ff5f268e2adcf921abbd80f (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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# 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.

### Installing only the Header Files

First, you have to create the configuartion files:

    $ cd gnumach
    $ autoreconf --install

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

    $ mkdir gnumach-build
    $ cd gnumach-build

Find the path to your GNU Mach sources (`../gnumach`) and configure it:

    $ ../configure --prefix=

Use the --host flag on 64 bit systems:

    $ ../configure --prefix= --host=i686-unknown-linux-gnu

Install the header files into e.g. `~/gnu/include/`:

    $ make DESTDIR=~/gnu install-data

### Building and Installing

Building GNU Mach requires you to have the Mach Interface Generator
installed.  See [[building_MIG|mig/gnu_mig/building]] about how to do that, then come
back here.

GNU Mach should be built in a subdirectory create it if you have not already. 

    $ mkdir gnumach-build
    $ cd gnumach-build

If you previously ran ../configure for installing the header files, you may run
into a bug when you configure and run make below. If that is the case, run "rm
-rf *" in the _build_ directory, and reconfigure.

    $ cd gnumach-build
    $ rm -rf *

Find the path to your GNU Mach sources (`../gnumach`) and configure it:

    $ ../configure

If you are building on a 64 bit system, do the following instead:

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

Build the kernel image:

    $ make gnumach.gz

Optionally run the (tiny) test suite:

    $ make check

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

[TODO.]