Skip to content

Commit

Permalink
pythongh-106259: Add minimal help target to Makefile (python#106260)
Browse files Browse the repository at this point in the history
Co-authored-by: Erlend E. Aasland <erlend@python.org>
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
Co-authored-by: Victor Stinner <vstinner@python.org>
  • Loading branch information
4 people authored and adorilson committed Mar 25, 2024
1 parent 6f2f845 commit fb3d535
Show file tree
Hide file tree
Showing 2 changed files with 128 additions and 26 deletions.
130 changes: 104 additions & 26 deletions Doc/using/configure.rst
Original file line number Diff line number Diff line change
Expand Up @@ -991,32 +991,99 @@ Main build steps
Main Makefile targets
---------------------

* ``make``: Build Python with the standard library.
* ``make platform:``: build the ``python`` program, but don't build the
standard library extension modules.
* ``make profile-opt``: build Python using Profile Guided Optimization (PGO).
You can use the configure :option:`--enable-optimizations` option to make
this the default target of the ``make`` command (``make all`` or just
``make``).

* ``make test``: Build Python and run the Python test suite with ``--fast-ci``
option. Variables:

* ``TESTOPTS``: additional regrtest command line options.
* ``TESTPYTHONOPTS``: additional Python command line options.
* ``TESTTIMEOUT``: timeout in seconds (default: 20 minutes).

* ``make buildbottest``: Similar to ``make test``, but use ``--slow-ci``
option and default timeout of 20 minutes, instead of ``--fast-ci`` option
and a default timeout of 10 minutes.

* ``make install``: Build and install Python.
* ``make regen-all``: Regenerate (almost) all generated files;
``make regen-stdlib-module-names`` and ``autoconf`` must be run separately
for the remaining generated files.
* ``make clean``: Remove built files.
* ``make distclean``: Same than ``make clean``, but remove also files created
by the configure script.
make
^^^^

For the most part, when rebuilding after editing some code or
refreshing your checkout from upstream, all you need to do is execute
``make``, which (per Make's semantics) builds the default target, the
first one defined in the Makefile. By tradition (including in the
CPython project) this is usually the ``all`` target. The
``configure`` script expands an ``autoconf`` variable,
``@DEF_MAKE_ALL_RULE@`` to describe precisely which targets ``make
all`` will build. The three choices are:

* ``profile-opt`` (configured with ``--enable-optimizations``)
* ``build_wasm`` (configured with ``--with-emscripten-target``)
* ``build_all`` (configured without explicitly using either of the others)

Depending on the most recent source file changes, Make will rebuild
any targets (object files and executables) deemed out-of-date,
including running ``configure`` again if necessary. Source/target
dependencies are many and maintained manually however, so Make
sometimes doesn't have all the information necessary to correctly
detect all targets which need to be rebuilt. Depending on which
targets aren't rebuilt, you might experience a number of problems. If
you have build or test problems which you can't otherwise explain,
``make clean && make`` should work around most dependency problems, at
the expense of longer build times.


make platform
^^^^^^^^^^^^^

Build the ``python`` program, but don't build the standard library
extension modules. This generates a file named ``platform`` which
contains a single line describing the details of the build platform,
e.g., ``macosx-14.3-arm64-3.12`` or ``linux-x86_64-3.13``.


make profile-opt
^^^^^^^^^^^^^^^^

Build Python using profile-guided optimization (PGO). You can use the
configure :option:`--enable-optimizations` option to make this the
default target of the ``make`` command (``make all`` or just
``make``).



make clean
^^^^^^^^^^

Remove built files.


make distclean
^^^^^^^^^^^^^^

In addition to the the work done by ``make clean``, remove files
created by the configure script. ``configure`` will have to be run
before building again. [#]_


make install
^^^^^^^^^^^^

Build the ``all`` target and install Python.


make test
^^^^^^^^^

Build the ``all`` target and run the Python test suite with the
``--fast-ci`` option. Variables:

* ``TESTOPTS``: additional regrtest command-line options.
* ``TESTPYTHONOPTS``: additional Python command-line options.
* ``TESTTIMEOUT``: timeout in seconds (default: 10 minutes).


make buildbottest
^^^^^^^^^^^^^^^^^

This is similar to ``make test``, but uses the ``--slow-ci``
option and default timeout of 20 minutes, instead of ``--fast-ci`` option.


make regen-all
^^^^^^^^^^^^^^

Regenerate (almost) all generated files. These include (but are not
limited to) bytecode cases, and parser generator file.
``make regen-stdlib-module-names`` and ``autoconf`` must be run
separately for the remaining `generated files <#generated-files>`_.


C extensions
------------
Expand Down Expand Up @@ -1311,3 +1378,14 @@ Linker flags
Linker flags used for building the interpreter object files.

.. versionadded:: 3.8


.. rubric:: Footnotes

.. [#] ``git clean -fdx`` is an even more extreme way to "clean" your
checkout. It removes all files not known to Git.
When bug hunting using ``git bisect``, this is
`recommended between probes <https://github.com/python/cpython/issues/114505#issuecomment-1907021718>`_
to guarantee a completely clean build. **Use with care**, as it
will delete all files not checked into Git, including your
new, uncommitted work.
24 changes: 24 additions & 0 deletions Makefile.pre.in
Original file line number Diff line number Diff line change
Expand Up @@ -653,6 +653,30 @@ all: @DEF_MAKE_ALL_RULE@
# all.
.PHONY: all

# Provide quick help for common Makefile targets.
.PHONY: help
help:
@echo "Run 'make' to build the Python executable and extension modules"
@echo ""
@echo "or 'make <target>' where <target> is one of:"
@echo " test run the test suite"
@echo " install install built files"
@echo " regen-all regenerate a number of generated source files"
@echo " clinic run Argument Clinic over source files"
@echo ""
@echo " clean to remove build files"
@echo " distclean 'clean' + remove other generated files (patch, exe, etc)"
@echo ""
@echo " recheck rerun configure with last cmdline options"
@echo " reindent reindent .py files in Lib directory"
@echo " tags build a tags file (useful for Emacs and other editors)"
@echo " list-targets list all targets in the Makefile"

# Display a full list of Makefile targets
.PHONY: list-targets
list-targets:
@grep -E '^[A-Za-z][-A-Za-z0-9]+:' Makefile | awk -F : '{print $$1}'

.PHONY: build_all
build_all: check-clean-src $(BUILDPYTHON) platform sharedmods \
gdbhooks Programs/_testembed scripts checksharedmods rundsymutil
Expand Down

0 comments on commit fb3d535

Please sign in to comment.