This is an old revision of the document!
Building from source may be needed to diagnose issues or try fixing them yourself. The source code for Mono can be found upstream, and our RPM specs and patches used in the RPM version are found downstream. Other software included in the binary distribution are not modified and distributed according to their respective licenses.
Mono can be built on AIX 6.1 or IBM i 7.1 on POWER4 or newer. Please ensure GCC 6 (with C++ support) or newer is installed, as well as all other dependencies (libtool, autoconf, automake, zlib, gettext, gmake, gzip/xz/bzip, gtar, wget/curl, coreutils, GNU grep, libstdc++, cmake). You will likely have issues using GCC 4 on AIX.
The process is a typical one for most autotools projects:
# do autogen, since unlike a tarball dist, git builds don't have the configure script generated # (then you can run configure to set up the environment as needed) autoreconf -fiv . ./configure --flags-here # or to do both at once ./autogen --flags-here # then to build... gmake # or, to massively speed up the build gmake -j<number of CPU threads assigned to your LPAR here> # then optionally, to install Mono for usage gmake install
It is recommended you make another directory (the "prefix") to install Mono in, as not to conflict with system directories. You can tell the Mono you build to use this by passing
-prefix=/path/to/directory. For some purposes, you may not need to install Mono; just instead running from build artifact directories. For example,
MONO_PATH=mcs/class/lib/build runtime/mono-wrapper mcs/class/lib/net_4_x-unix/csharp.exe can be used to start the C# REPL from built artifacts.
To speed up builds,
CONFIG_SHELL=`which bash` when running autogen/configure, passing it as an ephemeral environment variable. This will speed up libtool by removing checks for POSIX shell compliance by just using bash instead of the AIX default shell.
When building for IBM i, you must use
--enable-minimal=shared_perfcounters with configure, or Mono will attempt to use POSIX shared memory APIs not supported by PASE.