<html>
    <head>
      <base href="http://llvm.org/bugs/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - ARM Triplet support is Debian-specific, Triplet support library is non-flexible"
   href="http://llvm.org/bugs/show_bug.cgi?id=15557">15557</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>ARM Triplet support is Debian-specific, Triplet support library is non-flexible
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>libraries
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>Other
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Support Libraries
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>jonathan@jonmasters.org
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvmbugs@cs.uiuc.edu
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>[ Not filed against clang because this is a specific limitation in LLVM core ]

LLVM understands the traditional GNU concept of a Triplet (or Quadriplet):

 * arch-os-abi
 * arch-vendor-os-abi

For example "arm-linux-gnueabi". The LLVM Triplet implementation intends to
abstract this into a Triple class but unfortunately hard-codes various
assumptions about the way these are structured which do not cover all of the
deployed use cases. Worse, the current implementation specific to ARM makes
very distribution-specific assumptions that Debian (and its derivatives) are in
use.

Here is the triplet string encoding used for hardware-floating point enabled
versions of the ARM architecture based upon the newest "gnueabi":

 * arm-linux-gnueabihf

The above represents the Debian-specific triplet, whereas Fedora uses:

 * armv7hl-redhat-linux-gnueabi

Here, you can see that Debian treat hardware floating point as part of the ABI,
whereas Fedora treats the hardware floating point as part of the architecture.
There reasonable arguments for either approach, but unfortunately LLVM supports
only the former. This is because the precise position of various components of
the triplet is magic in the LLVM support library. Many code assumptions exist
such that it is not possible to easily separate out and abstract the
difference.

I made a half-baked patch that added armv7hl-redhat-linux-gnueabi to the list
of ARMHFTriples in tools/clang/lib/Driver/ToolChains.cpp (along with some
detection code), but there are many other places that require fixing. I have
heard that there is an intention to rework the entire LLVM triplet code, so it
will be good to find out what the right course of action here is to
De-Debianify LLVM.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>