Messages in this thread | | | Subject | Re: [PATCH 2/2] tools: do not include scripts/Kbuild.include | From | Paolo Bonzini <> | Date | Thu, 15 Apr 2021 09:40:20 +0200 |
| |
On 15/04/21 09:27, Masahiro Yamada wrote: > Since commit d9f4ff50d2aa ("kbuild: spilt cc-option and friends to > scripts/Makefile.compiler"), some kselftests fail to build. > > The tools/ directory opted out Kbuild, and went in a different > direction. They copy any kind of files to the tools/ directory > in order to do whatever they want to do in their world. > > tools/build/Build.include mimics scripts/Kbuild.include, but some > tool Makefiles included the Kbuild one to import a feature that is > missing in tools/build/Build.include: > > - Commit ec04aa3ae87b ("tools/thermal: tmon: use "-fstack-protector" > only if supported") included scripts/Kbuild.include from > tools/thermal/tmon/Makefile to import the cc-option macro. > > - Commit c2390f16fc5b ("selftests: kvm: fix for compilers that do > not support -no-pie") included scripts/Kbuild.include from > tools/testing/selftests/kvm/Makefile to import the try-run macro. > > - Commit 9cae4ace80ef ("selftests/bpf: do not ignore clang > failures") included scripts/Kbuild.include from > tools/testing/selftests/bpf/Makefile to import the .DELETE_ON_ERROR > target. > > - Commit 0695f8bca93e ("selftests/powerpc: Handle Makefile for > unrecognized option") included scripts/Kbuild.include from > tools/testing/selftests/powerpc/pmu/ebb/Makefile to import the > try-run macro. > > Copy what they want there, and stop including scripts/Kbuild.include > from the tool Makefiles.
I think it would make sense to add try-run, cc-option and .DELETE_ON_ERROR to tools/build/Build.include?
Paolo
> Link: https://lore.kernel.org/lkml/86dadf33-70f7-a5ac-cb8c-64966d2f45a1@linux.ibm.com/ > Fixes: d9f4ff50d2aa ("kbuild: spilt cc-option and friends to scripts/Makefile.compiler") > Reported-by: Janosch Frank <frankja@linux.ibm.com> > Reported-by: Christian Borntraeger <borntraeger@de.ibm.com> > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > --- > > tools/testing/selftests/bpf/Makefile | 3 ++- > tools/testing/selftests/kvm/Makefile | 12 +++++++++++- > .../selftests/powerpc/pmu/ebb/Makefile | 11 ++++++++++- > tools/thermal/tmon/Makefile | 19 +++++++++++++++++-- > 4 files changed, 40 insertions(+), 5 deletions(-) > > diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile > index 044bfdcf5b74..d872b9f41543 100644 > --- a/tools/testing/selftests/bpf/Makefile > +++ b/tools/testing/selftests/bpf/Makefile > @@ -1,5 +1,4 @@ > # SPDX-License-Identifier: GPL-2.0 > -include ../../../../scripts/Kbuild.include > include ../../../scripts/Makefile.arch > include ../../../scripts/Makefile.include > > @@ -476,3 +475,5 @@ EXTRA_CLEAN := $(TEST_CUSTOM_PROGS) $(SCRATCH_DIR) $(HOST_SCRATCH_DIR) \ > prog_tests/tests.h map_tests/tests.h verifier/tests.h \ > feature \ > $(addprefix $(OUTPUT)/,*.o *.skel.h no_alu32 bpf_gcc bpf_testmod.ko) > + > +.DELETE_ON_ERROR: > diff --git a/tools/testing/selftests/kvm/Makefile b/tools/testing/selftests/kvm/Makefile > index a6d61f451f88..8b45bc417d83 100644 > --- a/tools/testing/selftests/kvm/Makefile > +++ b/tools/testing/selftests/kvm/Makefile > @@ -1,5 +1,15 @@ > # SPDX-License-Identifier: GPL-2.0-only > -include ../../../../scripts/Kbuild.include > + > +TMPOUT = .tmp_$$$$ > + > +try-run = $(shell set -e; \ > + TMP=$(TMPOUT)/tmp; \ > + mkdir -p $(TMPOUT); \ > + trap "rm -rf $(TMPOUT)" EXIT; \ > + if ($(1)) >/dev/null 2>&1; \ > + then echo "$(2)"; \ > + else echo "$(3)"; \ > + fi) > > all: > > diff --git a/tools/testing/selftests/powerpc/pmu/ebb/Makefile b/tools/testing/selftests/powerpc/pmu/ebb/Makefile > index af3df79d8163..d5d3e869df93 100644 > --- a/tools/testing/selftests/powerpc/pmu/ebb/Makefile > +++ b/tools/testing/selftests/powerpc/pmu/ebb/Makefile > @@ -1,5 +1,4 @@ > # SPDX-License-Identifier: GPL-2.0 > -include ../../../../../../scripts/Kbuild.include > > noarg: > $(MAKE) -C ../../ > @@ -8,6 +7,16 @@ noarg: > CFLAGS += -m64 > > TMPOUT = $(OUTPUT)/TMPDIR/ > + > +try-run = $(shell set -e; \ > + TMP=$(TMPOUT)/tmp; \ > + mkdir -p $(TMPOUT); \ > + trap "rm -rf $(TMPOUT)" EXIT; \ > + if ($(1)) >/dev/null 2>&1; \ > + then echo "$(2)"; \ > + else echo "$(3)"; \ > + fi) > + > # Toolchains may build PIE by default which breaks the assembly > no-pie-option := $(call try-run, echo 'int main() { return 0; }' | \ > $(CC) -Werror $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) -no-pie -x c - -o "$$TMP", -no-pie) > diff --git a/tools/thermal/tmon/Makefile b/tools/thermal/tmon/Makefile > index 59e417ec3e13..92a683e4866c 100644 > --- a/tools/thermal/tmon/Makefile > +++ b/tools/thermal/tmon/Makefile > @@ -1,6 +1,21 @@ > # SPDX-License-Identifier: GPL-2.0 > -# We need this for the "cc-option" macro. > -include ../../../scripts/Kbuild.include > + > +TMPOUT = .tmp_$$$$ > + > +try-run = $(shell set -e; \ > + TMP=$(TMPOUT)/tmp; \ > + mkdir -p $(TMPOUT); \ > + trap "rm -rf $(TMPOUT)" EXIT; \ > + if ($(1)) >/dev/null 2>&1; \ > + then echo "$(2)"; \ > + else echo "$(3)"; \ > + fi) > + > +__cc-option = $(call try-run,\ > + $(1) -Werror $(2) $(3) -c -x c /dev/null -o "$$TMP",$(3),$(4)) > + > +cc-option = $(call __cc-option, $(CC),\ > + $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS),$(1),$(2)) > > VERSION = 1.0 > >
| |