]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/doc/gccint/source-tree-structure-and-build-system/the-gcc-subdirectory/configuration-in-the-gcc-directory.rst
sphinx: add missing trailing newline
[thirdparty/gcc.git] / gcc / doc / gccint / source-tree-structure-and-build-system / the-gcc-subdirectory / configuration-in-the-gcc-directory.rst
CommitLineData
c63539ff
ML
1..
2 Copyright 1988-2022 Free Software Foundation, Inc.
3 This is part of the GCC manual.
4 For copying conditions, see the copyright.rst file.
5
6.. _configuration:
7
8Configuration in the gcc Directory
9^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10
11The :samp:`gcc` directory is configured with an Autoconf-generated
12script :samp:`configure`. The :samp:`configure` script is generated
13from :samp:`configure.ac` and :samp:`aclocal.m4`. From the files
14:samp:`configure.ac` and :samp:`acconfig.h`, Autoheader generates the
15file :samp:`config.in`. The file :samp:`cstamp-h.in` is used as a
16timestamp.
17
18.. toctree::
19 :maxdepth: 2
20
21
22.. _config-fragments:
23
24Scripts Used by configure
25~~~~~~~~~~~~~~~~~~~~~~~~~
26
27:samp:`configure` uses some other scripts to help in its work:
28
29* The standard GNU :samp:`config.sub` and :samp:`config.guess`
30 files, kept in the top level directory, are used.
31
32* The file :samp:`config.gcc` is used to handle configuration
33 specific to the particular target machine. The file
34 :samp:`config.build` is used to handle configuration specific to the
35 particular build machine. The file :samp:`config.host` is used to handle
36 configuration specific to the particular host machine. (In general,
37 these should only be used for features that cannot reasonably be tested in
38 Autoconf feature tests.)
39 See :ref:`system-config`, for details of the contents of these files.
40
41* Each language subdirectory has a file
42 :samp:`{language}/config-lang.in` that is used for
43 front-end-specific configuration. See :ref:`front-end-config`, for details of this file.
44
45* A helper script :samp:`configure.frag` is used as part of
46 creating the output of :samp:`configure`.
47
48.. _system-config:
49
50The config.build; config.host; and config.gcc Files
51~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
52
53The :samp:`config.build` file contains specific rules for particular systems
54which GCC is built on. This should be used as rarely as possible, as the
55behavior of the build system can always be detected by autoconf.
56
57The :samp:`config.host` file contains specific rules for particular systems
58which GCC will run on. This is rarely needed.
59
60The :samp:`config.gcc` file contains specific rules for particular systems
61which GCC will generate code for. This is usually needed.
62
63Each file has a list of the shell variables it sets, with descriptions, at the
64top of the file.
65
66.. todo:: document the contents of these files, and what variables should
67 be set to control build, host and target configuration.
68
69.. _configuration-files:
70
71Files Created by configure
72~~~~~~~~~~~~~~~~~~~~~~~~~~
73
74Here we spell out what files will be set up by :samp:`configure` in the
75:samp:`gcc` directory. Some other files are created as temporary files
76in the configuration process, and are not used in the subsequent
77build; these are not documented.
78
79* :samp:`Makefile` is constructed from :samp:`Makefile.in`, together with
80 the host and target fragments (see :ref:`fragments`) :samp:`t-{target}` and :samp:`x-{host}` from
81 :samp:`config`, if any, and language Makefile fragments
82 :samp:`{language}/Make-lang.in`.
83
84* :samp:`auto-host.h` contains information about the host machine
85 determined by :samp:`configure`. If the host machine is different from
86 the build machine, then :samp:`auto-build.h` is also created,
87 containing such information about the build machine.
88
89* :samp:`config.status` is a script that may be run to recreate the
90 current configuration.
91
92* :samp:`configargs.h` is a header containing details of the arguments
93 passed to :samp:`configure` to configure GCC, and of the thread model
94 used.
95
96* :samp:`cstamp-h` is used as a timestamp.
97
98* If a language :samp:`config-lang.in` file (see :ref:`front-end-config`) sets ``outputs``, then
99 the files listed in ``outputs`` there are also generated.
100
101The following configuration headers are created from the Makefile,
102using :samp:`mkconfig.sh`, rather than directly by :samp:`configure`.
103:samp:`config.h`, :samp:`bconfig.h` and :samp:`tconfig.h` all contain the
104:samp:`xm-{machine}.h` header, if any, appropriate to the host,
105build and target machines respectively, the configuration headers for
106the target, and some definitions; for the host and build machines,
107these include the autoconfigured headers generated by
108:samp:`configure`. The other configuration headers are determined by
109:samp:`config.gcc`. They also contain the typedefs for ``rtx``,
110``rtvec`` and ``tree``.
111
112* :samp:`config.h`, for use in programs that run on the host machine.
113
114* :samp:`bconfig.h`, for use in programs that run on the build machine.
115
116* :samp:`tconfig.h`, for use in programs and libraries for the target
117 machine.
118
119* :samp:`tm_p.h`, which includes the header :samp:`{machine}-protos.h`
120 that contains prototypes for functions in the target
121 :samp:`{machine}.c` file. The
122 :samp:`{machine}-protos.h` header is included after the :samp:`rtl.h`
123 and/or :samp:`tree.h` would have been included.
124 The :samp:`tm_p.h` also
125 includes the header :samp:`tm-preds.h` which is generated by
126 :samp:`genpreds` program during the build to define the declarations
3ed1b4ce 127 and inline functions for the predicate functions.