@@ -25,6 +25,13 @@ MODSHARED_NAMES= _MODSHARED_NAMES_
2525MODDISABLED_NAMES= _MODDISABLED_NAMES_
2626MODOBJS= _MODOBJS_
2727MODLIBS= _MODLIBS_
28+ # Objects and libraries of the bootstrap modules (Modules/Setup.bootstrap)
29+ # only. These are the only static modules linked into the build helper
30+ # programs (Programs/_freeze_module, _bootstrap_python), so that other
31+ # builtin modules (Modules/Setup.local, MODULE_BUILDTYPE=static) may depend
32+ # on products of those helpers (frozen modules, getpath).
33+ BOOTSTRAP_MODOBJS= _BOOTSTRAP_MODOBJS_
34+ BOOTSTRAP_MODLIBS= _BOOTSTRAP_MODLIBS_
2835
2936# === Variables set by configure
3037VERSION= @VERSION@
@@ -359,11 +366,14 @@ COVERAGE_REPORT_OPTIONS=--rc lcov_branch_coverage=1 --branch-coverage --title "C
359366
360367##########################################################################
361368# Modules
362- MODULE_OBJS= \
363- Modules/config.o \
369+ MODULE_OBJS_COMMON= \
364370 Modules/main.o \
365371 Modules/gcmodule.o
366372
373+ MODULE_OBJS= \
374+ Modules/config.o \
375+ $(MODULE_OBJS_COMMON)
376+
367377IO_H= Modules/_io/_iomodule.h
368378
369379IO_OBJS= \
@@ -614,6 +624,19 @@ LIBRARY_OBJS= \
614624 Modules/getpath.o \
615625 Python/frozen.o
616626
627+ # objects that get linked into the build helper programs
628+ # (Programs/_freeze_module, _bootstrap_python): the core, plus the bootstrap
629+ # modules only (see BOOTSTRAP_MODOBJS). Does not include frozen modules nor
630+ # getpath, which the helpers are used to build.
631+ BOOTSTRAP_LIBRARY_OBJS= \
632+ Modules/getbuildinfo_bootstrap.o \
633+ $(PARSER_OBJS) \
634+ $(OBJECT_OBJS) \
635+ $(PYTHON_OBJS) \
636+ Modules/config_bootstrap.o \
637+ $(MODULE_OBJS_COMMON) \
638+ $(BOOTSTRAP_MODOBJS)
639+
617640LINK_PYTHON_OBJS=@LINK_PYTHON_OBJS@
618641
619642##########################################################################
@@ -1613,7 +1636,7 @@ Modules/Setup.bootstrap: $(srcdir)/Modules/Setup.bootstrap.in config.status
16131636Modules/Setup.stdlib: $(srcdir)/Modules/Setup.stdlib.in config.status
16141637 ./config.status $@
16151638
1616- Makefile Modules/config.c: Makefile.pre \
1639+ Makefile Modules/config.c Modules/config_bootstrap.c : Makefile.pre \
16171640 $(srcdir)/Modules/config.c.in \
16181641 $(MAKESETUP) \
16191642 $(srcdir)/Modules/Setup \
@@ -1624,9 +1647,9 @@ Makefile Modules/config.c: Makefile.pre \
16241647 -s Modules \
16251648 Modules/Setup.local \
16261649 Modules/Setup.stdlib \
1627- Modules/Setup.bootstrap \
1650+ -b Modules/Setup.bootstrap \
16281651 $(srcdir)/Modules/Setup
1629- @mv config.c Modules
1652+ @mv config.c config_bootstrap.c Modules
16301653 @echo "The Makefile was updated, you may need to re-run make."
16311654
16321655.PHONY: regen-test-frozenmain
@@ -1661,9 +1684,9 @@ BOOTSTRAP_HEADERS = \
16611684
16621685Programs/_bootstrap_python.o: Programs/_bootstrap_python.c $(BOOTSTRAP_HEADERS) $(PYTHON_HEADERS)
16631686
1664- _bootstrap_python: $(LIBRARY_OBJS_OMIT_FROZEN ) Programs/_bootstrap_python.o Modules/getpath.o Modules/Setup.local
1665- $(LINKCC) $(PY_LDFLAGS_NOLTO) -o $@ $(LIBRARY_OBJS_OMIT_FROZEN ) \
1666- Programs/_bootstrap_python.o Modules/getpath.o $(LIBS) $(MODLIBS ) $(SYSLIBS)
1687+ _bootstrap_python: $(BOOTSTRAP_LIBRARY_OBJS ) Programs/_bootstrap_python.o Modules/getpath.o Modules/Setup.local
1688+ $(LINKCC) $(PY_LDFLAGS_NOLTO) -o $@ $(BOOTSTRAP_LIBRARY_OBJS ) \
1689+ Programs/_bootstrap_python.o Modules/getpath.o $(LIBS) $(BOOTSTRAP_MODLIBS ) $(SYSLIBS)
16671690 # Dummy pybuilddir.txt is needed for _bootstrap_python to be runnable
16681691 @echo "none" > ./pybuilddir.txt
16691692
@@ -1681,6 +1704,9 @@ _bootstrap_python: $(LIBRARY_OBJS_OMIT_FROZEN) Programs/_bootstrap_python.o Modu
16811704#
16821705# Standard build process:
16831706# 1) compile minimal core objects for Py_Compile*() and PyMarshal_Write*().
1707+ # Only the bootstrap modules (Modules/Setup.bootstrap) are part of these
1708+ # objects (see BOOTSTRAP_LIBRARY_OBJS), so other builtin modules may
1709+ # depend on the output of the following steps.
16841710# 2) build Programs/_freeze_module binary.
16851711# 3) create frozen module headers for importlib and getpath.
16861712# 4) build _bootstrap_python binary.
@@ -1753,8 +1779,8 @@ Programs/_freeze_module.o: Programs/_freeze_module.c Makefile
17531779
17541780Modules/getpath_noop.o: $(srcdir)/Modules/getpath_noop.c Makefile
17551781
1756- Programs/_freeze_module: Programs/_freeze_module.o Modules/getpath_noop.o $(LIBRARY_OBJS_OMIT_FROZEN )
1757- $(LINKCC) $(PY_CORE_LDFLAGS) -o $@ Programs/_freeze_module.o Modules/getpath_noop.o $(LIBRARY_OBJS_OMIT_FROZEN ) $(LIBS) $(MODLIBS ) $(SYSLIBS)
1782+ Programs/_freeze_module: Programs/_freeze_module.o Modules/getpath_noop.o $(BOOTSTRAP_LIBRARY_OBJS )
1783+ $(LINKCC) $(PY_CORE_LDFLAGS) -o $@ Programs/_freeze_module.o Modules/getpath_noop.o $(BOOTSTRAP_LIBRARY_OBJS ) $(LIBS) $(BOOTSTRAP_MODLIBS ) $(SYSLIBS)
17581784
17591785# We manually freeze getpath.py rather than through freeze_modules
17601786Python/frozen_modules/getpath.h: Modules/getpath.py $(FREEZE_MODULE_BOOTSTRAP_DEPS)
@@ -1907,11 +1933,24 @@ Modules/getbuildinfo.o: $(PARSER_OBJS) \
19071933 $(MODOBJS) \
19081934 $(DTRACE_OBJS) \
19091935 $(srcdir)/Modules/getbuildinfo.c
1910- $(CC) -c $(PY_CORE_CFLAGS) \
1936+ $(CC) -c $(PY_CORE_CFLAGS) $(GETBUILDINFO_CFLAGS) \
1937+ -o $@ $(srcdir)/Modules/getbuildinfo.c
1938+
1939+ # Separate object for the build helper programs: it must not depend on
1940+ # $(MODOBJS), which may in turn depend on the helpers' output.
1941+ Modules/getbuildinfo_bootstrap.o: $(PARSER_OBJS) \
1942+ $(OBJECT_OBJS) \
1943+ $(PYTHON_OBJS) \
1944+ $(MODULE_OBJS_COMMON) \
1945+ $(BOOTSTRAP_MODOBJS) \
1946+ $(srcdir)/Modules/getbuildinfo.c
1947+ $(CC) -c $(PY_CORE_CFLAGS) $(GETBUILDINFO_CFLAGS) \
1948+ -o $@ $(srcdir)/Modules/getbuildinfo.c
1949+
1950+ GETBUILDINFO_CFLAGS= \
19111951 -DGITVERSION="\"`LC_ALL=C $(GITVERSION)`\"" \
19121952 -DGITTAG="\"`LC_ALL=C $(GITTAG)`\"" \
1913- -DGITBRANCH="\"`LC_ALL=C $(GITBRANCH)`\"" \
1914- -o $@ $(srcdir)/Modules/getbuildinfo.c
1953+ -DGITBRANCH="\"`LC_ALL=C $(GITBRANCH)`\""
19151954
19161955Modules/getpath.o: $(srcdir)/Modules/getpath.c Python/frozen_modules/getpath.h Makefile $(PYTHON_HEADERS)
19171956 $(CC) -c $(PY_CORE_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \
@@ -2279,7 +2318,7 @@ regen-slots: Python/slots.toml
22792318 $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_slots.py \
22802319 --generate-all
22812320
2282- $(LIBRARY_OBJS) $(MODOBJS) Programs/python.o $(PLATFORM_MAIN_OBJS): $(PYTHON_HEADERS)
2321+ $(LIBRARY_OBJS) $(MODOBJS) Modules/config_bootstrap.o Programs/python.o $(PLATFORM_MAIN_OBJS): $(PYTHON_HEADERS)
22832322
22842323
22852324######################################################################
@@ -3365,7 +3404,7 @@ clean: clean-profile clean-jit-stencils
33653404clobber: clean
33663405 -rm -f $(BUILDPYTHON) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \
33673406 tags TAGS \
3368- config.cache config.log pyconfig.h Modules/config.c
3407+ config.cache config.log pyconfig.h Modules/config.c Modules/config_bootstrap.c
33693408 -rm -rf build platform
33703409 -rm -rf $(PYTHONFRAMEWORKDIR)
33713410 -rm -rf Platforms/Apple/iOS/Frameworks
0 commit comments