You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
7.0 KiB
HTML

<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:&nbsp;<a rel="previous" accesskey="p" href="Front-End.html#Front-End">Front End</a>,
Up:&nbsp;<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>