summaryrefslogtreecommitdiff
path: root/Mach/BuildingGNUMach.mdwn
blob: 1b3298f367d486473efb37f6db0f1931b98171fd (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
# <a name="Building_GNUMach_GNU_Mach_from_S"> </a> Building [[GNUMach]] from Source

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

## <a name="Getting_the_Source_Code"> Getting the Source Code </a>

You can chose between getting the [sources from the developers's RCS](http://www.gnu.org/software/hurd/gnumach-download.html#cvs):

    $ cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/hurd co -r gnumach-1-branch gnumach

(Most probably you want to get hold of the _GNU Mach 1 branch_ and not the trunk, which is also what we've done above.)

... or (if you are working on a Debian system) the ones that are used for the [current Debian gnumach package](http://packages.debian.net/source/unstable/gnumach):

    $ apt-get source gnumach

Please see [[Distrib/DebianFAQ]] before using _apt-get source_.

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

## <a name="Preparing_for_the_Build"> Preparing for the Build </a>

### <a name="_on_Debian_systems"> ... on Debian systems </a>

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

### <a name="_on_non_Debian_systems"> ... on non-Debian systems </a>

Apart from the case that you only want to install GNU Mach's header files (see below), building GNU Mach requires you to have the Mach Interface Generator installed. See [[Mig/BuildingMIG]] about how to do that, then come back here.

Additionally, building GNU Mach requires a C compiler, a standard C library (with corresponding header files) and your favourite flavor of awk (gawk) and make.

## <a name="Building_and_Installing"> Building and Installing </a>

### <a name="_deb_files"> ... _.deb_ files </a>

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

    $ cd gnumach-20050801

Start the build process with

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

[TODO]

[[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_20050801-4_hurd-i386.deb

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

### <a name="_TODO_"> [TODO] </a>

GNU Mach has to be built in a separate directory:

    $ mkdir gnumach-build
    $ cd gnumach-build

Find the path to your GNU Mach sources (_[...]/gnumach-1-branch_) and configure it:

    $ [...]/gnumach-1-branch/configure [TODO]

Build the kernel image:

    $ make kernel.gz

[TODO]

You can then install and use _kernel.gz_.

### <a name="Installing_only_the_Header_Files"> Installing only the Header Files </a>

GNU Mach has to be built in a separate directory:

    $ mkdir gnumach-build
    $ cd gnumach-build

Find the path to your GNU Mach sources (_[...]/gnumach-1-branch_) and configure it:

    $ [...]/gnumach-1-branch/configure

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

    $ make no_deps=t prefix=~/gnu install-headers