=pod

=head1 NAME

clang - the Clang C, C++, and Objective-C compiler

=head1 SYNOPSIS

B<clang> [B<-c>|B<-S>|B<-E>] B<-std=>I<standard> B<-g>
  [B<-O0>|B<-O1>|B<-O2>|B<-O3>|B<-Ofast>|B<-Os>|B<-Oz>|B<-O>|B<-O4>]
  B<-W>I<warnings...> B<-pedantic>
  B<-I>I<dir...> B<-L>I<dir...>
  B<-D>I<macro[=defn]>
  B<-f>I<feature-option...>
  B<-m>I<machine-option...>
  B<-o> I<output-file>
  B<-stdlib=>I<library> 
  I<input-filenames>

=head1 DESCRIPTION

B<clang> is a C, C++, and Objective-C compiler which encompasses preprocessing,
parsing, optimization, code generation, assembly, and linking.  Depending on
which high-level mode setting is passed, Clang will stop before doing a full
link.  While Clang is highly integrated, it is important to understand the
stages of compilation, to understand how to invoke it.  These stages are:

=over

=item B<Driver>

The B<clang> executable is actually a small driver which controls the overall
execution of other tools such as the compiler, assembler and linker.  Typically
you do not need to interact with the driver, but you transparently use it to run
the other tools.

=item B<Preprocessing>

This stage handles tokenization of the input source file, macro expansion,
#include expansion and handling of other preprocessor directives.  The output of
this stage is typically called a ".i" (for C), ".ii" (for C++), ".mi" (for 
Objective-C) , or ".mii" (for Objective-C++) file.

=item B<Parsing and Semantic Analysis>

This stage parses the input file, translating preprocessor tokens into a parse
tree.  Once in the form of a parser tree, it applies semantic analysis to compute
types for expressions as well and determine whether the code is well formed. This
stage is responsible for generating most of the compiler warnings as well as
parse errors.  The output of this stage is an "Abstract Syntax Tree" (AST).

=item B<Code Generation and Optimization>

