..
.TH mkbundle "mkbundle 1.0"
.SH NAME
-mkbundle \- Creates a bundled executable.
+mkbundle, mkbundle2 \- Creates a bundled executable.
.SH SYNOPSIS
.PP
.B mkbundle [options] assembly1 [assembly2 ...]
included in the bundle. To automatically include all of the
dependencies referenced, use the "--deps" command line option.
.PP
+There are two modes of operation, the default one uses the
+C compiler to create a bundle and requires a complete C and Mono SDK
+to produced executables. The simple mode (enabled when using the
+"--simple") command line option does not require this, and also allows
+for cross compilation.
+.PP
+For example, to create a bundle for hello world, use the following
+command:
+.nf
+ $ mkbundle -o hello --simple hello.exe
+.fi
+.PP
+The simple version allows for cross-compiling, this requires a Mono
+runtime to be installed in the ~/.mono/targets/TARGET/mono to be
+available. You can use the "--local-targets" to list all available
+targets, and the "--cross" argument to specify the target, like this:
+.nf
+ $ mkbundle --local-targets
+ Available targets:
+ default - Current System Mono
+ 4.4.0-macosx-x86
+ 4.4.0-debian-8-arm64
+ $ mkbundle --cross 4.4.0-debian-8-powerpc hello.exe -o hello-debian
+.fi
+.PP
+The above will bundle your native library into hello-debian for
+a Debian 8 system running on a PowerPC machine.
+.SH OLD EMBEDDING
+.PP
For example, to create a bundle for hello world, use the following
command:
.nf
$ mkbundle -o hello hello.exe
.fi
.PP
-The above will pull hello.exe native program called "hello". Notice
+The above will pull hello.exe into a native program called "hello". Notice
that the produced image still contains the CIL image and no
precompilation is done.
.PP
-In addition, it is possible to control whether mkbundle should compile
-the resulting executable or not. This is useful if you want to link
-additional libraries or control the generated output in more detail.
-For example, this could be used to link some libraries statically:
+In addition, it is possible to control whether \fImkbundle\fP should compile
+the resulting executable or not with the -c option. This is useful if
+you want to link additional libraries or control the generated output
+in more detail. For example, this could be used to link some libraries
+statically:
.nf
- $ mkbundle -o host.c -oo bundles.o --deps hello.exe
+ $ mkbundle -c -o host.c -oo bundles.o --deps hello.exe
$ cc host.c bundles.o /usr/lib/libmono.a -lc -lrt
.fi
+.PP
+You may also use \fImkbundle\fP to generate a bundle you can use when
+embedding the Mono runtime in a native application. In that case, use
+both the -c and --nomain options. The resulting host.c file will
+not have a main() function. Call mono_mkbundle_init() before
+initializing the JIT in your code so that the bundled assemblies
+are available to the embedded runtime.
.SH OPTIONS
.TP
.I "-c"
Produce the stub file, do not compile the resulting stub.
.TP
+.I "--cross target"
+Creates a bundle for the specified target platform. The target
+must be a directory in ~/.mono/targets/ that contains a "mono"
+binary. You can fetch various targets using the --fetch-target
+command line option.
+.TP
.I "-o filename"
Places the output on `out'. If the flag -c is specified, this is the
C host program. If not, this contains the resulting executable.
$prefix/etc/mono/2.0/machine.config depending on the profile that you
are using (1.0 or 2.0)
.TP
-.I "--nodeps"
-This is the default: mkbundle will only include the assemblies that
-were specified on the command line to reduce the size of the resulting
-image created.
-.TP
.I "--deps"
This option will bundle all of the referenced assemblies for the
assemblies listed on the command line option. This is useful to
distribute a self-contained image.
.TP
+.I "--fetch-target target"
+Downloads a precompiled runtime for the specified target from the Mono
+distribution site.
+.TP
+.I "--nodeps"
+This is the default: \fImkbundle\fP will only include the assemblies that
+were specified on the command line to reduce the size of the resulting
+image created.
+.TP
.I "--keeptemp"
-By default mkbundle will delete the temporary files that it uses to
+By default \fImkbundle\fP will delete the temporary files that it uses to
produce the bundle. This option keeps the file around.
.TP
-.I "--static"
-By default mkbundle dynamically links to mono and glib. This option
-causes it to statically link instead.
+.I "--lists-targets"
+Lists all of the available local cross compilation targets available
+as precompiled binaries on the Mono distribution server.
+.TP
+.I "--local-targets"
+Lists all of the available local cross compilation targets.
+.TP
+.I "--machine-config FILE"
+Uses the given FILE as the machine.config file for the generated
+application.
+.TP
+.I "--nomain"
+With the -c option, generate the host stub without a main() function.
.TP
.I "--config-dir DIR"
When passed, DIR will be set for the MONO_CFG_DIR environment variable
.TP
+.I "--static"
+By default \fImkbundle\fP dynamically links to mono and glib. This option
+causes it to statically link instead.
+.TP
+.I "--target-server SERVER"
+By default the mkbundle tool will download from a Mono server the
+target runtimes, you can specify a different server to provide
+cross-compiled runtimes.
+.TP
.I "-z"
Compresses the assemblies before embedding. This results in smaller
executable files, but increases startup time and requires zlib to be
installed on the target system.
+.SH WINDOWS
+On Windows systems, it it necessary to have Unix-like toolchain to be
+installed for \fImkbundle\fP to work. You can use cygwin's and install gcc,
+gcc-mingw and as packages.
.SH ENVIRONMENT VARIABLES
.TP
.I "AS"
Assembler command. The default is "as".
.TP
.I "CC"
-C compiler command. The default is "cc" under Linux and "gcc -mno-cygwin"
+C compiler command. The default is "cc" under Linux and "gcc"
under Windows.
+.TP
+.I "MONO_BUNDLED_OPTIONS"
+Options to be passed to the bundled
+Mono runtime, separated by spaces. See the mono(1) manual page or run mono --help.
.SH FILES
This program will load referenced assemblies from the Mono assembly
cache.
+.PP
+Targets are loaded from ~/.mono/targets/TARGETNAME/mono
.SH BUGS
-The options "--static" and "-z" are not supported under Windows.
+The option "--static" is not supported under Windows.
Moreover, a full cygwin environment containing at least "gcc" and "as"
is required for the build process. The generated executable does not
depend on cygwin.