From 27d9e9f440acb28894e6a91e317433ee20ac4944 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Mon, 30 Mar 2009 06:50:01 +0000 Subject: [PATCH] Some very rough Driver documentation. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68030 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/DriverArchitecture.png | Bin 0 -> 72966 bytes docs/DriverInternals.html | 510 ++++++++++++++++++++++++++++++++++++ docs/InternalsManual.html | 22 ++ 3 files changed, 532 insertions(+) create mode 100644 docs/DriverArchitecture.png create mode 100644 docs/DriverInternals.html diff --git a/docs/DriverArchitecture.png b/docs/DriverArchitecture.png new file mode 100644 index 0000000000000000000000000000000000000000..056a70a98fbaac0ff8be556ba6f369899fbde279 GIT binary patch literal 72966 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 cPIC_YXHM!1NJ#Wd@Mi!5Pgg&ebxsLQ0I7uN!T + + Clang Driver Manual + + + + + + + + +
+ +

Driver Design & Internals

+ + + + + +

Introduction

+ + +

This document describes the Clang driver. The purpose of this + document is to describe both the motivation and design goals + for the driver, as well as details of the internal + implementation.

+ + +

Features and Goals

+ + +

The Clang driver is intended to be a production quality + compiler driver providing access to the Clang compiler and + tools, with a command line interface which is compatible with + the gcc driver.

+ +

Although the driver is part of and driven by the Clang + project, it is logically a separate tool which shares many of + the same goals as Clang:

+ +

Features:

+ + + +

GCC Compatibility

+ + +

The number one goal of the driver is to ease the adoption of + Clang by allowing users to drop Clang into a build system + which was designed to call GCC. Although this makes the driver + much more complicated than might otherwise be necessary, we + decided that being very compatible with the gcc command line + interface was worth it in order to allow users to quickly test + clang on their projects.

+ + +

Flexible

+ + +

The driver was designed to be flexible and easily accomodate + new uses as we grow the clang and LLVM infrastructure. As one + example, the driver can easily support the introduction of + tools which have an integrated assembler; something we hope to + add to LLVM in the future.

+ +

Similarly, most of the driver functionality is kept in a + library which can be used to build other tools which want to + implement or accept a gcc like interface.

+ + +

Low Overhead

+ + +

The driver should have as little overhead as possible. In + practice, we found that the gcc driver by itself incurred a + small but meaningful overhead when compiling many small + files. The driver doesn't do much work compared to a + compilation, but we have tried to keep it as efficient as + possible by following a few simple principles:

+
    +
  • Avoid memory allocation and string copying when + possible.
  • + +
  • Don't parse arguments more than once.
  • + +
  • Provide a few simple interfaces for effienctly searching + arguments.
  • +
+ + +

Simple

+ + +

Finally, the driver was designed to be "as simple as + possible", given the other goals. Notably, trying to be + completely compatible with the gcc driver adds a significant + amount of complexity. However, the design of the driver + attempts to mitigate this complexity by dividing the process + into a number of independent stages instead of a single + monolithic task.

+ + +

Internal Design and Implementation

+ + + + + +

Internals Introduction

+ + +

In order to satisfy the stated goals, the driver was designed + to completely subsume the functionality of the gcc executable; + that is, the driver should not need to delegate to gcc to + perform subtasks. On Darwin, this implies that the Clang + driver also subsumes the gcc driver-driver, which is used to + implement support for building universal images (binaries and + object files). This also implies that the driver should be + able to call the language specific compilers (e.g. cc1) + directly, which means that it must have enough information to + forward command line arguments to child processes + correctly.

+ + +

Design Overview

+ + +

The diagram below shows the significant components of the + driver architecture and how they relate to one another. The + orange components represent concrete data structures built by + the driver, the green components indicate conceptually + distinct stages which manipulate these data structures, and + the blue components are important helper classes.

+ +
+ + + +
+ + +

Driver Stages

+ + +

The driver functionality is conceptually divided into five stages:

