8 1. Compilation and Installation
9 ===============================
14 To build Mono, you will need the following components:
18 Available from: http://www.freedesktop.org/Software/pkgconfig
22 Available from: http://www.gtk.org/
24 On Itanium, you must obtain libunwind:
26 http://www.hpl.hp.com/research/linux/libunwind/download.php4
28 On Solaris, make sure that you used GNU tar to unpack this package, as
29 Solaris tar will not unpack this correctly, and you will get strange errors.
31 On Solaris, make sure that you use the GNU toolchain to build the software.
33 Optional dependencies:
37 If you want to get support for System.Drawing, you will need to get
42 This library and the development headers are required for compression
43 file support in the 2.0 profile.
45 b. Building the Software
46 ------------------------
48 If you obtained this package as an officially released tarball,
49 this is very simple, use configure and make:
51 ./configure --prefix=/usr/local
55 Mono supports a JIT engine on x86, SPARC, SPARCv9, S/390,
56 S/390x, AMD64, ARM and PowerPC systems.
58 If you obtained this as a snapshot, you will need an existing
59 Mono installation. To upgrade your installation, unpack both
62 tar xzf mcs-XXXX.tar.gz
63 tar xzf mono-XXXX.tar.gz
67 ./autogen.sh --prefix=/usr/local
70 c. Building the software from SVN
71 ---------------------------------
73 If you are building the software from SVN, make sure that you
74 have up-to-date mcs and mono sources:
76 svn co svn+ssh://USER@mono-cvs.ximian.com/source/trunk/mono
77 svn co svn+ssh://USER@mono-cvs.ximian.com/source/trunk/mcs
79 Then, go into the mono directory, and configure:
82 ./autogen.sh --prefix=/usr/local
85 For people with non-standard installations of the auto* utils and of
86 pkg-config (common on misconfigured OSX and windows boxes), you could get
89 ./configure: line 19176: syntax error near unexpected token `PKG_CHECK_MODULES(BASE_DEPENDENCIES,' ...
91 This means that you need to set the ACLOCAL_FLAGS environment var
92 when invoking autogen.sh, like this:
94 ACLOCAL_FLAGS="-I $acprefix/share/aclocal" ./autogen.sh --prefix=/usr/loca
96 where $acprefix is the prefix where aclocal has been installed.
98 This will automatically go into the mcs/ tree and build the
101 This assumes that you have a working mono installation, and that
102 there's a C# compiler named 'mcs', and a corresponding IL
103 runtime called 'mono'. You can use two make variables
104 EXTERNAL_MCS and EXTERNAL_RUNTIME to override these. e.g., you
107 make EXTERNAL_MCS=/foo/bar/mcs EXTERNAL_RUNTIME=/somewhere/else/mono
109 If you don't have a working Mono installation
110 ---------------------------------------------
112 If you don't have a working Mono installation, an obvious choice
113 is to install the latest released packages of 'mono' for your
114 distribution and running autogen.sh; make; make install in the
115 mono module directory.
117 You can also try a slightly more risky approach: this may not work,
118 so start from the released tarball as detailed above.
120 This works by first getting the latest version of the 'monolite'
121 distribution, which contains just enough to run the 'mcs'
122 compiler. You do this with:
124 make get-monolite-latest
126 This will download and automatically gunzip and untar the
127 tarball, and place the files appropriately so that you can then
132 To ensure that you're using the 'monolite' distribution, you can
133 also try passing EXTERNAL_MCS=false on the make command-line.
135 Testing and Installation
136 ------------------------
138 You can run (part of) the mono and mcs testsuites with the command:
142 All tests should pass.
144 If you want more extensive tests, including those that test the
145 class libraries, you need to re-run 'configure' with the
146 '--enable-nunit-tests' flag, and try
150 Expect to find a few testsuite failures. As a sanity check, you
151 can compare the failures you got with
153 http://go-mono.com/tests/displayTestResults.php
155 You can now install mono with:
159 Failure to follow these steps may result in a broken installation.
161 d. Common Configuration Options
162 -------------------------------
164 The following are the configuration options that someone
165 building Mono might want to use:
168 --with-gc=[boehm, included, sgen, none]
170 Selects the garbage collector engine to use, the
171 default is the "included" value.
174 This is the default value, and its
175 the most feature complete, it will allow Mono
176 to use typed allocations and support the
179 It is essentially a slightly modified Boehm GC
182 This is used to use a system-install Boehm GC,
183 it is useful to test new features available in
184 Boehm GC, but we do not recommend that people
185 use this, as it disables a few features.
188 The under-development Generational GC for
189 Mono, do not use this in production.
192 Disables the inclusion of a garbage
195 --with-tls=__thread,pthread
197 Controls how Mono should access thread local storage,
198 pthread forces Mono to use the pthread APIs, while
199 __thread uses compiler-optimized access to it.
201 Although __thread is faster, it requires support from
202 the compiler, kernel and libc. Old Linux systems do
203 not support with __thread.
205 This value is typically pre-configured and there is no
206 need to set it, unless you are trying to debug a
209 --with-sigaltstack=yes,no
211 Experimental: Use at your own risk, it is known to
212 cause problems with garbage collection and is hard to
213 reproduce those bugs.
215 This controls whether Mono will install a special
216 signal handler to handle stack overflows. If set to
217 "yes", it will turn stack overflows into the
218 StackOverflowException. Otherwise when a stack
219 overflow happens, your program will receive a
222 The configure script will try to detect if your
223 operating system supports this. Some older Linux
224 systems do not support this feature, or you might want
225 to override the auto-detection.
227 --with-static_mono=yes,no
229 This controls whether `mono' should link against a
230 static library (libmono.a) or a shared library
233 This defaults to yes, and will improve the performance
234 of the `mono' program.
236 This only affects the `mono' binary, the shared
237 library libmono.so will always be produced for
238 developers that want to embed the runtime in their
241 --with-xen-opt=yes,no
243 The default value for this is `yes', and it makes Mono
244 generate code which might be slightly slower on
245 average systems, but the resulting executable will run
246 faster under the Xen virtualization system.
248 --with-large-heap=yes,no
250 Enable support for GC heaps larger than 3GB.
252 This value is set to `no' by default.
254 --with-ikvm-native=yes,no
256 Controls whether the IKVM JNI interface library is
257 built or not. This is used if you are planning on
258 using the IKVM Java Virtual machine with Mono.
260 This defaults to `yes'.
262 --with-preview=yes,no
264 Whether you want to build libraries that are still not
265 completed (The 2.0 APIs). It defaults to `yes'.
267 --with-moonlight=yes,no
269 Whether you want to generate the Silverlight/Moonlight
270 libraries and toolchain in addition to the default
273 This will produce the `smcs' compiler which will reference
274 the Silvelright modified assemblies (mscorlib.dll,
275 System.dll, System.Code.dll and System.Xml.Core.dll) and turn
276 on the LINQ extensions for the compiler.
278 This option defaults to `no' and it is considered pre-alpha.
280 --with-libgdiplus=installed,sibling,<path>
282 This is used to configure where should Mono look for
283 libgdiplus when running the System.Drawing tests.
285 It defaults to `installed', which means that the
286 library is available to Mono through the regular
289 `sibling' can be used to specify that a libgdiplus
290 that resides as a sibling of this directory (mono)
293 Or you can specify a path to a libgdiplus.
295 --disable-shared-memory
297 Use this option to disable the use of shared memory in
298 Mono (this is equivalent to setting the MONO_DISABLE_SHM
299 environment variable, although this removes the feature
302 Disabling the shared memory support will disable certain
303 features like cross-process named mutexes.
305 --enable-minimal=LIST
307 Use this feature to specify optional runtime
308 components that you might not want to include. This
309 is only useful for developers embedding Mono that
310 require a subset of Mono functionality.
312 The list is a comma-separated list of components that
313 should be removed, these are:
316 Disables support for the Ahead of Time
320 Disables support for the default profiler.
323 Disables support for System.Decimal.
326 Support for Platform Invocation services,
327 disabling this will drop support for any
328 libraries using DllImport.
331 Drop debugging support.
334 Drop System.Reflection.Emit support
337 Disables support for large assemblies.
340 Disables support for debug logging.
343 Disables COM support.
346 Disables compilation for the SSA optimization
347 framework, and the various SSA-based
351 Generics support. Disabling this will not
352 allow Mono to run any 2.0 libraries or
353 code that contains generics.
357 This enables the use arrays whose indexes are larger
360 By default Mono has the same limitation as .NET on
361 Win32 and Win64 and limits array indexes to 32-bit
362 values (even on 64-bit systems).
364 In certain scenarios where large arrays are required,
365 you can pass this flag and Mono will be built to
366 support 64-bit arrays.
368 This is not the default as it breaks the C embedding
369 ABI that we have exposed through the Mono development
372 --enable-parallel-mark
374 Use this option to enable the garbage collector to use
375 multiple CPUs to do its work. This helps performance
376 on multi-CPU machines as the work is divided across CPUS.
378 This option is not currently the default as we have
379 not done much testing with Mono.
383 On Solaris and MacOS X builds a version of the Mono
384 runtime that contains DTrace probes and can
385 participate in the system profiling using DTrace.
390 Mono uses /dev/random to obtain good random data for
391 any source that requires random numbers. If your
392 system does not support this, you might want to
395 There are a number of runtime options to control this
396 also, see the man page.
402 Once you have installed the software, you can run a few programs:
416 See the man pages for mono(1), mint(1), monodis(1) and mcs(2)
423 Technical documents about the Mono runtime.
426 Configuration files installed as part of the Mono runtime.
429 The core of the Mono Runtime.
432 The object system and metadata reader.
435 The Just in Time Compiler.
438 CIL executable Disassembler
441 Common code for the JIT and the interpreter.
444 The I/O layer and system abstraction for
445 emulating the .NET IO model.
448 Common Intermediate Representation, XML
449 definition of the CIL bytecodes.
452 Interpreter for CLI executables (obsolete).
455 Architecture specific portions.
459 Manual pages for the various Mono commands and programs.
463 Some simple sample programs on uses of the Mono
464 runtime as an embedded library.
468 Scripts used to invoke Mono and the corresponding program.
472 A directory that contains the Makefiles that link the
473 mono/ and mcs/ build systems.
477 If the directory ../olive is present (as an
478 independent checkout) from the Mono module, that
479 directory is automatically configured to share the
480 same prefix than this module gets.