<html lang="en"> <head> <title>Back End - GNU Compiler Collection (GCC) Internals</title> <meta http-equiv="Content-Type" content="text/html"> <meta name="description" content="GNU Compiler Collection (GCC) Internals"> <meta name="generator" content="makeinfo 4.13"> <link title="Top" rel="start" href="index.html#Top"> <link rel="up" href="gcc-Directory.html#gcc-Directory" title="gcc Directory"> <link rel="prev" href="Front-End.html#Front-End" title="Front End"> <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> <!-- Copyright (C) 1988-2015 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being ``Funding Free Software'', the Front-Cover Texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the section entitled ``GNU Free Documentation License''. (a) The FSF's Front-Cover Text is: A GNU Manual (b) The FSF's Back-Cover Text is: You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development.--> <meta http-equiv="Content-Style-Type" content="text/css"> <style type="text/css"><!-- pre.display { font-family:inherit } pre.format { font-family:inherit } pre.smalldisplay { font-family:inherit; font-size:smaller } pre.smallformat { font-family:inherit; font-size:smaller } pre.smallexample { font-size:smaller } pre.smalllisp { font-size:smaller } span.sc { font-variant:small-caps } span.roman { font-family:serif; font-weight:normal; } span.sansserif { font-family:sans-serif; font-weight:normal; } --></style> </head> <body> <div class="node"> <a name="Back-End"></a> <p> Previous: <a rel="previous" accesskey="p" href="Front-End.html#Front-End">Front End</a>, Up: <a rel="up" accesskey="u" href="gcc-Directory.html#gcc-Directory">gcc Directory</a> <hr> </div> <h4 class="subsection">6.3.9 Anatomy of a Target Back End</h4> <p>A back end for a target architecture in GCC has the following parts: <ul> <li>A directory <samp><var>machine</var></samp> under <samp><span class="file">gcc/config</span></samp>, containing a machine description <samp><var>machine</var><span class="file">.md</span></samp> file (see <a href="Machine-Desc.html#Machine-Desc">Machine Descriptions</a>), header files <samp><var>machine</var><span class="file">.h</span></samp> and <samp><var>machine</var><span class="file">-protos.h</span></samp> and a source file <samp><var>machine</var><span class="file">.c</span></samp> (see <a href="Target-Macros.html#Target-Macros">Target Description Macros and Functions</a>), possibly a target Makefile fragment <samp><span class="file">t-</span><var>machine</var></samp> (see <a href="Target-Fragment.html#Target-Fragment">The Target Makefile Fragment</a>), and maybe some other files. The names of these files may be changed from the defaults given by explicit specifications in <samp><span class="file">config.gcc</span></samp>. <li>If necessary, a file <samp><var>machine</var><span class="file">-modes.def</span></samp> in the <samp><var>machine</var></samp> directory, containing additional machine modes to represent condition codes. See <a href="Condition-Code.html#Condition-Code">Condition Code</a>, for further details. <li>An optional <samp><var>machine</var><span class="file">.opt</span></samp> file in the <samp><var>machine</var></samp> directory, containing a list of target-specific options. You can also add other option files using the <code>extra_options</code> variable in <samp><span class="file">config.gcc</span></samp>. See <a href="Options.html#Options">Options</a>. <li>Entries in <samp><span class="file">config.gcc</span></samp> (see <a href="System-Config.html#System-Config">The <samp><span class="file">config.gcc</span></samp> File</a>) for the systems with this target architecture. <li>Documentation in <samp><span class="file">gcc/doc/invoke.texi</span></samp> for any command-line options supported by this target (see <a href="Run_002dtime-Target.html#Run_002dtime-Target">Run-time Target Specification</a>). This means both entries in the summary table of options and details of the individual options. <li>Documentation in <samp><span class="file">gcc/doc/extend.texi</span></samp> for any target-specific attributes supported (see <a href="Target-Attributes.html#Target-Attributes">Defining target-specific uses of <code>__attribute__</code></a>), including where the same attribute is already supported on some targets, which are enumerated in the manual. <li>Documentation in <samp><span class="file">gcc/doc/extend.texi</span></samp> for any target-specific pragmas supported. <li>Documentation in <samp><span class="file">gcc/doc/extend.texi</span></samp> of any target-specific built-in functions supported. <li>Documentation in <samp><span class="file">gcc/doc/extend.texi</span></samp> of any target-specific format checking styles supported. <li>Documentation in <samp><span class="file">gcc/doc/md.texi</span></samp> of any target-specific constraint letters (see <a href="Machine-Constraints.html#Machine-Constraints">Constraints for Particular Machines</a>). <li>A note in <samp><span class="file">gcc/doc/contrib.texi</span></samp> under the person or people who contributed the target support. <li>Entries in <samp><span class="file">gcc/doc/install.texi</span></samp> for all target triplets supported with this target architecture, giving details of any special notes about installation for this target, or saying that there are no special notes if there are none. <li>Possibly other support outside the <samp><span class="file">gcc</span></samp> directory for runtime libraries. FIXME: reference docs for this. The <code>libstdc++</code> porting manual needs to be installed as info for this to work, or to be a chapter of this manual. </ul> <p>If the back end is added to the official GCC source repository, the following are also necessary: <ul> <li>An entry for the target architecture in <samp><span class="file">readings.html</span></samp> on the GCC web site, with any relevant links. <li>Details of the properties of the back end and target architecture in <samp><span class="file">backends.html</span></samp> on the GCC web site. <li>A news item about the contribution of support for that target architecture, in <samp><span class="file">index.html</span></samp> on the GCC web site. <li>Normally, one or more maintainers of that target listed in <samp><span class="file">MAINTAINERS</span></samp>. Some existing architectures may be unmaintained, but it would be unusual to add support for a target that does not have a maintainer when support is added. <li>Target triplets covering all <samp><span class="file">config.gcc</span></samp> stanzas for the target, in the list in <samp><span class="file">contrib/config-list.mk</span></samp>. </ul> </body></html>