On Thu, May 21, 2026 at 7:57 AM Ben Hutchings <[email protected]> wrote: > > perf and rtla currently don't fully support out-of-tree builds, as > they may still create files in their source directory. This series > fixes all the instances of this problem that I have found. > > Ben.
Thanks for the cleanup! I ran Sashiko locally and it noted that we should also fix the clean steps to remove these files (I'll copy the full text below). Reviewed-by: Ian Rogers <[email protected]> ``` commit cf212be834ce6b0df5cccdbc4ad977a917ff8e48 Author: Ben Hutchings <[email protected]> perf tools: Put Python egg info in output directory Installing the Python extension currently creates an egg-info directory in the source tree, preventing a fully out-of-tree build. Add the necessary runes to the setup.py comamnd line to relocate the egg-info directory in an out-of-tree build. > diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf > index fc92d6ceac5b..b9a9bdddb89a 100644 > --- a/tools/perf/Makefile.perf > +++ b/tools/perf/Makefile.perf > @@ -905,7 +910,9 @@ install-bin: install-tools install-tests > install: install-bin try-install-man > > install-python_ext: > - $(PYTHON_WORD) util/setup.py --quiet install --root='/$(DESTDIR_SQ)' > + $(PYTHON_WORD) util/setup.py --quiet \ > + $(if $(OUTPUT),egg_info --egg-base $(OUTPUT)) \ > + install --root='/$(DESTDIR_SQ)' This relocates the egg-info directory to the output directory, which helps keep the source tree clean. However, does the `python-clean` target need to be updated to clean up this directory? Currently, `python-clean` is defined as: python-clean := $(call QUIET_CLEAN, python) $(RM) -r $(PYTHON_EXTBUILD) $(OUTPUT)python/perf*.so Should we also clean `$(OUTPUT)/perf.egg-info` (or `perf.egg-info` for in-tree builds) to ensure `make clean` removes all generated python metadata? For example: python-clean := $(call QUIET_CLEAN, python) \ $(RM) -r $(PYTHON_EXTBUILD) $(OUTPUT)python/perf*.so \ $(OUTPUT)perf.egg-info perf.egg-info commit dd754ea75966ec7ade41500afeb32d944f20a8f9 Author: Ben Hutchings <[email protected]> perf tools: Put Python bytecode in output directory The PMU events are processed into C sources by Python scripts, which normally results in writing bytecode for each module into the source tree. This prevents a fully out-of-tree build. To fix this, set $PYTHONPYCACHEPREFIX to relocate the bytecode cache directory in an out-of-tree build. > diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf > index fc92d6ceac5b..b9a9bdddb89a 100644 > --- a/tools/perf/Makefile.perf > +++ b/tools/perf/Makefile.perf > @@ -400,6 +400,11 @@ PYTHON_EXTBUILD_LIB := $(PYTHON_EXTBUILD)lib/ > PYTHON_EXTBUILD_TMP := $(PYTHON_EXTBUILD)tmp/ > export PYTHON_EXTBUILD_LIB PYTHON_EXTBUILD_TMP > > +# Put Python bytecode in output directory > +ifdef OUTPUT > +export PYTHONPYCACHEPREFIX := $(OUTPUT)/__pycache__ > +endif > + > python-clean := $(call QUIET_CLEAN, python) $(RM) -r $(PYTHON_EXTBUILD) $(OUTPUT)python/perf*.so Similar to the egg-info relocation, does `python-clean` need to clean up the relocated `__pycache__` directory under `$(OUTPUT)`? If `PYTHONPYCACHEPREFIX` is exported to `$(OUTPUT)/__pycache__`, running `make clean` currently leaves this directory behind. Should we add it to the `RM` list in `python-clean`? For example: python-clean := $(call QUIET_CLEAN, python) \ $(RM) -r $(PYTHON_EXTBUILD) $(OUTPUT)python/perf*.so \ $(if $(OUTPUT),$(OUTPUT)/__pycache__) ``` Thanks, Ian > Ben Hutchings (3): > rtla: Fix output files in source tree > perf tools: Put Python egg info in output directory > perf tools: Put Python bytecode in output directory > > tools/perf/Makefile.perf | 9 ++++++++- > tools/tracing/rtla/Makefile | 31 ++++++++++++++++++----------- > tools/tracing/rtla/tests/timerlat.t | 4 ++-- > 3 files changed, 29 insertions(+), 15 deletions(-) >
