600 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			600 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| =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>.  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
 | 
