myabc / mono

Mirror of main Mono project in Mono Subversion Repository

This URL has Read+Write access

zoltan (author)
Mon Jun 29 15:53:45 -0700 2009
commit  70ae0013822fa2d3ed7b8c89abcb958491986539
tree    d68cee7590a4fec04c7ecbb33a40b43080b19829
parent  4f9c46af359a70352c137b88c168b26290ba1474
mono /
name age message
file .gitignore Sat Feb 28 06:36:50 -0800 2009 Create .gitignore's. git-svn-id: svn://anonsvn... [martin]
file AUTHORS Tue Feb 12 05:09:32 -0800 2002 Add Dietmar to Authors git-svn-id: svn://anon... [miguel]
file CMakeLists.txt Mon Jun 15 02:38:18 -0700 2009 2009-06-15 Zoltan Varga <vargaz@gmail.com> ... [zoltan]
file COPYING.LIB Tue Feb 19 12:47:47 -0800 2002 Ugh, I had the GPL here, its the LGPL git-svn... [miguel]
file ChangeLog Sat Jun 20 15:19:09 -0700 2009 2009-06-21 Zoltan Varga <vargaz@gmail.com> ... [zoltan]
file LICENSE Thu Jan 29 06:51:39 -0800 2009 Clarified details regarding non-LGPL use to spe... [jhill]
file Makefile.am Sun May 24 09:59:34 -0700 2009 Forgot this git-svn-id: svn://anonsvn.mono-pro... [miguel]
file NEWS Fri Oct 07 14:26:01 -0700 2005 Update git-svn-id: svn://anonsvn.mono-project.... [miguel]
file README Sat May 09 12:21:28 -0700 2009 Document git-svn-id: svn://anonsvn.mono-projec... [miguel]
file README.vsnet Thu Aug 31 07:11:47 -0700 2006 2006-08-31 Zoltan Varga <vargaz@freemail.hu> ... [zoltan]
file acinclude.m4 Thu May 21 18:02:37 -0700 2009 2009-05-22 Zoltan Varga <vargaz@gmail.com> ... [zoltan]
file autogen.sh Tue Sep 16 12:25:13 -0700 2008 * Makefile.am (EXTRA_DIST): Update. * nls.m4, p... [raja]
file build-mingw32.sh Tue Aug 05 05:13:51 -0700 2008 2008-08-05 Marek Habersack <mhabersack@novell... [mhabersack]
file configure.in Sat Jun 20 15:19:09 -0700 2009 2009-06-21 Zoltan Varga <vargaz@gmail.com> ... [zoltan]
directory data/ Thu Jun 18 13:32:55 -0700 2009 new section in town git-svn-id: svn://anonsvn.... [gonzalo]
directory docs/ Fri Apr 24 15:38:55 -0700 2009 Without this I am unable to install git-svn-id... [miguel]
directory eglib/ Sat Jun 20 06:04:50 -0700 2009 2009-06-20 Zoltan Varga <vargaz@gmail.com> ... [zoltan]
directory ikvm-native/ Sat May 23 18:25:53 -0700 2009 2009-05-24 Zoltan Varga <vargaz@gmail.com> ... [zoltan]
directory libgc/ Mon Jun 22 15:40:05 -0700 2009 Define a no-op memory barrier for s390(x) git... [neale]
directory man/ Fri Jun 12 05:42:17 -0700 2009 2009-06-12 Jb Evain <jbevain@novell.com> * ... [jbevain]
file mkinstalldirs Mon Sep 15 12:54:13 -0700 2008 Add mkinstalldirs git-svn-id: svn://anonsvn.mo... [miguel]
file mono-uninstalled.pc.in Thu Feb 01 03:33:31 -0800 2007 Thu Feb 1 12:29:23 CET 2007 Paolo Molaro <lupus... [lupus]
file mono-win32-setup-light.bmp Mon Aug 18 09:45:22 -0700 2003 add windows distribition scripts git-svn-id: ... [johannes]
directory mono/ Mon Jun 29 15:53:45 -0700 2009 2009-06-30 Zoltan Varga <vargaz@gmail.com> ... [zoltan]
file monowiz.win32.nsi Thu May 27 06:04:43 -0700 2004 * monowiz.win32.nsi: normalized line-endings t... [gert]
directory msvc/ Wed May 13 07:09:35 -0700 2009 Add initial solution generation support. This g... [joncham]
directory msvc05/ Mon May 04 14:03:01 -0700 2009 2009-05-04 Bill Holmes <billholmes54@gmail.co... [holmes]
file nls.m4 Tue Sep 16 12:25:13 -0700 2008 * Makefile.am (EXTRA_DIST): Update. * nls.m4, p... [raja]
directory notes/ Sun Jul 01 22:04:06 -0700 2001 Doc Doc git-svn-id: svn://anonsvn.mono-projec... [miguel]
file po.m4 Mon Sep 15 14:04:28 -0700 2008 Add in non-symlink form git-svn-id: svn://anon... [miguel]
directory po/ Sat Feb 28 06:37:10 -0800 2009 Add .gitignore. git-svn-id: svn://anonsvn.mono... [martin]
file progtest.m4 Tue Sep 16 12:25:13 -0700 2008 * Makefile.am (EXTRA_DIST): Update. * nls.m4, p... [raja]
directory runtime/ Wed Jun 10 11:36:12 -0700 2009 2009-06-10 Marek Safar <marek.safar@gmail.com... [marek]
directory samples/ Sun Jun 14 08:31:54 -0700 2009 2009-06-14 Zoltan Varga <vargaz@gmail.com> ... [zoltan]
directory scripts/ Sun Jun 14 10:02:28 -0700 2009 2009-06-14 Zoltan Varga <vargaz@gmail.com> ... [zoltan]
directory support/ Sat May 23 18:25:53 -0700 2009 2009-05-24 Zoltan Varga <vargaz@gmail.com> ... [zoltan]
directory tools/ Tue May 19 23:55:48 -0700 2009 2009-05-20 Atsushi Enomoto <atsushi@ximian.co... [atsushi]
directory web/ Sat Feb 28 06:36:50 -0800 2009 Create .gitignore's. git-svn-id: svn://anonsvn... [martin]
file winconfig.h Tue Feb 03 16:42:13 -0800 2009 2009-02-03 Miguel de Icaza <miguel@novell.com... [miguel]
README
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

  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 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

  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-profile2=yes,no

    Whether you want to build the 2.x libraries (support
    for Generics and the 2.0/3.5 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 Silverlight modified assemblies (mscorlib.dll,
    System.dll, System.Code.dll and System.Xml.Core.dll) and turn
      on the LINQ extensions for the compiler.

  --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.

    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.

    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

    reflection_emit_save:
      Drop support for saving dynamically created
      assemblies (AssemblyBuilderAccess.Save) in
      System.Reflection.Emit.

    shadow_copy:
      Disables support for AppDomain's shadow copies
      (you can disable this if you do not plan on 
      using appdomains).

    simd:
      Disables support for the Mono.SIMD intrinsics
      library.

    ssa:
      Disables compilation for the SSA optimization
      framework, and the various SSA-based
        optimizations.

  --enable-big-arrays

    This enables the use arrays whose indexes are larger
    than Int32.MaxValue.   

    By default Mono has the same limitation as .NET on
    Win32 and Win64 and limits array indexes to 32-bit
    values (even on 64-bit systems).

    In certain scenarios where large arrays are required,
    you can pass this flag and Mono will be built to
    support 64-bit arrays.

    This is not the default as it breaks the C embedding
    ABI that we have exposed through the Mono development
    cycle.

  --enable-parallel-mark

    Use this option to enable the garbage collector to use
    multiple CPUs to do its work.  This helps performance
    on multi-CPU machines as the work is divided across CPUS.

    This option is not currently the default as we have
    not done much testing with Mono.

  --enable-dtrace

    On Solaris and MacOS X builds a version of the Mono
    runtime that contains DTrace probes and can
    participate in the system profiling using DTrace.


  --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.