Re: [PATCH v3 0/9] perf build: Make build-test faster

From: Arnaldo Carvalho de Melo
Date: Fri Jan 15 2016 - 09:55:21 EST


Em Fri, Jan 15, 2016 at 11:36:16AM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Fri, Jan 15, 2016 at 11:20:05AM +0100, Jiri Olsa escreveu:
> > On Fri, Jan 15, 2016 at 04:00:12AM +0000, Wang Nan wrote:
> > > Utilise Jiri's feature-dump make target to avoid make build-test check
> > > features too many times.
> > >
> > > v2 -> v3: add $(O_OPT) to 'make clean' to ensure the correctness of
> > > config-clean.
> > >
> > > Jiri Olsa (2):
> > > perf build: Add feature-dump target
> > > perf build: Introduce FEATURES_DUMP make variable
> > >
> > > Wang Nan (7):
> > > perf build: Set parallel making options build-test
> > > perf build: Pass O option to Makefile.perf in build-test
> > > perf build: Test correct path of perf in build-test
> > > perf build: Pass O option to kernel makefile in build-test
> > > tools build: Allow subprojects select all feature checkers
> > > perf build: Select all feature checkers for feature-dump
> > > perf build: Use feature dump file for build-test
> > >
> > > tools/build/Makefile.feature | 21 ++++++++++-
> > > tools/perf/Makefile.perf | 34 +++++++++++++++++-
> > > tools/perf/config/Makefile | 4 +++
> > > tools/perf/tests/make | 86 ++++++++++++++++++++++++++++++++++++--------
> > > 4 files changed, 128 insertions(+), 17 deletions(-)
> >
> > got error on:
> >
> > [jolsa@krava perf]$ make -f tests/make
> > Testing Makefile
> > readlink: missing operand
> > Try 'readlink --help' for more information.
> > - /BUILD_TEST_FEATURE_DUMP: cd . && make FEATURE_DUMP_COPY=/BUILD_TEST_FEATURE_DUMP feature-dump
> > cd . && make FEATURE_DUMP_COPY=/BUILD_TEST_FEATURE_DUMP feature-dump
> > tests/make:329: recipe for target '/BUILD_TEST_FEATURE_DUMP' failed
> > make[1]: *** [/BUILD_TEST_FEATURE_DUMP] Error 2
> > tests/make:7: recipe for target 'all' failed
> > make: *** [all] Error 2
>
> You mean with all patches applied, right? I haven't got that far, first
> and second patches are ok by now, I'm failing at patch 3, checking if
> setting up the python stuff to honour O= is in a later patch...
>
> [acme@zoo linux]$ rm -rf /tmp/build/perf ; mkdir -p /tmp/build/perf ; make -C tools/perf O=/tmp/build/perf build-test
> make: Entering directory '/home/git/linux/tools/perf'
> Testing Makefile
> - make_no_ui: cd . && make -f Makefile DESTDIR=/tmp/tmp.RYVWn1yMBU NO_NEWT=1 NO_SLANG=1 NO_GTK2=1
> - make_tags: cd . && make -f Makefile DESTDIR=/tmp/tmp.iNjVFs9Eje tags - make_python_perf_so: cd . && make -f Makefile DESTDIR=/tmp/tmp.mvHDSUV1pl python/perf.so
> cd . && make -f Makefile DESTDIR=/tmp/tmp.mvHDSUV1pl python/perf.so
> BUILD: Doing 'make -j4' parallel build
>
> Auto-detecting system features:
> ... dwarf: [ on ]
> ... glibc: [ on ]
> ... gtk2: [ on ]
> ... libaudit: [ on ]
> ... libbfd: [ on ]
> ... libelf: [ on ]
> ... libnuma: [ on ]
> ... numa_num_possible_cpus: [ on ]
> ... libperl: [ on ]
> ... libpython: [ on ]
> ... libslang: [ on ]
> ... libunwind: [ on ]
> ... libdw-dwarf-unwind: [ on ]
> ... zlib: [ on ]
> ... lzma: [ on ]
> ... get_cpuid: [ on ]
> ... bpf: [ on ]
>
> make[4]: Nothing to be done for 'python/perf.so'.
> test: test -f /tmp/build/perf/python/perf.so
> tests/make:272: recipe for target 'make_python_perf_so' failed
> make[2]: *** [make_python_perf_so] Error 1
> tests/make:7: recipe for target 'all' failed
> make[1]: *** [all] Error 2
> Makefile:81: recipe for target 'build-test' failed
> make: *** [build-test] Error 2
> make: Leaving directory '/home/git/linux/tools/perf'
> [acme@zoo linux]$ find . -name "*.so"
> ./tools/perf/python_ext_build/lib/perf.so
> ./tools/perf/python/perf.so
> [acme@zoo linux]$
>
> I.e. the test -f follows O=, but the process to generate python/perf.so
> doesn't and ends up pollutting the source tree.

But if I try to run it directly, it works:


[acme@zoo linux]$ make -C tools clean > /dev/null
[acme@zoo linux]$ find tools/ -name "*.so"
[acme@zoo linux]$ rm -rf /tmp/build/perf ; mkdir -p /tmp/build/perf ; make -C tools/perf O=/tmp/build/perf -f tests/make make_python_perf_so
make: Entering directory '/home/git/linux/tools/perf'
Testing Makefile
make[1]: Entering directory '/home/git/linux/tools/perf'
- make_python_perf_so: cd . && make -f Makefile DESTDIR=/tmp/tmp.9yCzYN33GK python/perf.so
make[1]: Leaving directory '/home/git/linux/tools/perf'
make: Leaving directory '/home/git/linux/tools/perf'
[acme@zoo linux]$ find tools/ -name "*.so"
[acme@zoo linux]$ ls -la /tmp/build/perf/python/perf.so
-rwxrwxr-x. 1 acme acme 1398965 Jan 15 11:41 /tmp/build/perf/python/perf.so
[acme@zoo linux]$

/me scratches head, does another 'make -C tools clean' and tries again build-test + O=