| flang - the Flang Fortran compiler |
| ================================== |
| |
| SYNOPSIS |
| -------- |
| |
| :program:`flang` [*options*] *filename ...* |
| |
| DESCRIPTION |
| ----------- |
| |
| :program:`flang` is a Fortran compiler which supports all of the Fortran 95 and |
| many newer language features. Flang supports OpenMP and has some support for |
| OpenACC and CUDA. It encompasses preprocessing, parsing, optimization, code |
| generation, assembly, and linking. Depending on the options passed in, Flang |
| will perform only some, or all, of these actions. While Flang is highly |
| integrated, it is important to understand the stages of compilation in order to |
| understand how to invoke it. These stages are: |
| |
| Driver |
| The flang executable is actually a small driver that orchestrates the |
| 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. |
| |
| Preprocessing |
| This stage performs tokenization of the input source file, macro expansion, |
| #include expansion and handles other preprocessor directives. |
| |
| Parsing and Semantic Analysis |
| This stage parses the input file, translating preprocessor tokens into a |
| parse tree. Once in the form of a parse tree, it applies semantic |
| analysis to compute types for expressions and determine whether |
| the code is well formed. Parse errors and most compiler warnings |
| are generated by this stage. |
| |
| Code Generation and Optimization |
| This stage translates the parse tree into intermediate code (known as |
| "LLVM IR") and, ultimately, machine code. It also optimizes this |
| intermediate code and handles target-specific code generation. The output |
| of this stage is typically a ".s" file, referred to as an "assembly" file. |
| |
| Flang 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 calling the target assembler explicitly. |
| |
| 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 |
| a ".o" file, referred to as an "object" file. |
| |
| 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 |
| an "a.out", ".dylib" or ".so" file. |
| |
| OPTIONS |
| ------- |
| |
| .. toctree:: |
| :maxdepth: 1 |
| |
| FlangCommandLineOptions |