=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<-b> F<filename> | |
This option can be used to override the output bitcode file name. By default, | |
the name of the bitcode output file is one more ".bc" suffix added to the name | |
specified by B<-o filename> option. | |
=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 |