+ +
    +
  1. + Parse: Option Parsing + +

    The command line argument strings are decomposed into + arguments (Arg instances). The driver expects to + understand all available options, although there is some + facility for just passing certain classes of options + through (like -Wl,).

    + +

    Each argument corresponds to exactly one + abstract Option definition, which describes how + the option is parsed along with some additional + metadata. The Arg instances themselves are lightweight and + merely contain enough information for clients to determine + which option they correspond to and their values (if they + have additional parameters).

    + +

    For example, a command line like "-Ifoo -I foo" would + parse to two Arg instances (a JoinedArg and a SeparateArg + instance), but each would refer to the same Option.

    + +

    Options are lazily created in order to avoid populating + all Option classes when the driver is loaded. Most of the + driver code only needs to deal with options by their + unique ID (e.g., options::OPT_I),

    + +

    Arg instances themselves do not generally store the + values of parameters. In almost all cases, this would + simply result in creating unnecessary string + copies. Instead, Arg instances are always embedded inside + an ArgList structure, which contains the original vector + of argument strings. Each Arg itself can then only contain + an index into this vector instead of storing its values + directly.

    + +

    The current clang driver can dump the results of this + stage using the -ccc-print-options flag (which + must preceed any actual command line arguments). For + example:

    +
    +            $ clang -ccc-print-options -Xarch_i386 -fomit-frame-pointer -Wa,-fast -Ifoo -I foo t.c
    +            Option 0 - Name: "-Xarch_", Values: {"i386", "-fomit-frame-pointer"}
    +            Option 1 - Name: "-Wa,", Values: {"-fast"}
    +            Option 2 - Name: "-I", Values: {"foo"}
    +            Option 3 - Name: "-I", Values: {"foo"}
    +            Option 4 - Name: "<input>", Values: {"t.c"}
    +          
    + +

    After this stage is complete the command line should be + broken down into well defined option objects with their + appropriate parameters. Subsequent stages should rarely, + if ever, need to do any string processing.

    +
  2. + +
  3. + Pipeline: Compilation Job Construction + +

    Once the arguments are parsed, the tree of subprocess + jobs needed for the desired compilation sequence are + constructed. This involves determing the input files and + their types, what work is to be done on them (preprocess, + compile, assemble, link, etc.), and constructing a list of + Action instances for each task. The result is a list of + one or more top-level actions, each of which generally + corresponds to a single output (for example, an object or + linked executable).

    + +

    The majority of Actions correspond to actual tasks, + however there are two special Actions. The first is + InputAction, which simply serves to adapt an input + argument for use as an input to other Actions. The second + is BindArchAction, which conceptually alters the + architecture to be used for all of its input Actions.

    + +

    The current clang driver can dump the results of this + stage using the -ccc-print-phases flag. For + example:

    +
    +            $ clang -ccc-print-phases -x c t.c -x assembler t.s
    +            0: input, "t.c", c
    +            1: preprocessor, {0}, cpp-output
    +            2: compiler, {1}, assembler
    +            3: assembler, {2}, object
    +            4: input, "t.s", assembler
    +            5: assembler, {4}, object
    +            6: linker, {3, 5}, image
    +          
    +

    Here the driver is constructing sevent distinct actions, + four to compile the "t.c" input into an object file, two to + assemble the "t.s" input, and one to link them together.

    + +

    A rather different compilation pipeline is shown here; in + this example there are two top level actions to compile + the input files into two separate object files, where each + object file is built using lipo to merge results + built for two separate architectures.

    +
    +            $ clang -ccc-print-phases -c -arch i386 -arch x86_64 t0.c t1.c
    +            0: input, "t0.c", c
    +            1: preprocessor, {0}, cpp-output
    +            2: compiler, {1}, assembler
    +            3: assembler, {2}, object
    +            4: bind-arch, "i386", {3}, object
    +            5: bind-arch, "x86_64", {3}, object
    +            6: lipo, {4, 5}, object
    +            7: input, "t1.c", c
    +            8: preprocessor, {7}, cpp-output
    +            9: compiler, {8}, assembler
    +            10: assembler, {9}, object
    +            11: bind-arch, "i386", {10}, object
    +            12: bind-arch, "x86_64", {10}, object
    +            13: lipo, {11, 12}, object
    +          
    + +

    After this stage is complete the compilation process is + divided into a simple set of actions which need to be + performed to produce intermediate or final outputs (in + some cases, like -fsyntax-only, there is no + "real" final output). Phases are well known compilation + steps, such as "preprocess", "compile", "assemble", + "link", etc.

    +
  4. + +
  5. + Bind: Tool & Filename Selection + +

    The stage (in conjunction with the Translate stage) turns + the tree of Actions into a list of actual subprocess to + run. Conceptually, the driver performs a simple tree match + to assign Action(s) to Tools. Once an Action has been + bound to a Tool, the driver interacts with the tool to + determine how the Tools should be connected (via pipes, + temporary files, or user provided filenames) and whether + the tool supports things like an integrated + preprocessor.

    + +

    The driver interacts with a ToolChain to perform the Tool + bindings. Each ToolChain contains information about all + the tools needed for compilation for a particular + architecture, platform, and operating system. A single + driver may query multiple ToolChains during a single + compilation in order to interact with tools for separate + architectures.

    + +

    The results of this stage are not computed directly, but + the driver can print the results via + the -ccc-print-bindings option. For example:

    +
    +            $ clang -ccc-print-bindings -arch i386 -arch ppc t0.c
    +            # "i386-apple-darwin10.0.0d6" - "clang", inputs: ["t0.c"], output: "/tmp/cc-Sn4RKF.s"
    +            # "i386-apple-darwin10.0.0d6" - "darwin::Assemble", inputs: ["/tmp/cc-Sn4RKF.s"], output: "/tmp/cc-gvSnbS.o"
    +            # "i386-apple-darwin10.0.0d6" - "darwin::Link", inputs: ["/tmp/cc-gvSnbS.o"], output: "/tmp/cc-jgHQxi.out"
    +            # "ppc-apple-darwin10.0.0d6" - "gcc::Compile", inputs: ["t0.c"], output: "/tmp/cc-Q0bTox.s"
    +            # "ppc-apple-darwin10.0.0d6" - "gcc::Assemble", inputs: ["/tmp/cc-Q0bTox.s"], output: "/tmp/cc-WCdicw.o"
    +            # "ppc-apple-darwin10.0.0d6" - "gcc::Link", inputs: ["/tmp/cc-WCdicw.o"], output: "/tmp/cc-HHBEBh.out"
    +            # "i386-apple-darwin10.0.0d6" - "darwin::Lipo", inputs: ["/tmp/cc-jgHQxi.out", "/tmp/cc-HHBEBh.out"], output: "a.out"
    +          
    + +

    This shows the tool chain, tool, inputs and outputs which + have been bound for this compilation sequence. Here clang + is being used to compile t0.c on the i386 architecture and + darwin specific versions of the tools are being used to + assemble and link the result, but generic gcc versions of + the tools are being used on PowerPC.

    +
  6. + +
  7. + Translate: Tool Specific Argument Translation + +

    Once a Tool has been selected to perform a particular + Action, the Tool must construct concrete Jobs which will be + executed during compilation. The main work is in translating + from the gcc style command line options to whatever options + the subprocess expects.

    + +

    Some tools, such as the assembler, only interact with a + handful of arguments and just determine the path of the + executable to call and pass on their input and output + arguments. Others, like the compiler or the linker, may + translate a large number of arguments in addition.

    + +

    The ArgList class provides a number of simple helper + methods to assist with translating arguments; for example, + to pass on only the last of arguments corresponding to some + option, or all arguments for an option.

    + +

    The result of this stage is a list of Jobs (executable + paths and argument strings) to execute.

    +
  8. + +
  9. + Execute +

    Finally, the compilation pipeline is executed. This is + mostly straightforward, although there is some interaction + with options + like -pipe, -pass-exit-codes + and -time.

    +
  10. + +
