]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/doc/install/building/building-a-native-compiler.rst
sphinx: add missing trailing newline
[thirdparty/gcc.git] / gcc / doc / install / building / building-a-native-compiler.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
6Building a native compiler
7**************************
8
9For a native build, the default configuration is to perform
10a 3-stage bootstrap of the compiler when :samp:`make` is invoked.
11This will build the entire GCC system and ensure that it compiles
12itself correctly. It can be disabled with the :option:`--disable-bootstrap`
13parameter to :samp:`configure`, but bootstrapping is suggested because
14the compiler will be tested more completely and could also have
15better performance.
16
17The bootstrapping process will complete the following steps:
18
19* Build tools necessary to build the compiler.
20
21* Perform a 3-stage bootstrap of the compiler. This includes building
22 three times the target tools for use by the compiler such as binutils
23 (bfd, binutils, gas, gprof, ld, and opcodes) if they have been
24 individually linked or moved into the top level GCC source tree before
25 configuring.
26
27* Perform a comparison test of the stage2 and stage3 compilers.
28
29* Build runtime libraries using the stage3 compiler from the previous step.
30
31If you are short on disk space you might consider :samp:`make
32bootstrap-lean` instead. The sequence of compilation is the
33same described above, but object files from the stage1 and
34stage2 of the 3-stage bootstrap of the compiler are deleted as
35soon as they are no longer needed.
36
37If you wish to use non-default GCC flags when compiling the stage2
38and stage3 compilers, set ``BOOT_CFLAGS`` on the command line when
39doing :samp:`make`. For example, if you want to save additional space
40during the bootstrap and in the final installation as well, you can
41build the compiler binaries without debugging information as in the
42following example. This will save roughly 40% of disk space both for
43the bootstrap and the final installation. (Libraries will still contain
44debugging information.)
45
46.. code-block:: bash
47
48 make BOOT_CFLAGS='-O' bootstrap
49
50You can place non-default optimization flags into ``BOOT_CFLAGS`` ; they
51are less well tested here than the default of :samp:`-g -O2`, but should
52still work. In a few cases, you may find that you need to specify special
53flags such as :option:`-msoft-float` here to complete the bootstrap; or,
54if the native compiler miscompiles the stage1 compiler, you may need
55to work around this, by choosing ``BOOT_CFLAGS`` to avoid the parts
56of the stage1 compiler that were miscompiled, or by using :samp:`make
57bootstrap4` to increase the number of stages of bootstrap.
58
59``BOOT_CFLAGS`` does not apply to bootstrapped target libraries.
60Since these are always compiled with the compiler currently being
61bootstrapped, you can use ``CFLAGS_FOR_TARGET`` to modify their
62compilation flags, as for non-bootstrapped target libraries.
63Again, if the native compiler miscompiles the stage1 compiler, you may
64need to work around this by avoiding non-working parts of the stage1
65compiler. Use ``STAGE1_TFLAGS`` to this end.
66
67If you used the flag :option:`--enable-languages=...` to restrict
68the compilers to be built, only those you've actually enabled will be
69built. This will of course only build those runtime libraries, for
70which the particular compiler has been built. Please note,
71that re-defining :envvar:`LANGUAGES` when calling :samp:`make`
72**does not** work anymore!
73
74If the comparison of stage2 and stage3 fails, this normally indicates
75that the stage2 compiler has compiled GCC incorrectly, and is therefore
76a potentially serious bug which you should investigate and report. (On
77a few systems, meaningful comparison of object files is impossible; they
78always appear 'different'. If you encounter this problem, you will
79need to disable comparison in the :samp:`Makefile`.)
80
81If you do not want to bootstrap your compiler, you can configure with
82:option:`--disable-bootstrap`. In particular cases, you may want to
83bootstrap your compiler even if the target system is not the same as
84the one you are building on: for example, you could build a
85``powerpc-unknown-linux-gnu`` toolchain on a
86``powerpc64-unknown-linux-gnu`` host. In this case, pass
87:option:`--enable-bootstrap` to the configure script.
88
89``BUILD_CONFIG`` can be used to bring in additional customization
90to the build. It can be set to a whitespace-separated list of names.
91For each such ``NAME``, top-level :samp:`config/ ``NAME``.mk` will
92be included by the top-level :samp:`Makefile`, bringing in any settings
93it contains. The default ``BUILD_CONFIG`` can be set using the
94configure option :option:`--with-build-config=NAME...`. Some
95examples of supported build configurations are:
96
97bootstrap-O1
98 Removes any :option:`-O` -started option from ``BOOT_CFLAGS``, and adds
99 :option:`-O1` to it. :samp:`BUILD_CONFIG=bootstrap-O1` is equivalent to
100 :samp:`BOOT_CFLAGS='-g -O1'`.
101
102bootstrap-O3 bootstrap-Og
103 Analogous to ``bootstrap-O1``.
104
105bootstrap-lto
106 Enables Link-Time Optimization for host tools during bootstrapping.
107 :samp:`BUILD_CONFIG=bootstrap-lto` is equivalent to adding
108 :option:`-flto` to :samp:`BOOT_CFLAGS`. This option assumes that the host
109 supports the linker plugin (e.g. GNU ld version 2.21 or later or GNU gold
110 version 2.21 or later).
111
112bootstrap-lto-noplugin
113 This option is similar to ``bootstrap-lto``, but is intended for
114 hosts that do not support the linker plugin. Without the linker plugin
115 static libraries are not compiled with link-time optimizations. Since
116 the GCC middle end and back end are in :samp:`libbackend.a` this means
117 that only the front end is actually LTO optimized.
118
119bootstrap-lto-lean
120 This option is similar to ``bootstrap-lto``, but is intended for
121 faster build by only using LTO in the final bootstrap stage.
122 With :samp:`make profiledbootstrap` the LTO frontend
123 is trained only on generator files.
124
125bootstrap-debug
126 Verifies that the compiler generates the same executable code, whether
127 or not it is asked to emit debug information. To this end, this
128 option builds stage2 host programs without debug information, and uses
129 :samp:`contrib/compare-debug` to compare them with the stripped stage3
130 object files. If ``BOOT_CFLAGS`` is overridden so as to not enable
131 debug information, stage2 will have it, and stage3 won't. This option
132 is enabled by default when GCC bootstrapping is enabled, if
133 ``strip`` can turn object files compiled with and without debug
134 info into identical object files. In addition to better test
135 coverage, this option makes default bootstraps faster and leaner.
136
137bootstrap-debug-big
138 Rather than comparing stripped object files, as in
139 ``bootstrap-debug``, this option saves internal compiler dumps
140 during stage2 and stage3 and compares them as well, which helps catch
141 additional potential problems, but at a great cost in terms of disk
142 space. It can be specified in addition to :samp:`bootstrap-debug`.
143
144bootstrap-debug-lean
145 This option saves disk space compared with ``bootstrap-debug-big``,
146 but at the expense of some recompilation. Instead of saving the dumps
147 of stage2 and stage3 until the final compare, it uses
148 :option:`-fcompare-debug` to generate, compare and remove the dumps
149 during stage3, repeating the compilation that already took place in
150 stage2, whose dumps were not saved.
151
152bootstrap-debug-lib
153 This option tests executable code invariance over debug information
154 generation on target libraries, just like ``bootstrap-debug-lean``
155 tests it on host programs. It builds stage3 libraries with
156 :option:`-fcompare-debug`, and it can be used along with any of the
157 ``bootstrap-debug`` options above.
158
159 There aren't ``-lean`` or ``-big`` counterparts to this option
160 because most libraries are only build in stage3, so bootstrap compares
161 would not get significant coverage. Moreover, the few libraries built
162 in stage2 are used in stage3 host programs, so we wouldn't want to
163 compile stage2 libraries with different options for comparison purposes.
164
165bootstrap-debug-ckovw
166 Arranges for error messages to be issued if the compiler built on any
167 stage is run without the option :option:`-fcompare-debug`. This is
168 useful to verify the full :option:`-fcompare-debug` testing coverage. It
169 must be used along with ``bootstrap-debug-lean`` and
170 ``bootstrap-debug-lib``.
171
172bootstrap-cet
173 This option enables Intel CET for host tools during bootstrapping.
174 :samp:`BUILD_CONFIG=bootstrap-cet` is equivalent to adding
175 :option:`-fcf-protection` to :samp:`BOOT_CFLAGS`. This option
176 assumes that the host supports Intel CET (e.g. GNU assembler version
177 2.30 or later).
178
179bootstrap-time
180 Arranges for the run time of each program started by the GCC driver,
181 built in any stage, to be logged to :samp:`time.log`, in the top level of
182 the build tree.
183
184bootstrap-asan
185 Compiles GCC itself using Address Sanitization in order to catch invalid memory
186 accesses within the GCC code.
187
188bootstrap-hwasan
189 Compiles GCC itself using HWAddress Sanitization in order to catch invalid
190 memory accesses within the GCC code. This option is only available on AArch64
3ed1b4ce 191 systems that are running Linux kernel version 5.4 or later.