| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447 |
- This is Mono.
- 1. Installation
- 2. Using Mono
- 3. Directory Roadmap
- 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
- 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.
- On Solaris, make sure that you use the GNU toolchain to build the software.
- Optional dependencies:
- * libgdiplus
- If you want to get support for System.Drawing, you will need to get
- Libgdiplus.
- * libzlib
- This library and the development headers are required for compression
- file support in the 2.0 profile.
- b. Building the Software
- ------------------------
-
- If you obtained this package as an officially released tarball,
- this is very simple, use configure and make:
- ./configure --prefix=/usr/local
- make
- make install
- Mono supports a JIT engine on x86, SPARC, SPARCv9, S/390,
- S/390x, 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
- mono and mcs:
- tar xzf mcs-XXXX.tar.gz
- tar xzf mono-XXXX.tar.gz
- mv mono-XXX mono
- mv mcs-XXX mcs
- cd mono
- ./autogen.sh --prefix=/usr/local
- make
- c. Building the software from SVN
- ---------------------------------
- If you are building the software from SVN, make sure that you
- have up-to-date mcs and mono sources:
- svn co svn+ssh://[email protected]/source/trunk/mono
- svn co svn+ssh://[email protected]/source/trunk/mcs
- Then, go into the mono directory, and configure:
- cd mono
- ./autogen.sh --prefix=/usr/local
- make
- 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:
- ./configure: line 19176: syntax error near unexpected token `PKG_CHECK_MODULES(BASE_DEPENDENCIES,' ...
- This means that you need to set the ACLOCAL_FLAGS environment var
- when invoking autogen.sh, like this:
- 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.
- 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
- 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 running autogen.sh; make; make install in the
- mono module directory.
- 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 with:
- 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
- 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:
- make check
- All tests should pass.
- 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 check
- 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 mono with:
- make install
- 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.
- --with-sigaltstack=yes,no
- Experimental: Use at your own risk, it is known to
- cause problems with garbage collection and is hard to
- reproduce those bugs.
- 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.
- 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.
- --with-static-mono=yes,no
- This controls whether `mono' should link against a
- static library (libmono.a) or a shared library
- (libmono.so).
- This defaults to yes, and will improve the performance
- of the `mono' program.
- 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-moonlight=yes,no
- Whether you want to generate the Silverlight/Moonlight
- libraries and toolchain in addition to the default
- (1.1 and 2.0 APIs).
- This will produce the `smcs' compiler which will reference
- the Silvelright 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-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.
- --disable-shared-memory
- Use this option to disable the use of shared memory in
- Mono (this is equivalent to setting the MONO_DISABLE_SHM
- environment variable, although this removes the feature
- completely).
- Disabling the shared memory support will disable certain
- features like cross-process named mutexes.
- --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.
- 2. Using Mono
- =============
- Once you have installed the software, you can run a few programs:
- * runtime engine
- mono program.exe
- * C# compiler
- mcs program.cs
- * CIL Disassembler
- monodis program.exe
- See the man pages for mono(1), mint(1), monodis(1) and mcs(2)
- for further details.
- 3. Directory Roadmap
- ====================
- docs/
- Technical documents about the Mono runtime.
- data/
- Configuration files installed as part of the Mono runtime.
- mono/
- The core of the Mono Runtime.
- metadata/
- The object system and metadata reader.
- mini/
- The Just in Time Compiler.
- dis/
- CIL executable Disassembler
- cli/
- Common code for the JIT and the interpreter.
- io-layer/
- The I/O layer and system abstraction for
- emulating the .NET IO model.
- cil/
- Common Intermediate Representation, XML
- definition of the CIL bytecodes.
- interp/
- Interpreter for CLI executables (obsolete).
- arch/
- Architecture specific portions.
- man/
- Manual pages for the various Mono commands and programs.
- samples/
- Some simple sample programs on uses of the Mono
- runtime as an embedded library.
- scripts/
- Scripts used to invoke Mono and the corresponding program.
- runtime/
- A directory that contains the Makefiles that link the
- mono/ and mcs/ build systems.
- ../olive/
- If the directory ../olive is present (as an
- independent checkout) from the Mono module, that
- directory is automatically configured to share the
- same prefix than this module gets.
|