[[!meta copyright="Copyright © 2006, 2007, 2008, 2011, 2013 Free Software Foundation, Inc."]] [[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable id="license" text="Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled [[GNU Free Documentation License|/fdl]]."]]"""]] # 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](https://git.savannah.gnu.org/git/hurd/): $ 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](http://packages.debian.net/source/unstable/mig): $ 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|mach/gnumach/building]] 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/