======
Driver
======

.. contents::
   :local:

Introduction
============

This document describes the lld 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.

Overview
========

The lld driver is designed to support a number of different command line
interfaces. The main interfaces we plan to support are binutils' ld, Apple's
ld, and Microsoft's link.exe.

Flavors
-------

Each of these different interfaces is referred to as a flavor. There is also an
extra flavor "core" which is used to exercise the core functionality of the
linker it the test suite.

* gnu
* darwin
* link
* core

Selecting a Flavor
^^^^^^^^^^^^^^^^^^

There are two different ways to tell lld which flavor to be. They are checked in
order, so the second overrides the first. The first is to symlink :program:`lld`
as :program:`lld-{flavor}` or just :program:`{flavor}`. You can also specify
it as the first command line argument using ``-flavor``::

  $ lld -flavor gnu

There is a shortcut for ``-flavor core`` as ``-core``.


Adding an Option to an existing Flavor
======================================

#. Add the option to the desired :file:`lib/Driver/{flavor}Options.td`.

#. Add to :cpp:class:`lld::FlavorLinkingContext` a getter and setter method
   for the option.

#. Modify :cpp:func:`lld::FlavorDriver::parse` in :file:
   `lib/Driver/{Flavor}Driver.cpp` to call the targetInfo setter
   for corresponding to the option.

#. Modify {Flavor}Reader and {Flavor}Writer to use the new targtInfo option.


Adding a Flavor
===============

#. Add an entry for the flavor in :file:`include/lld/Driver/Driver.h` to
   :cpp:class:`lld::UniversalDriver::Flavor`.

#. Add an entry in :file:`lib/Driver/UniversalDriver.cpp` to
   :cpp:func:`lld::Driver::strToFlavor` and
   :cpp:func:`lld::UniversalDriver::link`.
   This allows the flavor to be selected via symlink and `-flavor`.

#. Add a tablegen file called :file:`lib/Driver/{flavor}Options.td` that
   describes the options. If the options are a superset of another driver, that
   driver's td file can simply be included. The :file:`{flavor}Options.td` file
   must also be added to :file:`lib/Driver/CMakeLists.txt`.

#. Add a ``{flavor}Driver`` as a subclass of :cpp:class:`lld::Driver`
   in :file:`lib/Driver/{flavor}Driver.cpp`.