+ + +

Additional Notes

+ + +

The Compilation Object

+ +

The driver constructs a Compilation object for each set of + command line arguments. The Driver itself is intended to be + invariant during construct of a Compilation; an IDE should be + able to construct a single long lived driver instance to use + for an entire build, for example.

+ +

The Compilation object holds information that is particular + to each compilation sequence. For example, the list of used + temporary files (which must be removed once compilation is + finished) and result files (which should be removed if + compilation files).

+ +

Unified Parsing & Pipelining

+ +

Parsing and pipeling both occur without reference to a + Compilation instance. This is by design; the driver expects that + both of these phases are platform neutral, with a few very well + defined exceptions such as whether the platform uses a driver + driver.

+ +

ToolChain Argument Translation

+ +

In order to match gcc very closely, the clang driver + currently allows tool chains to perform their own translation of + the argument list (into a new ArgList data structure). Although + this allows the clang driver to match gcc easily, it also makes + the driver operation much harder to understand (since the Tools + stop seeing some arguments the user provided, and see new ones + instead).

+ +

For example, on Darwin -gfull gets translated into + two separate arguments, -g + and -fno-eliminate-unused-debug-symbols. Trying to + write Tool logic to do something with -gfull will not + work, because at Tools run after the arguments have been + translated.

+ +

