libstdc++: Update docs on build process and generated files

There are several more sub-directories below 'src' now, with lots more
conveience libraries. Document them all as of GCC 14.

Also document how to regenerate the generated headers under include/bits
and how to update the tzdata.zi file.

libstdc++-v3/ChangeLog:

	* doc/xml/manual/build_hacking.xml: Document generated files.
	Update list of convenience libraries and sub-directories under
	the src directory.
	* doc/html/*: Regenerate.
This commit is contained in:
Jonathan Wakely 2024-03-19 12:58:27 +00:00
parent ef2efc53fd
commit d1b8c2237d
5 changed files with 262 additions and 27 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -554,9 +554,9 @@ baseline file.
make src
</para>
<para>
Generates two convenience libraries, one for C++98 and one for
C++11, various compatibility files for shared and static
libraries, and then collects all the generated bits and creates
Generates several convenience libraries,
various compatibility files for shared and static libraries,
and then collects all the generated bits and creates
the final libstdc++ libraries.
</para>
<orderedlist>
@ -566,8 +566,8 @@ baseline file.
</para>
<para>
Generates a libtool convenience library,
<filename>libc++98convenience</filename> with language-support
routines. Uses the <option>-std=gnu++98</option> dialect.
<filename>libc++98convenience</filename> with the library components
defined by C++98. Uses the <option>-std=gnu++98</option> dialect.
</para>
</listitem>
<listitem>
@ -576,8 +576,84 @@ baseline file.
</para>
<para>
Generates a libtool convenience library,
<filename>libc++11convenience</filename> with language-support
routines. Uses the <option>-std=gnu++11</option> dialect.
<filename>libc++11convenience</filename> with the library components
that were added or changed in C++11.
Uses the <option>-std=gnu++11</option> dialect.
</para>
</listitem>
<listitem>
<para>
make src/c++17
</para>
<para>
Generates a libtool convenience library,
<filename>libc++17convenience</filename> with the library components
that were added or changed in C++17.
Uses the <option>-std=gnu++17</option> dialect.
</para>
</listitem>
<listitem>
<para>
make src/c++20
</para>
<para>
Generates a libtool convenience library,
<filename>libc++20convenience</filename> with the library components
that were added or changed in C++20.
Uses the <option>-std=gnu++20</option> dialect.
</para>
</listitem>
<listitem>
<para>
make src/c++23
</para>
<para>
Generates a libtool convenience library,
<filename>libc++23convenience</filename> with the library components
that were added or changed in C++23.
At the time of writing (GCC 14) this convenience library is included
in <filename>libstdc++exp.a</filename> and not in the final
<filename>libstdc++</filename> libraries.
Uses the <option>-std=gnu++23</option> dialect.
</para>
</listitem>
<listitem>
<para>
make src/filesystem
</para>
<para>
Generates a libtool convenience library,
<filename>libstdc++fsconvenience</filename>,
and a standalone static library,
<filename>libstdc++fs.a</filename>.
These contain definitions of the Filesystem TS extensions.
Uses the <option>-std=gnu++17</option> dialect.
</para>
</listitem>
<listitem>
<para>
make src/libbacktrace
</para>
<para>
Generates a libtool convenience library,
<filename>libstdc++_libbacktrace</filename>,
containing the libbacktrace definitions used by the C++23
<classname>std::stacktrace</classname> feature.
</para>
</listitem>
<listitem>
<para>
make src/experimental
</para>
<para>
Generates a standalone static library,
<filename>libstdc++exp.a</filename>, containing the symbol definitions
for experimental features and extensions. This collects the convenience
libraries <filename>libstdc++fsconvenience</filename>,
<filename>libstdc++_libbacktrace</filename>, and
(at the time of writing) <filename>libc++23convenience</filename>
and combines them into one.
Uses the <option>-std=gnu++17</option> dialect.
</para>
</listitem>
<listitem>
@ -591,10 +667,11 @@ baseline file.
</para>
<para>
Then, collects all the generated convenience libraries, adds in
any required compatibility objects, and creates the final shared
and static libraries: <filename>libstdc++.so</filename> and
<filename>libstdc++.a</filename>.
Then, collects all the generated convenience libraries that weren't
added to <filename>libstdc++exp.a</filename>,
adds in any required compatibility objects,
and creates the final shared and static libraries:
<filename>libstdc++.so</filename> and <filename>libstdc++.a</filename>.
</para>
</listitem>
@ -604,4 +681,69 @@ baseline file.
</section> <!-- make -->
<section xml:id="build_hacking.generated"><info><title>Generated files</title></info>
<para>
Some files in the libstdc++ source tree are auto-generated from other files.
In general, these are not regenerated automatically, so it must be done
manually when the files they depend on are updated.
</para>
<itemizedlist>
<listitem>
<para>
The header file
<filename class="headerfile">include/bits/version.h</filename>
is generated from <filename>version.def</filename> and
<filename>version.tpl</filename> in the same directory.
After editing those files, either run <command>autogen version.def</command>
in the <filename class="directory">include</filename> directory of the
source tree, or run <command>make update-version</command> in the
<filename class="directory">include</filename> directory of the build tree.
</para>
</listitem>
<listitem>
<para>
The header file
<filename class="headerfile">include/bits/unicode-data.h</filename>
is generated by the Python script
<filename>../contrib/unicode/gen_libstdcxx_unicode_data.py</filename>
using data files in the same directory. The script contains information
on which data files it uses and how to update them.
</para>
</listitem>
<listitem>
<para>
The header file
<filename class="headerfile">include/bits/text_encoding-data.h</filename>
is generated by the Python script
<filename>scripts/gen_text_encoding_data.py</filename>
using the CSV file <link xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:href="https://www.iana.org/assignments/character-sets/character-sets-1.csv"/>
from the <link xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:href="https://www.iana.org/time-zones">IANA Character Sets</link>
registry.
</para>
</listitem>
<listitem>
<para>
The data file <filename>src/c++20/tzdata.zi</filename> is copied verbatim
from the
<link xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:href="https://www.iana.org/time-zones">IANA Time Zone Database</link>
(the latest version can be downloaded from
<link xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:href="https://data.iana.org/time-zones/tzdb/tzdata.zi"/>).
Libstdc++ uses this data file to populate a
<classname>std::chrono::tzdb</classname> object in case the system does not
provide a copy of the file.
See <xref linkend="manual.intro.setup.configure"/> for the
<code>--with-libstdcxx-zoneinfo</code> option that determines whether
this file is used.
</para>
</listitem>
</itemizedlist>
</section> <!-- Generated files -->
</section>