This is Mono.
-1. Installation
-2. Using Mono
-3. Directory Roadmap
+ 1. Installation
+ 2. Using Mono
+ 3. Directory Roadmap
1. Compilation and Installation
===============================
Available from: http://www.freedesktop.org/Software/pkgconfig
- * glib 2.0
+ * glib 2.4
Available from: http://www.gtk.org/
- Optional dependencies:
+ On Itanium, you must obtain libunwind:
- * ICU library
+ http://www.hpl.hp.com/research/linux/libunwind/download.php4
- http://oss.software.ibm.com/icu/index.html
+ On Solaris, make sure that you used GNU tar to unpack this package, as
+ Solaris tar will not unpack this correctly, and you will get strange errors.
- You will need this one to get complete support for the international
- features of the .NET Framework.
+ On Solaris, make sure that you use the GNU toolchain to build the software.
+
+ Optional dependencies:
- * Cairo and libgdiplus
+ * libgdiplus
If you want to get support for System.Drawing, you will need to get
- both Libgdiplus and Cairo.
+ Libgdiplus.
+
+ * libzlib
+
+ This library and the development headers are required for compression
+ file support in the 2.0 profile.
b. Building the Software
------------------------
make
make install
- Mono supports a JIT engine on x86, SPARC and PowerPC systems.
- The various commands that ship with Mono default to the JIT engine
- on x86 and SPARC, to turn it on for PPC systems, use the --with-jit=yes
- command line option to configure.
-
- MacOS X Users: you will need to download the latest Boehm GC
- Alpha release for garbage collection to work properly.
+ Mono supports a JIT engine on x86, SPARC, SPARCv9, S/390, AMD64, ARM
+ and PowerPC systems.
If you obtained this as a snapshot, you will need an existing
Mono installation. To upgrade your installation, unpack both
mv mcs-XXX mcs
cd mono
./autogen.sh --prefix=/usr/local
- make bootstrap
+ make
- c. Building the software from CVS
+ c. Building the software from SVN
---------------------------------
- If you are building the software from CVS, make sure that you
+ If you are building the software from SVN, make sure that you
have up-to-date mcs and mono sources:
- cvs co mono mcs
+ svn co svn+ssh://USER@mono-cvs.ximian.com/source/trunk/mono
+ svn co svn+ssh://USER@mono-cvs.ximian.com/source/trunk/mcs
Then, go into the mono directory, and configure:
cd mono
./autogen.sh --prefix=/usr/local
+ make
- Depending on whether you have an existing Mono installation or
- not, you can try the following:
-
- i. If you have an existing Mono installation
- -----------------------------------------
-
- First verify that you have a working installation:
-
- echo 'class X { static void Main () { System.Console.Write("OK");}}' > x.cs
-
- Compile:
-
- mcs x.cs
-
- And run:
-
- mono x.exe
+ For people with non-standard installations of the auto* utils and of
+ pkg-config (common on misconfigured OSX and windows boxes), you could get
+ an error like this:
- If you get the output `OK' and no errors, and you have mono
- version 0.31 or later, continue. Otherwise, you can try option
- (ii) below.
+ ./configure: line 19176: syntax error near unexpected token `PKG_CHECK_MODULES(BASE_DEPENDENCIES,' ...
- You are ready to start your CVS upgrade. Compile with
+ This means that you need to set the ACLOCAL_FLAGS environment var
+ when invoking autogen.sh, like this:
- make bootstrap
+ ACLOCAL_FLAGS="-I $acprefix/share/aclocal" ./autogen.sh --prefix=/usr/loca
+
+ where $acprefix is the prefix where aclocal has been installed.
This will automatically go into the mcs/ tree and build the
- binaries there, and copy them into the appropriate
- sub-directories of mono/runtime/.
+ binaries there.
- Now, go to step (iii) below.
+ This assumes that you have a working mono installation, and that
+ there's a C# compiler named 'mcs', and a corresponding IL
+ runtime called 'mono'. You can use two make variables
+ EXTERNAL_MCS and EXTERNAL_RUNTIME to override these. e.g., you
+ can say
- ii. If you don't have a working Mono installation
- ---------------------------------------------
+ make EXTERNAL_MCS=/foo/bar/mcs EXTERNAL_RUNTIME=/somewhere/else/mono
+
+ If you don't have a working Mono installation
+ ---------------------------------------------
If you don't have a working Mono installation, an obvious choice
is to install the latest released packages of 'mono' for your
- distribution and go back to step (i).
+ distribution and running autogen.sh; make; make install in the
+ mono module directory.
- You can also try a slightly more risky approach that should work
- almost all the time.
+ You can also try a slightly more risky approach: this may not work,
+ so start from the released tarball as detailed above.
This works by first getting the latest version of the 'monolite'
distribution, which contains just enough to run the 'mcs'
- compiler. You do this by
+ compiler. You do this with:
make get-monolite-latest
- This should place a monolite-latest.tar.gz in the parent
- directory of the 'mono' source tree. You can then run:
+ This will download and automatically gunzip and untar the
+ tarball, and place the files appropriately so that you can then
+ just run:
- make monolite-bootstrap
+ make
+
+ To ensure that you're using the 'monolite' distribution, you can
+ also try passing EXTERNAL_MCS=false on the make command-line.
+
+ Testing and Installation
+ ------------------------
+
+ You can run (part of) the mono and mcs testsuites with the command:
- This will automatically gunzip and untar the tarball, place the
- files appropriately, and then complete the bootstrap.
+ make check
- iii. Testing and Installation
- ------------------------
+ All tests should pass.
- You can run the mono and mcs testsuites with the command:
+ If you want more extensive tests, including those that test the
+ class libraries, you need to re-run 'configure' with the
+ '--enable-nunit-tests' flag, and try
- make -k bootstrap-check
+ make -k check
- Expect to find several testsuite failures, especially in the
- mcs/ tree. As a sanity check, you can compare the failures you
- got with
+ Expect to find a few testsuite failures. As a sanity check, you
+ can compare the failures you got with
http://go-mono.com/tests/displayTestResults.php
- You can now install it:
+ You can now install mono with:
make install
- Failure to follow these steps will result in a broken installation.
+ Failure to follow these steps may result in a broken installation.
+
+ d. Common Configuration Options
+ -------------------------------
+
+ The following are the configuration options that someone
+ building Mono might want to use:
+
+
+ --with-gc=[boehm, included, sgen, none]
+
+ Selects the garbage collector engine to use, the
+ default is the "included" value.
+
+ included:
+ This is the default value, and its
+ the most feature complete, it will allow Mono
+ to use typed allocations and support the
+ debugger.
+
+ It is essentially a slightly modified Boehm GC
+
+ boehm:
+ This is used to use a system-install Boehm GC,
+ it is useful to test new features available in
+ 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.
+
+ --with-tls=__thread,pthread
+
+ Controls how Mono should access thread local storage,
+ pthread forces Mono to use the pthread APIs, while
+ __thread uses compiler-optimized access to it.
+
+ Although __thread is faster, it requires support from
+ the compiler, kernel and libc. Old Linux systems do
+ not support with __thread.
+
+ This value is typically pre-configured and there is no
+ need to set it, unless you are trying to debug a
+ problem.
- iv. Other useful "bootstrap"-like facilities
- ----------------------------------------
+ --with-sigaltstack=yes,no
- If you have a CVS snapshot that you keep updating periodically,
- and/or do your development in, you may try using a couple of
- specialty make targets that may be slightly faster than a
- "make bootstrap".
+ This controls whether Mono will install a special
+ signal handler to handle stack overflows. If set to
+ "yes", it will turn stack overflows into the
+ StackOverflowException. Otherwise when a stack
+ overflow happens, your program will receive a
+ segmentation fault.
- You can try a two-stage bootstrap with:
+ The configure script will try to detect if your
+ operating system supports this. Some older Linux
+ systems do not support this feature, or you might want
+ to override the auto-detection.
- make faststrap
+ --with-static-mono=yes,no
- This assumes that you have already run a "make bootstrap" on the
- tree before.
+ This controls whether `mono' should link against a
+ static library (libmono.a) or a shared library
+ (libmono.so).
- If you want to avoid waiting even for that, you can try the
- riskier one-stage build:
+ This defaults to yes, and will improve the performance
+ of the `mono' program.
- make fasterstrap
+ This only affects the `mono' binary, the shared
+ library libmono.so will always be produced for
+ developers that want to embed the runtime in their
+ application.
+
+ --with-xen-opt=yes,no
+
+ The default value for this is `yes', and it makes Mono
+ generate code which might be slightly slower on
+ average systems, but the resulting executable will run
+ faster under the Xen virtualization system.
+
+ --with-large-heap=yes,no
+
+ Enable support for GC heaps larger than 3GB.
+
+ This value is set to `no' by default.
+
+ --with-ikvm-native=yes,no
+
+ Controls whether the IKVM JNI interface library is
+ built or not. This is used if you are planning on
+ using the IKVM Java Virtual machine with Mono.
+
+ This defaults to `yes'.
+
+ --with-preview=yes,no
+
+ Whether you want to build libraries that are still not
+ completed (The 2.0 APIs). It defaults to `yes'.
+
+ --with-libgdiplus=installed,sibling,<path>
+
+ This is used to configure where should Mono look for
+ libgdiplus when running the System.Drawing tests.
+
+ It defaults to `installed', which means that the
+ library is available to Mono through the regular
+ system setup.
+
+ `sibling' can be used to specify that a libgdiplus
+ that resides as a sibling of this directory (mono)
+ should be used.
+
+ Or you can specify a path to a libgdiplus.
+
+ --enable-minimal=LIST
+
+ Use this feature to specify optional runtime
+ components that you might not want to include. This
+ is only useful for developers embedding Mono that
+ require a subset of Mono functionality.
+
+ The list is a comma-separated list of components that
+ should be removed, these are:
+
+ aot:
+ Disables support for the Ahead of Time
+ compilation.
+
+ profiler:
+ Disables support for the default profiler.
+
+ decimal:
+ Disables support for System.Decimal.
+
+ pinvoke:
+ Support for Platform Invocation services,
+ disabling this will drop support for any
+ libraries using DllImport.
+
+ debug:
+ Drop debugging support.
+
+ reflection_emit:
+ Drop System.Reflection.Emit support
+
+ large_code:
+ Disables support for large assemblies.
+
+ logging:
+ Disables support for debug logging.
+
+ com:
+ Disables COM support.
+
+ 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.
+
+ --disable-dev-random
+
+ Mono uses /dev/random to obtain good random data for
+ any source that requires random numbers. If your
+ system does not support this, you might want to
+ disable it.
+
+ There are a number of runtime options to control this
+ also, see the man page.
- This should be attempted only if you're sure that the sources of
- the mcs compiler itself and the sources of the libraries used by
- it have not been changed.
2. Using Mono
=============
* runtime engine
mono program.exe
- or
- mint program.exe
* C# compiler
3. Directory Roadmap
====================
- doc/
- Contains the web site contents.
-
docs/
Technical documents about the Mono runtime.
metadata/
The object system and metadata reader.
- jit/
+ mini/
The Just in Time Compiler.
dis/
definition of the CIL bytecodes.
interp/
- Interpreter for CLI executables.
+ Interpreter for CLI executables (obsolete).
arch/
Architecture specific portions.
runtime/
- A directory holding a pre-compiled version of the Mono
- runtime.
-
+ A directory that contains the Makefiles that link the
+ mono/ and mcs/ build systems.