2006-09-22 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / README
diff --git a/README b/README
index c2875ca2e164e0cab9c6c637456694995983d738..1cc99950c1cd2d1ee26dc93272760d25bfc8498c 100644 (file)
--- a/README
+++ b/README
@@ -1,13 +1,50 @@
 
 This is Mono.
 
-1. Installation
-2. Using Mono
-3. Directory Roadmap
+       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:
 
@@ -15,11 +52,276 @@ This is Mono.
                make
                make install
 
+       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 do:
+       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 fullbuild
+               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://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
+
+       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
+
+               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-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.
+
 
 2. Using Mono
 =============
@@ -29,8 +331,6 @@ This is Mono.
        * runtime engine
 
                mono program.exe
-         or
-               mint program.exe
 
        * C# compiler
 
@@ -46,8 +346,11 @@ This is Mono.
 3. Directory Roadmap
 ====================
 
-       doc/
-               Contains documentation and the web site contents.
+       docs/
+               Technical documents about the Mono runtime.
+
+       data/
+               Configuration files installed as part of the Mono runtime.
 
        mono/
                The core of the Mono Runtime.
@@ -55,7 +358,7 @@ This is Mono.
                metadata/
                        The object system and metadata reader.
 
-               jit/
+               mini/
                        The Just in Time Compiler.
 
                dis/
@@ -73,9 +376,21 @@ This is Mono.
                        definition of the CIL bytecodes.
 
                interp/
-                       Interpreter for CLI executables.
+                       Interpreter for CLI executables (obsolete).
 
                arch/
                        Architecture specific portions.
 
+       man/
+
+               Manual pages for the various Mono commands and programs.
+
+       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.