Building the Mach Interface Generator from Source

If you want to build the Mach Interface Generator yourself instead of just using a pre-built package, follow these instructions.

Getting the Source Code

You can chose between getting the sources from the developers' RCS:

$ git clone https://git.savannah.gnu.org/git/hurd/mig.git/

... or (if you are working on a Debian system) get the sources that are used for the current Debian mig package:

$ apt source mig

The unpacked source tree is around 1 MiB, and the build tree also is around 1 MiB.

On Debian Systems:

Preparing for the Build

Building MIG requires the build-essential and fakeroot packages, and some additional dependencies specified by the mig source package:

# apt install build-essential fakeroot
# apt build-dep mig

Building and Installing ... a .deb file

Change into the directory with the downloaded / unpacked MIG sources:

$ cd mig-X.X.X.XX

Start the build process:

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

Note: if you are building on a non-32bit system, you need to also pass e.g. --target-arch=i386 to build the 32bit version.

This will create a .deb package in the parent directory, which you can then install on your system.

On non-Debian Systems:

Preparing for the Build

Building the Mach Interface Generator requires a C compiler, a standard 32 bit C library (with corresponding header files), your favourite flavor of awk (gawk), yacc (bison), lex (flex) and make.

Additionally, you need to have GNU Mach's header files installed. See building GNU Mach about how to do that, then come back here.

Building and Installing

First, generate the configuration files:

$ cd mig
$ autoreconf --install

The Mach Interface Generator has to be built in a separate build directory:

$ mkdir build
$ cd build

Find the base directory where you installed GNU Mach's header files and where you now intend to install the Mach Interface Generator (e.g. ~/gnu), and run configure:

$ GNU=~/gnu
$ TARGET_CPPFLAGS=-I"$GNU"/include ../configure --prefix="$GNU"

If you want to build 32-bit gnumach on a 64-bit machine, you need to add a --target option. mig(com) will be build as ELF64 binary, but it will generate 32-bit stub code for gnumach:

$ GNU=~/gnu
$ TARGET_CPPFLAGS=-I"$GNU"/include ../configure --prefix="$GNU" --target=i686-gnu TARGET_CC=i686-linux-gnu-gcc

Build and install the Mach Interface Generator into $GNU (i.e. ~/gnu/ in our example):

$ make all install

To make your mig binary easily available, you should append something like the following to e.g. your ~/.bash_profile:

PATH=~/gnu/bin:$PATH
export PATH

If you already have e.g. ~/bin in your $PATH, you could also create a symbolic link:

$ ln -s ~/gnu/bin/mig ~/bin/