1. Installation
2. Using Mono
3. Directory Roadmap
+ 4. git submodules maintenance
1. Compilation and Installation
===============================
a. Build Requirements
---------------------
- To build Mono, you will need the following components:
-
- * pkg-config
-
- Available from: http://www.freedesktop.org/Software/pkgconfig
-
- * glib 2.4
-
- Available from: http://www.gtk.org/
-
On Itanium, you must obtain libunwind:
http://www.hpl.hp.com/research/linux/libunwind/download.php4
* libgdiplus
If you want to get support for System.Drawing, you will need to get
- Libgdiplus.
+ Libgdiplus. This library in turn requires glib and pkg-config:
+
+ * pkg-config
+
+ Available from: http://www.freedesktop.org/Software/pkgconfig
+
+ * glib 2.4
+
+ Available from: http://www.gtk.org/
* libzlib
./autogen.sh --prefix=/usr/local
make
- c. Building the software from SVN
+ The Mono build system is silent for most compilation commands.
+ To enable a more verbose compile (for example, to pinpoint
+ problems in your makefiles or your system) pass the V=1 flag to make, like this:
+
+ make V=1
+
+
+ c. Building the software from GIT
---------------------------------
- If you are building the software from SVN, make sure that you
+ If you are building the software from GIT, make sure that you
have up-to-date mcs and mono sources:
- svn co svn+ssh://USER@mono-cvs.ximian.com/source/trunk/mono
- svn co svn+ssh://USER@mono-cvs.ximian.com/source/trunk/mcs
+ If you are an anonymous user:
+ git clone git://github.com/mono/mono.git
+
+ If you are a Mono contributors with read/write privileges:
+ git clone git@github.com:mono/mono.git
+
Then, go into the mono directory, and configure:
distribution, which contains just enough to run the 'mcs'
compiler. You do this with:
+ # Run the following line after ./autogen.sh
make get-monolite-latest
This will download and automatically gunzip and untar the
tarball, and place the files appropriately so that you can then
just run:
- make
+ make EXTERNAL_MCS=${PWD}/mcs/class/lib/monolite/gmcs.exe
- To ensure that you're using the 'monolite' distribution, you can
- also try passing EXTERNAL_MCS=false on the make command-line.
+ And that will use the files downloaded by 'make get-monolite-latest.
Testing and Installation
------------------------
make install
+ You can verify your installation by using the mono-test-install
+ script, it can diagnose some common problems with Mono's install.
+
Failure to follow these steps may result in a broken installation.
- d. Common Configuration Options
- -------------------------------
+ d. Configuration Options
+ ------------------------
The following are the configuration options that someone
building Mono might want to use:
+ --with-sgen=yes,no
+
+ Generational GC support: Used to enable or disable the
+ compilation of a Mono runtime with the SGen garbage collector.
+
+ On platforms that support it, after building Mono, you
+ will have both a mono binary and a mono-sgen binary.
+ Mono uses Boehm, while mono-sgen uses the Simple
+ Generational GC.
--with-gc=[boehm, included, sgen, none]
- Selects the garbage collector engine to use, the
- default is the "included" value.
+ Selects the default Boehm garbage collector engine to
+ use, the default is the "included" value.
included:
This is the default value, and its
Boehm GC, but we do not recommend that people
use this, as it disables a few features.
- sgen:
- The under-development Generational GC for
- Mono, do not use this in production.
-
none:
Disables the inclusion of a garbage
collector.
This value is set to `no' by default.
+ --enable-small-config=yes,no
+
+ Enable some tweaks to reduce memory usage and disk footprint at
+ the expense of some capabilities. Typically this means that the
+ number of threads that can be created is limited (256), that the
+ maxmimum heap size is also reduced (256 MB) and other such limitations
+ that still make mono useful, but more suitable to embedded devices
+ (like mobile phones).
+
+ This value is set to `no' by default.
+
--with-ikvm-native=yes,no
Controls whether the IKVM JNI interface library is
This defaults to `yes'.
- --with-preview=yes,no
+ --with-profile4=yes,no
- Whether you want to build libraries that are still not
- completed (The 2.0 APIs). It defaults to `yes'.
+ Whether you want to build the 4.x profile libraries
+ and runtime.
+
+ It defaults to `yes'.
--with-moonlight=yes,no
(1.1 and 2.0 APIs).
This will produce the `smcs' compiler which will reference
- the Silvelright modified assemblies (mscorlib.dll,
+ the Silverlight modified assemblies (mscorlib.dll,
System.dll, System.Code.dll and System.Xml.Core.dll) and turn
on the LINQ extensions for the compiler.
- This option defaults to `no' and it is considered pre-alpha.
+ --with-moon-gc=boehm,sgen
+
+ Select the GC to use for Moonlight.
+
+ boehm:
+ Selects the Boehm Garbage Collector, with the same flags
+ as the regular Mono build. This is the default.
+
+ sgen:
+ Selects the new SGen Garbage Collector, which provides
+ Generational GC support, using the same flags as the
+ mono-sgen build.
+
+ This defaults to `boehm'.
--with-libgdiplus=installed,sibling,<path>
Disables support for the Ahead of Time
compilation.
- profiler:
- Disables support for the default profiler.
+ attach:
+ Support for the Mono.Management assembly and the
+ VMAttach API (allowing code to be injected into
+ a target VM)
+
+ com:
+ Disables COM support.
+
+ debug:
+ Drop debugging support.
decimal:
Disables support for System.Decimal.
+ full_messages:
+ By default Mono comes with a full table
+ of messages for error codes. This feature
+ turns off uncommon error messages and reduces
+ the runtime size.
+
+ generics:
+ Generics support. Disabling this will not
+ allow Mono to run any 2.0 libraries or
+ code that contains generics.
+
+ jit:
+ Removes the JIT engine from the build, this reduces
+ the executable size, and requires that all code
+ executed by the virtual machine be compiled with
+ Full AOT before execution.
+
+ large_code:
+ Disables support for large assemblies.
+
+ logging:
+ Disables support for debug logging.
+
pinvoke:
Support for Platform Invocation services,
disabling this will drop support for any
libraries using DllImport.
- debug:
- Drop debugging support.
+ portability:
+ Removes support for MONO_IOMAP, the environment
+ variables for simplifying porting applications that
+ are case-insensitive and that mix the Unix and Windows path separators.
+
+ profiler:
+ Disables support for the default profiler.
reflection_emit:
Drop System.Reflection.Emit support
- large_code:
- Disables support for large assemblies.
+ reflection_emit_save:
+ Drop support for saving dynamically created
+ assemblies (AssemblyBuilderAccess.Save) in
+ System.Reflection.Emit.
- logging:
- Disables support for debug logging.
+ shadow_copy:
+ Disables support for AppDomain's shadow copies
+ (you can disable this if you do not plan on
+ using appdomains).
- com:
- Disables COM support.
+ simd:
+ Disables support for the Mono.SIMD intrinsics
+ library.
ssa:
Disables compilation for the SSA optimization
framework, and the various SSA-based
optimizations.
- generics:
- Generics support. Disabling this will not
- allow Mono to run any 2.0 libraries or
- code that contains generics.
+ --enable-llvm
+ --enable-loadedllvm
- jit:
- Removes the JIT engine from the build, this reduces
- the executable size, and requires that all code
- executed by the virtual machine be compiled with
- Full AOT before execution.
+ This enables the use of LLVM as a code generation engine
+ for Mono. The LLVM code generator and optimizer will be
+ used instead of Mono's built-in code generator for both
+ Just in Time and Ahead of Time compilations.
+
+ See the http://www.mono-project.com/Mono_LLVM for the
+ full details and up-to-date information on this feature.
+
+ You will need to have an LLVM built that Mono can link
+ against,
+
+ The --enable-loadedllvm variant will make the llvm backend
+ into a runtime-loadable module instead of linking it directly
+ into the main mono binary.
--enable-big-arrays
There are a number of runtime options to control this
also, see the man page.
+ --enable-nacl
+
+ This configures the Mono compiler to generate code
+ suitable to be used by Google's Native Client:
+
+ http://code.google.com/p/nativeclient/
+
+ Currently this is used with Mono's AOT engine as
+ Native Client does not support JIT engines yet.
2. Using Mono
=============
independent checkout) from the Mono module, that
directory is automatically configured to share the
same prefix than this module gets.
+
+
+4. Git submodules maintenance
+=============================
+
+Read documentation at http://mono-project.com/Git_Submodule_Maintenance