This stage translates an AST into low-level intermediate code (known as "LLVM
IR") and ultimately to machine code.  This phase is responsible for optimizing
the generated code and handling target-specific code generation.  The output of
this stage is typically called a ".s" file or "assembly" file.

Clang also supports the use of an integrated assembler, in which the code
generator produces object files directly. This avoids the overhead of generating
the ".s" file and of calling the target assembler.

=item B<Assembler>

This stage runs the target assembler to translate the output of the compiler
into a target object file.  The output of this stage is typically called a ".o"
file or "object" file.

=item B<Linker>

This stage runs the target linker to merge multiple object files into an
executable or dynamic library.  The output of this stage is typically called an
"a.out", ".dylib" or ".so" file.

=back

The Clang compiler supports a large number of options to control each of these
stages.  In addition to compilation of code, Clang also supports other tools:

B<Clang Static Analyzer>

The Clang Static Analyzer is a tool that scans source code to try to find bugs
through code analysis.  This tool uses many parts of Clang and is built into the
same driver.  Please see L<http://clang-analyzer.llvm.org> for more details
on how to use the static analyzer.


=head1 OPTIONS

=head2 Stage Selection Options

=over

=item B<-E>

Run the preprocessor stage.

=item B<-fsyntax-only>

Run the preprocessor, parser and type checking stages.

=item B<-S>

Run the previous stages as well as LLVM generation and optimization stages and
target-specific code generation, producing an assembly file.

=item B<-c>

Run all of the above, plus the assembler, generating a target ".o" object file.

=item B<no stage selection option>

If no stage selection option is specified, all stages above are run, and the
linker is run to combine the results into an executable or shared library.

=back



=head2 Language Selection and Mode Options

=over

=item B<-x> I<language>

Treat subsequent input files as having type I<language>.

=item B<-std>=I<language>

Specify the language standard to compile for.

=item B<-stdlib>=I<library>

Specify the C++ standard library to use; supported options are libstdc++ and
libc++.

=item B<-ansi>

Same as B<-std=c89>.

=item B<-ObjC++>

Treat source input files as Objective-C++ inputs.

=item B<-ObjC>

Treat source input files as Objective-C inputs.

=item B<-trigraphs>

Enable trigraphs.

=item B<-ffreestanding>

Indicate that the file should be compiled for a freestanding, not a hosted,
environment.

=item B<-fno-builtin>

Disable special handling and optimizations of builtin functions like strlen and
malloc.

=item B<-fmath-errno>

Indicate that math functions should be treated as updating errno.

=item B<-fpascal-strings>

Enable support for Pascal-style strings with "\pfoo".

=item B<-fms-extensions>

Enable support for Microsoft extensions.

=item B<-fmsc-version=>

Set _MSC_VER. Defaults to 1300 on Windows. Not set otherwise.

=item B<-fborland-extensions>

Enable support for Borland extensions.

=item B<-fwritable-strings>

Make all string literals default to writable.  This disables uniquing of
strings and other optimizations.

=item B<-flax-vector-conversions>

Allow loose type checking rules for implicit vector conversions.

=item B<-fblocks>

Enable the "Blocks" language feature.

=item B<-fobjc-gc-only>

Indicate that Objective-C code should be compiled in GC-only mode, which only
works when Objective-C Garbage Collection is enabled.

=item B<-fobjc-gc>

Indicate that Objective-C code should be compiled in hybrid-GC mode, which works
with both GC and non-GC mode.

=item B<-fobjc-abi-version>=I<version>

Select the Objective-C ABI version to use. Available versions are 1 (legacy
"fragile" ABI), 2 (non-fragile ABI 1), and 3 (non-fragile ABI 2).

=item B<-fobjc-nonfragile-abi-version>=I<version>

Select the Objective-C non-fragile ABI version to use by default. This will only
be used as the Objective-C ABI when the non-fragile ABI is enabled (either via
-fobjc-nonfragile-abi, or because it is the platform default).

=item B<-fobjc-nonfragile-abi>

Enable use of the Objective-C non-fragile ABI. On platforms for which this is
the default ABI, it can be disabled with B<-fno-objc-nonfragile-abi>.

=back



=head2 Target Selection Options

Clang fully supports cross compilation as an inherent part of its design.
Depending on how your version of Clang is configured, it may have support for
a number of cross compilers, or may only support a native target.

=over

=item B<-arch> I<architecture>

Specify the architecture to build for.

=item B<-mmacosx-version-min>=I<version>

When building for Mac OS X, specify the minimum version supported by your
application.

=item B<-miphoneos-version-min>

When building for iPhone OS, specify the minimum version supported by your
application.


=item B<-march>=I<cpu>

Specify that Clang should generate code for a specific processor family member
and later.  For example, if you specify -march=i486, the compiler is allowed to
generate instructions that are valid on i486 and later processors, but which
may not exist on earlier ones.

=back


=head2 Code Generation Options

=over

=item B<-O0> B<-O1> B<-O2> B<-O3> B<-Ofast> B<-Os> B<-Oz> B<-O> B<-O4>

Specify which optimization level to use:

=over

=item B<-O0>

Means "no optimization": this level compiles the fastest and
generates the most debuggable code.

=item B<-O1>

Somewhere between B<-O0> and B<-O2>.

=item B<-O2>

Moderate level of optimization which enables most optimizations.

=item B<-O3>

Like B<-O2>, except that it enables optimizations that take longer to perform
or that may generate larger code (in an attempt to make the program run faster).

=item B<-Ofast>

Enables all the optimizations from B<-O3> along with other aggressive
optimizations that may violate strict compliance with language standards.

=item B<-Os>

Like B<-O2> with extra optimizations to reduce code size.

=item B<-Oz>

Like B<-Os> (and thus B<-O2>), but reduces code size further.

=item B<-O>

Equivalent to B<-O2>.

=item B<-O4> and higher

Currently equivalent to B<-O3>

=back

=item B<-g>

Generate debug information.  Note that Clang debug information works best at
B<-O0>.

=item B<-fstandalone-debug> B<-fno-standalone-debug>

Clang supports a number of optimizations to reduce the size of debug
information in the binary. They work based on the assumption that the
debug type information can be spread out over multiple compilation
units.  For instance, Clang will not emit type definitions for types
that are not needed by a module and could be replaced with a forward
declaration.  Further, Clang will only emit type info for a dynamic
C++ class in the module that contains the vtable for the class.

The B<-fstandalone-debug> option turns off these optimizations.  This
is useful when working with 3rd-party libraries that don't come with
debug information.  This is the default on Darwin.  Note that Clang
will never emit type information for types that are not referenced at
all by the program.

=item B<-fexceptions>

Enable generation of unwind information, this allows exceptions to be thrown
through Clang compiled stack frames.  This is on by default in x86-64.

=item B<-ftrapv>

Generate code to catch integer overflow errors.  Signed integer overflow is
undefined in C, with this flag, extra code is generated to detect this and abort
when it happens.


=item B<-fvisibility>

This flag sets the default visibility level.

=item B<-fcommon>

This flag specifies that variables without initializers get common linkage.  It
can be disabled with B<-fno-common>.

=item B<-ftls-model>

Set the default thread-local storage (TLS) model to use for thread-local
variables. Valid values are: "global-dynamic", "local-dynamic", "initial-exec"
and "local-exec". The default is "global-dynamic". The default model can be
overridden with the tls_model attribute. The compiler will try to choose a more
efficient model if possible.

=item B<-flto> B<-emit-llvm>

Generate output files in LLVM formats, suitable for link time optimization. When
used with B<-S> this generates LLVM intermediate language assembly files,
otherwise this generates LLVM bitcode format object files (which may be passed
to the linker depending on the stage selection options).

=cut

##=item B<-fnext-runtime> B<-fobjc-nonfragile-abi> B<-fgnu-runtime>
##These options specify which Objective-C runtime the code generator should
##target.  FIXME: we don't want people poking these generally.

=pod

=back


=head2 Driver Options

=over

=item B<-###>

Print (but do not run) the commands to run for this compilation.

=item B<--help>

Display available options.

=item B<-Qunused-arguments>

Don't emit warning for unused driver arguments.

=item B<-Wa,>I<args>

Pass the comma separated arguments in I<args> to the assembler.

=item B<-Wl,>I<args>

Pass the comma separated arguments in I<args> to the linker.

=item B<-Wp,>I<args>

Pass the comma separated arguments in I<args> to the preprocessor.

=item B<-Xanalyzer> I<arg>

Pass I<arg> to the static analyzer.

=item B<-Xassembler> I<arg>

Pass I<arg> to the assembler.

=item B<-Xlinker> I<arg>

Pass I<arg> to the linker.

=item B<-Xpreprocessor> I<arg>

Pass I<arg> to the preprocessor.

=item B<-o> I<file>

Write output to I<file>.

=item B<-print-file-name>=I<file>

Print the full library path of I<file>.

=item B<-print-libgcc-file-name>

Print the library path for "libgcc.a".

=item B<-print-prog-name>=I<name>

Print the full program path of I<name>.

=item B<-print-search-dirs>

Print the paths used for finding libraries and programs.

=item B<-save-temps>

Save intermediate compilation results.

=item B<-integrated-as> B<-no-integrated-as>

Used to enable and disable, respectively, the use of the integrated
assembler. Whether the integrated assembler is on by default is target
dependent.

=item B<-time>

Time individual commands.

=item B<-ftime-report>

Print timing summary of each stage of compilation.

=item B<-v>

Show commands to run and use verbose output.

=back


=head2 Diagnostics Options

=over

=item B<-fshow-column>
B<-fshow-source-location>
B<-fcaret-diagnostics>
B<-fdiagnostics-fixit-info>
B<-fdiagnostics-parseable-fixits>
B<-fdiagnostics-print-source-range-info>
B<-fprint-source-range-info>
B<-fdiagnostics-show-option>
B<-fmessage-length>

These options control how Clang prints out information about diagnostics (errors
and warnings).  Please see the Clang User's Manual for more information.

=back


=head2 Preprocessor Options

=over

=item B<-D>I<macroname=value>

Adds an implicit #define into the predefines buffer which is read before the
source file is preprocessed.

=item B<-U>I<macroname>

Adds an implicit #undef into the predefines buffer which is read before the
source file is preprocessed.

=item B<-include> I<filename>

Adds an implicit #include into the predefines buffer which is read before the
source file is preprocessed.

=item B<-I>I<directory>

Add the specified directory to the search path for include files.

=item B<-F>I<directory>

Add the specified directory to the search path for framework include files.

=item B<-nostdinc>

Do not search the standard system directories or compiler builtin directories
for include files.

=item B<-nostdlibinc>

Do not search the standard system directories for include files, but do search
compiler builtin include directories.

=item B<-nobuiltininc>

Do not search clang's builtin directory for include files.

=cut

## TODO, but do we really want people using this stuff?
#=item B<-idirafter>I<directory>
#=item B<-iquote>I<directory>
#=item B<-isystem>I<directory>
#=item B<-iprefix>I<directory>
#=item B<-iwithprefix>I<directory>
#=item B<-iwithprefixbefore>I<directory>
#=item B<-isysroot>

=pod


=back



=cut

### TODO someday.
#=head2 Warning Control Options
#=over
#=back
#=head2 Code Generation and Optimization Options
#=over
#=back
#=head2 Assembler Options
#=over
#=back
#=head2 Linker Options
#=over
#=back
#=head2 Static Analyzer Options
#=over
#=back

=pod


=head1 ENVIRONMENT

=over

=item B<TMPDIR>, B<TEMP>, B<TMP>

These environment variables are checked, in order, for the location to
write temporary files used during the compilation process.

=item B<CPATH>

If this environment variable is present, it is treated as a delimited
list of paths to be added to the default system include path list. The
delimiter is the platform dependent delimitor, as used in the I<PATH>
environment variable.

Empty components in the environment variable are ignored.

=item B<C_INCLUDE_PATH>, B<OBJC_INCLUDE_PATH>, B<CPLUS_INCLUDE_PATH>,
B<OBJCPLUS_INCLUDE_PATH>

These environment variables specify additional paths, as for CPATH,
which are only used when processing the appropriate language.

=item B<MACOSX_DEPLOYMENT_TARGET>

If -mmacosx-version-min is unspecified, the default deployment target
is read from this environment variable.  This option only affects darwin
targets.

=back

=head1 BUGS

To report bugs, please visit L<http://llvm.org/bugs/>.  Most bug reports should
include preprocessed source files (use the B<-E> option) and the full output of 
the compiler, along with information to reproduce.

=head1 SEE ALSO

 as(1), ld(1)

=head1 AUTHOR

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

=cut
