|  | =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<-Os>|B<-Oz>|B<-O3>|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. | 
|  |  | 
|  |  | 
|  | =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. | 
|  |  | 
|  | =item B<--analyze> | 
|  |  | 
|  | Run the Clang Static Analyzer. | 
|  |  | 
|  | =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<language> | 
|  |  | 
|  | 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<-Os> B<-Oz> B<-O3> B<-O4> | 
|  |  | 
|  | Specify which optimization level to use.  B<-O0> means "no optimization": this | 
|  | level compiles the fastest and generates the most debuggable code.  B<-O2> is a | 
|  | moderate level of optimization which enables most optimizations.  B<-Os> is like | 
|  | B<-O2> with extra optimizations to reduce code size.  B<-Oz> is like B<-Os> | 
|  | (and thus B<-O2>), but reduces code size further.  B<-O3> is 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).  On | 
|  | supported platforms, B<-O4> enables link-time optimization; object files are | 
|  | stored in the LLVM bitcode file format and whole program optimization is done at | 
|  | link time. B<-O1> is somewhere between B<-O0> and B<-O2>. | 
|  |  | 
|  | =item B<-g> | 
|  |  | 
|  | Generate debug information.  Note that Clang debug information works best at | 
|  | B<-O0>.  At higher optimization levels, only line number information is | 
|  | currently available. | 
|  |  | 
|  | =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 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 |