=pod

=head1 NAME

llvm-ld - LLVM linker

=head1 SYNOPSIS

B<llvm-ld> <options> <files>

=head1 DESCRIPTION

The B<llvm-ld> tool takes a set of LLVM bitcode files and links them
together into a single LLVM bitcode file.  The output bitcode file can be
another bitcode file or an executable bitcode program.  Using additional
options, B<llvm-ld> is able to produce native code executables.

The B<llvm-ld> tool is the main linker for LLVM. It is used to link together
the output of LLVM front-end compilers and run "link time" optimizations (mostly
the inter-procedural kind).

The B<llvm-ld> tools attempts to mimic the interface provided by the default
system linker so that it can act as a I<drop-in> replacement.

=head2 Search Order

When looking for objects specified on the command line, B<llvm-ld> will search 
for the object first in the current directory and then in the directory 
specified by the B<LLVM_LIB_SEARCH_PATH> environment variable.  If it cannot 
find the object, it fails.

When looking for a library specified with the B<-l> option, B<llvm-ld> first
attempts to load a file with that name from the current directory.  If that
fails, it looks for libI<library>.bc, libI<library>.a, or libI<library>.I<shared
library extension>, in that order, in each directory added to the library search
path with the B<-L> option.  These directories are searched in the order they
are specified.  If the library cannot be located, then B<llvm-ld> looks in the
directory specified by the B<LLVM_LIB_SEARCH_PATH> environment variable.  If it
does not find a library there, it fails.

The I<shared library extension> may be I<.so>, I<.dyld>, I<.dll>, or something
different, depending upon the system.

The B<-L> option is global.  It does not matter where it is specified in the
list of command line arguments; the directory is simply added to the search path
and is applied to all libraries, preceding or succeeding, in the command line.

=head2 Link order

All object and bitcode files are linked first in the order they were 
specified on the command line.  All library files are linked next.  
Some libraries may not be linked into the object program; see below.

=head2 Library Linkage

Object files and static bitcode objects are always linked into the output
file.  Library archives (.a files) load only the objects within the archive
that define symbols needed by the output file.  Hence, libraries should be
listed after the object files and libraries which need them; otherwise, the
library may not be linked in, and the dependent library will not have its
undefined symbols defined.

=head2 Native code generation

The B<llvm-ld> program has limited support for native code generation, when
using the B<-native> or B<-native-cbe> options. Native code generation is
performed by converting the linked bitcode into native assembly (.s) or C code
and running the system compiler (typically gcc) on the result.

=head1 OPTIONS

=head2 General Options

=over 

=item B<-help>

Print a summary of command line options.

=item B<-v>

Specifies verbose mode. In this mode the linker will print additional
information about the actions it takes, programs it executes, etc. 

=item B<-stats>

Print statistics.

=item B<-time-passes>

Record the amount of time needed for each pass and print it to standard
error.

=back 

=head2 Input/Output Options

=over

=item B<-o> F<filename>

This overrides the default output file and specifies the name of the file that
should be generated by the linker. By default, B<llvm-ld> generates a file named
F<a.out> for compatibility with B<ld>. The output will be written to
F<filename>.

=item B<-l>F<name>

This option specifies the F<name> of a library to search when resolving symbols
for the program. Only the base name should be specified as F<name>, without a
F<lib> prefix or any suffix. 

=item B<-L>F<Path>

This option tells B<llvm-ld> to look in F<Path> to find any library subsequently
specified with the B<-l> option. The paths will be searched in the order in
which they are specified on the command line. If the library is still not found,
a small set of system specific directories will also be searched. Note that
libraries specified with the B<-l> option that occur I<before> any B<-L> options
will not search the paths given by the B<-L> options following it.

=item B<-link-as-library>

Link the bitcode files together as a library, not an executable. In this mode,
undefined symbols will be permitted.

=item B<-r>

An alias for -link-as-library.

=item B<-native>

Generate a native machine code executable.

When generating native executables, B<llvm-ld> first checks for a bitcode
version of the library and links it in, if necessary.  If the library is
missing, B<llvm-ld> skips it.  Then, B<llvm-ld> links in the same
libraries as native code.

In this way, B<llvm-ld> should be able to link in optimized bitcode
subsets of common libraries and then link in any part of the library that
hasn't been converted to bitcode.

=item B<-native-cbe>

Generate a native machine code executable with the LLVM C backend.
      
This option is identical to the B<-native> option, but uses the
C backend to generate code for the program instead of an LLVM native
code generator.

=back

=head2 Optimization Options

=over 

=item B<-disable-inlining>

Do not run the inlining pass. Functions will not be inlined into other
functions.

=item B<-disable-opt>

Completely disable optimization.

=item B<-disable-internalize>

Do not mark all symbols as internal.

=item B<-verify-each>

Run the verification pass after each of the passes to verify intermediate
results.

=item B<-strip-all>

Strip all debug and symbol information from the executable to make it smaller.

=item B<-strip-debug>

Strip all debug information from the executable to make it smaller.

=item B<-s>

An alias for B<-strip-all>.

=item B<-S>

An alias for B<-strip-debug>.

=item B<-export-dynamic>

An alias for B<-disable-internalize>

=item B<-post-link-opt>F<Path>

Run post-link optimization program. After linking is completed a bitcode file
will be generated. It will be passed to the program specified by F<Path> as the
first argument. The second argument to the program will be the name of a
temporary file into which the program should place its optimized output. For
example, the "no-op optimization" would be a simple shell script:

    #!/bin/bash
    cp $1 $2

=back

=head1 EXIT STATUS

If B<llvm-ld> succeeds, it will exit with 0 return code.  If an error occurs,
it will exit with a non-zero return code.

=head1 ENVIRONMENT

The C<LLVM_LIB_SEARCH_PATH> environment variable is used to find bitcode
libraries. Any paths specified in this variable will be searched after the C<-L>
options.

=head1 SEE ALSO

L<llvm-link|llvm-link>

=head1 AUTHORS

Maintained by the LLVM Team (L<http://llvm.org>).

=cut
