a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
220 lines
6.2 KiB
Groff
220 lines
6.2 KiB
Groff
.\"
|
|
.\" 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.
|
|
.PP.
|
|
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
|
|
remove all the unused methods and classes. This is done using a mark
|
|
and sweep operation on all the code that it is referenced.
|
|
.PP
|
|
The generated output from the monolinker can be later processed by the
|
|
.I mkbundle
|
|
tool to generate small native self-contained executables.
|
|
.PP
|
|
Do not confuse this with the Assembly Linker (al) which creates
|
|
assemblies from manifests, modules and resource files.
|
|
.SH OPTIONS
|
|
.TP
|
|
.I "-d search_directory"
|
|
Specify a directory to the linker where to look for assemblies.
|
|
.TP
|
|
.I "-o output_directory"
|
|
Specify the output directory, default is 'output'.
|
|
.Sp
|
|
If you specify the directory `.', please ensure that you won't write over
|
|
important assemblies of yours.
|
|
.TP
|
|
.I "-b true | false"
|
|
Specify whether to generate debug symbols or not, default is false.
|
|
.TP
|
|
.I "-g true | false"
|
|
Specify whether to generate a new guid for each linked module or reuse the
|
|
existing one, default is true.
|
|
.TP
|
|
.I "-l i18n_assemblies"
|
|
Specify what to do with the region specific assemblies
|
|
.Sp
|
|
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
|
|
.Sp
|
|
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.
|
|
.Sp
|
|
Core assemblies are the assemblies that belongs to the base class library,
|
|
like mscorlib.dll, System.dll or System.Windows.Forms.dll.
|
|
.Sp
|
|
The linker supports three operations on these assemblies, you can
|
|
specify one of the following actions:
|
|
.RS
|
|
.ne 8
|
|
.TP
|
|
.I skip
|
|
This instructs the linker to skip them and do nothing with them.
|
|
.TP
|
|
.I copy
|
|
This instructs the linker to copy them to the output directory,
|
|
.TP
|
|
.I link
|
|
This instructs the linker to apply the linking process and reduce
|
|
their size.
|
|
.ne
|
|
.RE
|
|
.Sp
|
|
.TP
|
|
.I "-p action assembly"
|
|
Specify per assembly which action to apply.
|
|
.TP
|
|
.I "-x descriptor"
|
|
Use an XML descriptor as a source for the linker.
|
|
.Sp
|
|
Here is an example that shows all the possibilities of this format:
|
|
.Sp
|
|
.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" />
|
|
<field name="someFieldName" />
|
|
</type>
|
|
</assembly>
|
|
</linker>
|
|
.fi
|
|
.Sp
|
|
In this example, the linker will link the types Foo, Bar, Baz and Gazonk.
|
|
.Sp
|
|
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.
|
|
.Sp
|
|
The required attribute specifies that if the type is not marked, during the
|
|
mark operation, it will not be linked.
|
|
.Sp
|
|
The type Gazonk will be linked, as well as its constructor taking a string as a
|
|
parameter, and it's _blah field.
|
|
.Sp
|
|
You can have multiple assembly nodes.
|
|
.TP
|
|
.I "-a assemblies"
|
|
use an assembly as a source for the linker.
|
|
.Sp
|
|
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.
|
|
.Sp
|
|
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 the info file
|
|
needs.
|
|
.TP
|
|
.I "-s [StepBefore:]StepFullName,StepAssembly[:StepAfter]"
|
|
.Sp
|
|
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.
|
|
.Sp
|
|
Example:
|
|
.Sp
|
|
.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
|
|
.Sp
|
|
If you compile this custom against monolinker to a Foo.dll assembly, you
|
|
can use the
|
|
.I -s
|
|
switch as follows. To add the FooStep at the end of the pipeline:
|
|
.Sp
|
|
.nf
|
|
monolinker -s Foo.FooStep,Foo -a program.exe
|
|
.fi
|
|
.Sp
|
|
This commanand will add the FooStep after the MarkStep:
|
|
.Sp
|
|
.nf
|
|
monolinker -s MarkStep:Foo.FooStep,Foo -a program.exe
|
|
.fi
|
|
.Sp
|
|
This command will add the FooStep before the MarkStep:
|
|
.Sp
|
|
.nf
|
|
monolinker -s Foo.FooStep,Foo:MarkStep -a program.exe
|
|
.fi
|
|
.Sp
|
|
This command will add the FooStep before the MarkStep
|
|
.TP
|
|
.I "-m CustomParam ParamValue"
|
|
Specify a parameter for a custom step.
|
|
.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 al(1),mkbundle(1),mono(1),mcs(1).
|