A long term goal is to remove this tool chain specific + translation, and instead force each tool to change its own logic + to do the right thing on the untranslated original arguments.

+ +

Unused Argument Warnings

+

The driver operates by parsing all arguments but giving Tools + the opportunity to choose which arguments to pass on. One + downside of this infrastructure is that if the user misspells + some option, or is confused about which options to use, some + command line arguments the user really cared about may go + unused. This problem is particularly important when using + clang as a compiler, since the clang compiler does not support + anywhere all the options that gcc does, and we want to make + sure users know which ones are being used.

+ +

To support this, the driver maintains a bit associated with + each argument of whether it has been used (at all) during the + compilation. This bit usually doesn't need to be set by hand, + as the key ArgList accessors will set it automatically.

+ +

When a compilation is successfull (there are no errors), the + driver checks the bit and emits an "unused argument" warning for + any arguments which were never accessed. This is conservative + (the argument may not have been used to do what the user wanted) + but still catches the most obvious cases.

+ + +

Relation to GCC Driver Concepts

+ + +

For those familiar with the gcc driver, this section provides + a brief overview of how things from the gcc driver map to the + clang driver.

+ +
    +
  • + Driver Driver +

    The driver driver is fully integrated into the clang + driver. The driver simply constructs additional Actions to + bind the architecture during the Pipeline + phase. The tool chain specific argument translation is + responsible for handling -Xarch_.

    + +

    The one caveat is that this approach + requires -Xarch_ not be used to alter the + compilation itself (for example, one cannot + provide -S as an -Xarch_ argument). The + driver attempts to reject such invocations, and overall + there isn't a good reason to abuse -Xarch_ to + that end in practice.

    + +

    The upside is that the clang driver is more efficient and + does little extra work to support universal builds. It also + provides better error reporting and UI consistency.

    +
  • + +
  • + Specs +

    The clang driver has no direct correspondant for + "specs". The majority of the functionality that is + embedded in specs is in the Tool specific argument + translation routines. The parts of specs which control the + compilation pipeline are generally part of + the Pipeline stage.

    +
  • + +
  • + Toolchains +

    The gcc driver has no direct understanding of tool + chains. Each gcc binary roughly corresponds to the + information which is embedded inside a single + ToolChain.

    + +

    The clang driver is intended to be portable and support + complex compilation environments. All platform and tool + chain specific code should be protected behind either + abstract or well defined interfaces (such as whether the + platform supports use as a driver driver).

    +
  • +
+
+ + diff --git a/docs/InternalsManual.html b/docs/InternalsManual.html index 42b3b784d9..0eaf722be3 100644 --- a/docs/InternalsManual.html +++ b/docs/InternalsManual.html @@ -27,6 +27,14 @@ td { classes +
  • The Driver Library +
      +
    +
  • +
  • The Frontend Library +
      +
    +
  • The Lexer and Preprocessor Library