move to mono
authorJb Evain <jbevain@gmail.com>
Tue, 17 Jul 2007 16:14:19 +0000 (16:14 -0000)
committerJb Evain <jbevain@gmail.com>
Tue, 17 Jul 2007 16:14:19 +0000 (16:14 -0000)
svn path=/trunk/mono/; revision=82113

man/monolinker.1 [new file with mode: 0644]

diff --git a/man/monolinker.1 b/man/monolinker.1
new file mode 100644 (file)
index 0000000..25286ad
--- /dev/null
@@ -0,0 +1,190 @@
+.\"
+.\" The Mono Linker manual page.
+.\"
+.\" Author:
+.\"    Jb Evain  <jbevain@novell.com>
+.\"
+.\" Copyright (C) 2007 Novell, Inc (http://www.novell.com)
+.\"
+
+.de Sp
+.if t .sp .5v
+.if n .sp
+..
+.TH CIL Linker "monolinker"
+.SH NAME
+Mono CIL Linker
+.SH SYNOPSIS
+.PP
+.B monolinker [-o output_directory][-l i18n_assemblies][-c skip | copy | link] -x descriptor | -a assembly | -i info_file ...
+.SH DESCRIPTION
+\fImonolinker\fP is a CIL Linker.
+
+The linker is a tool one can use to only ship the minimal possible set of
+functions that a set of programs might require to run as opposed to the full
+libraries.
+.PP
+The linker analyses the intermediate code (CIL) produced by every compiler
+targeting the Mono platform like mcs, gmcs, vbnc, booc or others. It will walk
+through all the code that it is given to it, and basically, perform a mark and
+sweep operations on all the code that it is referenced, to only keep what is
+necessary for the source program to run.
+.SH OPTIONS
+.TP
+.I "-d search_directory"
+.PP
+Specify a directory to the linker where to look for assemblies.
+.TP
+.I "-o output_directory"
+Specify the output directory, default is 'output'.
+.PP
+If you specify the directory `.', please ensure that you won't write over
+important assemblies of yours.
+.TP
+.I "-l i18n_assemblies"
+Specify what to do with the region specific assemblies
+.PP
+Mono have a few assemblies which contains everything region specific:
+.nf
+I18N.CJK.dll
+I18N.MidEast.dll
+I18N.Other.dll
+I18N.Rare.dll
+I18N.West.dll
+.fi
+.PP
+By default, they will all be copied to the output directory, but you can
+specify which one you want using this command. The choice can
+either be: none, all, cjk, mideast, other, rare or west. You can
+combine the values with a comma.
+.TP
+.I "-c action"
+Specify the action to apply to the core assemblies.
+.PP
+Core assemblies are the assemblies that belongs to the base class library,
+like mscorlib.dll, System.dll or System.Windows.Forms.dll.
+.PP
+The linker can do 3 things about them:
+.PP
+.nf
+       skip them, and do nothing with them,
+       copy them to the output directory,
+       link them, to reduce their size.
+.fi
+.PP
+You can specify what action to do on the core assemblies with the option:
+.TP
+.I "-x descriptor"
+Use an XML descriptor as a source for the linker.
+.PP
+Here is an example that shows all the possibilities of this format:
+.PP
+.nf
+<linker>
+       <assembly fullname="Library">
+               <type fullname="Foo" />
+               <type fullname="Bar" preserve="nothing" required="false" />
+               <type fullname="Baz" preserve="fields" required="false" />
+               <type fullname="Gazonk">
+                       <method signature="System.Void .ctor(System.String)" />
+                       <field signature="System.String _blah" />
+               </type>
+       </assembly>
+</linker>
+.fi
+.PP
+In this example, the linker will link the types Foo, Bar, Baz and Gazonk.
+.PP
+The preserve attribute ensures that all the fields of the type Baz will be
+always be linked, not matter if they are used or not, but that neither the
+fields or the methods of Bar will be linked if they are not used. Not
+specifying a preserve attribute implies that we are preserving everything in
+the specified type.
+.PP
+The required attribute specifies that if the type is not marked, during the
+mark operation, it will not be linked.
+.PP
+The type Gazonk will be linked, as well as its constructor taking a string as a
+parameter, and it's _blah field.
+.PP
+You can have multiple assembly nodes.
+.TP
+.I "-a assemblies"
+use an assembly as a source for the linker.
+.PP
+The linker will walk through all the methods of the assembly to generate only what
+is necessary for this assembly to run.
+.TP
+.I "-i info_file"
+use a .info xml file as a source for the linker.
+.PP
+An info file is a file produced by the tool mono-api-info. The linker will use it to
+generate an assembly that contains only what the public API defined in he info file
+needs. It will also adjust the visibility of the types that have to be present in the
+assembly, but that are not visibile from the public API.
+.TP
+.I "-s [StepBefore:]StepFullName,StepAssembly[:StepAfter]"
+.PP
+You can ask the linker to execute custom steps by using the -s command. This command
+takes the standard TypeFullName,Assembly format to locate the step. You can customize
+its position in the pipeline by either adding it before a step, or after.
+.PP
+Example:
+.PP
+.nf
+using System;
+
+using Mono.Linker;
+using Mono.Linker.Steps;
+
+namespace Foo {
+
+       public class FooStep : IStep {
+
+               public void Process (LinkContext context)
+               {
+                       foreach (IStep step in context.Pipeline.GetSteps ()) {
+                               Console.WriteLine (step.GetType ().Name);
+                       }
+               }
+       }
+}
+.fi
+.PP
+If you compile this custom against monolinker to a Foo.dll assembly, you
+can use the -s switch as follow, to add the FooStep at the end of the pipeline:
+.PP
+.nf
+monolinker -s Foo.FooStep,Foo -a program.exe
+.fi
+.PP
+This commanand will add the FooStep after the MarkStep:
+.PP
+.nf
+monolinker -s MarkStep:Foo.FooStep,Foo -a program.exe
+.fi
+.PP
+This commanand will add the FooStep before the MarkStep:
+.PP
+.nf
+monolinker -s Foo.FooStep,Foo:MarkStep -a program.exe
+.fi
+This command will add the FooStep before the MarkStep
+.SH COPYRIGHT
+Copyright (C) 2007 Novell, Inc (http://www.novell.com)
+.SH BUGS
+Bugs report are welcome at http://bugzilla.ximian.com
+.PP
+Product Mono Tools, Component linker.
+.SH MAILING LISTS
+Mailing lists are listed at http://www.mono-project.com/Mailing_Lists
+.SH WEB SITE
+http://www.mono-project.com/Linker
+.SH AUTHORS
+The linker has been written by Jb Evain, and have been partially founded by
+the Google Summer of Code.
+.SH LICENSE
+The linker is licensed under the MIT/X11 license. Please read the accompayning
+MIT.X11 file for details.
+.SH SEE ALSO
+.BR mono(1)