@@ -146,6 +146,9 @@ recommended for best performance.
146
146
Enable Profile Guided Optimization (PGO) using :envvar: `PROFILE_TASK `
147
147
(disabled by default).
148
148
149
+ The C compiler Clang requires ``llvm-profdata `` program for PGO. On
150
+ macOS, GCC also requires it: GCC is just an alias to Clang on macOS.
151
+
149
152
Disable also semantic interposition in libpython if ``--enable-shared `` and
150
153
GCC is used: add ``-fno-semantic-interposition `` to the compiler and linker
151
154
flags.
@@ -168,6 +171,9 @@ recommended for best performance.
168
171
169
172
Enable Link Time Optimization (LTO) in any build (disabled by default).
170
173
174
+ The C compiler Clang requires ``llvm-ar `` for LTO, as well as an LTO-aware
175
+ linker (``ld.gold `` or ``lld ``).
176
+
171
177
.. versionadded :: 3.6
172
178
173
179
.. cmdoption :: --with-computed-gotos
@@ -469,19 +475,100 @@ See ``Mac/README.rst``.
469
475
:option: `--enable-framework ` is set (default: ``Python ``).
470
476
471
477
478
+ Python Build System
479
+ ===================
480
+
481
+ Main files of the build system
482
+ ------------------------------
483
+
484
+ * :file: `configure.ac ` => :file: `configure `;
485
+ * :file: `Makefile.pre.in ` => :file: `Makefile ` (created by :file: `configure `);
486
+ * :file: `pyconfig.h ` (created by :file: `configure `);
487
+ * :file: `Modules/Setup `: C extensions built by the Makefile using
488
+ :file: `Module/makesetup ` shell script;
489
+ * :file: `setup.py `: C extensions built using the :mod: `distutils ` module.
490
+
491
+ Main build steps
492
+ ----------------
493
+
494
+ * C files (``.c ``) are built as object files (``.o ``).
495
+ * A static ``libpython `` library (``.a ``) is created from objects files.
496
+ * ``python.o `` and the static ``libpython `` library are linked into the
497
+ final ``python `` program.
498
+ * C extensions are built by the Makefile (see :file: `Modules/Setup `)
499
+ and ``python setup.py build ``.
500
+
501
+ Main Makefile targets
502
+ ---------------------
503
+
504
+ * ``make ``: Build Python with the standard library.
505
+ * ``make platform: ``: build the ``python `` program, but don't build the
506
+ standard library extension modules.
507
+ * ``make profile-opt ``: build Python using Profile Guided Optimization (PGO).
508
+ You can use the configure :option: `--enable-optimizations ` option to make
509
+ this the default target of the ``make `` command (``make all `` or just
510
+ ``make ``).
511
+ * ``make buildbottest ``: Build Python and run the Python test suite, the same
512
+ way than buildbots test Python. Set ``TESTTIMEOUT `` variable (in seconds)
513
+ to change the test timeout (1200 by default: 20 minutes).
514
+ * ``make install ``: Build and install Python.
515
+ * ``make regen-all ``: Regenerate (almost) all generated files;
516
+ ``make regen-stdlib-module-names `` and ``autoconf `` must be run separately
517
+ for the remaining generated files.
518
+ * ``make clean ``: Remove built files.
519
+ * ``make distclean ``: Same than ``make clean ``, but remove also files created
520
+ by the configure script.
521
+
522
+ C extensions
523
+ ------------
524
+
525
+ Some C extensions are built as built-in modules, like the ``sys `` module.
526
+ They are built with the ``Py_BUILD_CORE_BUILTIN `` macro defined.
527
+ Built-in modules have no ``__file__ `` attribute::
528
+
529
+ >>> import sys
530
+ >>> sys
531
+ <module 'sys' (built-in)>
532
+ >>> sys.__file__
533
+ Traceback (most recent call last):
534
+ File "<stdin>", line 1, in <module>
535
+ AttributeError: module 'sys' has no attribute '__file__'
536
+
537
+ Other C extensins are built as dynamic libraires, like the ``_asyncio `` module.
538
+ They are built with the ``Py_BUILD_CORE_MODULE `` macro defined.
539
+ Example on Linux x86-64::
540
+
541
+ >>> import _asyncio
542
+ >>> _asyncio
543
+ <module '_asyncio' from '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'>
544
+ >>> _asyncio.__file__
545
+ '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'
546
+
547
+ :file: `Modules/Setup ` is used to generate Makefile targets to build C extensions.
548
+ At the beginning of the files, C extensions are built as built-in modules.
549
+ Extensions defined after the ``*shared* `` marker are built as dynamic libraries.
550
+
551
+ The :file: `setup.py ` script only builds C extensions as shared libraries using
552
+ the :mod: `distutils ` module.
553
+
554
+ The :c:macro: `PyAPI_FUNC() `, :c:macro: `PyAPI_API() ` and
555
+ :c:macro: `PyMODINIT_FUNC() ` macros of :file: `Include/pyport.h ` are defined
556
+ differently depending if the ``Py_BUILD_CORE_MODULE `` macro is defined:
557
+
558
+ * Use ``Py_EXPORTED_SYMBOL `` if the ``Py_BUILD_CORE_MODULE `` is defined
559
+ * Use ``Py_IMPORTED_SYMBOL `` otherwise.
560
+
561
+ If the ``Py_BUILD_CORE_BUILTIN `` macro is used by mistake on a C extension
562
+ built as a shared library, its ``PyInit_xxx() `` function is not exported,
563
+ causing an :exc: `ImportError ` on import.
564
+
565
+
472
566
Compiler and linker flags
473
567
=========================
474
568
475
569
Options set by the ``./configure `` script and environment variables and used by
476
570
``Makefile ``.
477
571
478
- Main files of the Python build system:
479
-
480
- * :file: `configure.ac ` => :file: `configure `;
481
- * :file: `Makefile.pre.in ` => :file: `Makefile ` (created by :file: `configure `);
482
- * :file: `pyconfig.h ` (created by :file: `configure `);
483
- * :file: `Modules/Setup `.
484
-
485
572
Preprocessor flags
486
573
------------------
487
574
@@ -521,6 +608,16 @@ Compiler flags
521
608
522
609
Example: ``gcc -pthread ``.
523
610
611
+ .. envvar :: MAINCC
612
+
613
+ C compiler command used to build the ``main() `` function of programs like
614
+ ``python ``.
615
+
616
+ Variable set by the :option: `--with-cxx-main ` option of the configure
617
+ script.
618
+
619
+ Default: ``$(CC) ``.
620
+
524
621
.. envvar :: CXX
525
622
526
623
C++ compiler command.
@@ -619,10 +716,22 @@ Compiler flags
619
716
620
717
.. versionadded :: 3.8
621
718
719
+ .. envvar :: PURIFY
720
+
721
+ Purify command. Purify is a memory debugger program.
722
+
723
+ Default: empty string (not used).
724
+
622
725
623
726
Linker flags
624
727
------------
625
728
729
+ .. envvar :: LINKCC
730
+
731
+ Linker command used to build programs like ``python `` and ``_testembed ``.
732
+
733
+ Default: ``$(PURIFY) $(MAINCC) ``.
734
+
626
735
.. envvar :: CONFIGURE_LDFLAGS
627
736
628
737
Value of :envvar: `LDFLAGS ` variable passed to the ``./configure `` script.
0 commit comments