| # 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 | |
| ::: | |