Lines Matching full:driver

2 Driver Design & Internals
11 This document describes the Clang driver. The purpose of this document
12 is to describe both the motivation and design goals for the driver, as
18 The Clang driver is intended to be a production quality compiler driver
20 interface which is compatible with the gcc driver.
22 Although the driver is part of and driven by the Clang project, it is
31 The number one goal of the driver is to ease the adoption of Clang by
33 call GCC. Although this makes the driver much more complicated than
41 The driver was designed to be flexible and easily accommodate new uses
42 as we grow the clang and LLVM infrastructure. As one example, the driver
46 Similarly, most of the driver functionality is kept in a library which
53 The driver should have as little overhead as possible. In practice, we
54 found that the gcc driver by itself incurred a small but meaningful
55 overhead when compiling many small files. The driver doesn't do much
66 Finally, the driver was designed to be "as simple as possible", given
68 gcc driver adds a significant amount of complexity. However, the design
69 of the driver attempts to mitigate this complexity by dividing the
83 In order to satisfy the stated goals, the driver was designed to
85 driver should not need to delegate to gcc to perform subtasks. On
86 Darwin, this implies that the Clang driver also subsumes the gcc
87 driver-driver, which is used to implement support for building universal
88 images (binaries and object files). This also implies that the driver
96 The diagram below shows the significant components of the driver
98 represent concrete data structures built by the driver, the green
104 :alt: Driver Architecture Diagram
106 Driver Stages
109 The driver functionality is conceptually divided into five stages:
114 (``Arg`` instances). The driver expects to understand all available
130 classes when the driver is loaded. Most of the driver code only needs
140 The clang driver can dump the results of this stage using the
174 The clang driver can dump the results of this stage using the
188 Here the driver is constructing seven distinct actions, four to
225 driver performs a top down matching to assign Action(s) to Tools. The
227 particular action; once selected the driver interacts with the tool
231 Once Tools have been selected for all actions, the driver determines
234 output file is required, the driver also computes the appropriate
238 The driver interacts with a ToolChain to perform the Tool bindings.
241 system. A single driver invocation may query multiple ToolChains
245 The results of this stage are not computed directly, but the driver
298 The driver constructs a Compilation object for each set of command line
299 arguments. The Driver itself is intended to be invariant during
301 single long lived driver instance to use for an entire build, for
313 instance. This is by design; the driver expects that both of these
315 such as whether the platform uses a driver driver.
320 In order to match gcc very closely, the clang driver currently allows
322 a new ArgList data structure). Although this allows the clang driver to
323 match gcc easily, it also makes the driver operation much harder to
340 The driver operates by parsing all arguments but giving Tools the
349 To support this, the driver maintains a bit associated with each
354 When a compilation is successful (there are no errors), the driver
360 Relation to GCC Driver Concepts
363 For those familiar with the gcc driver, this section provides a brief
364 overview of how things from the gcc driver map to the clang driver.
366 - **Driver Driver**
368 The driver driver is fully integrated into the clang driver. The
369 driver simply constructs additional Actions to bind the architecture
375 ``-S`` as an ``-Xarch_`` argument). The driver attempts to reject
379 The upside is that the clang driver is more efficient and does little
385 The clang driver has no direct correspondent for "specs". The
393 The gcc driver has no direct understanding of tool chains. Each gcc
397 The clang driver is intended to be portable and support complex
400 (such as whether the platform supports use as a driver driver).