On Fri, Apr 16, 2021 at 10:01 PM Masahiro Yamada <masahiroy@xxxxxxxxxx> 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 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 need into tools/build/Build.include, and make them > include it instead of scripts/Kbuild.include. > > Link: https://lore.kernel.org/lkml/86dadf33-70f7-a5ac-cb8c-64966d2f45a1@xxxxxxxxxxxxx/ > Fixes: d9f4ff50d2aa ("kbuild: spilt cc-option and friends to scripts/Makefile.compiler") > Reported-by: Janosch Frank <frankja@xxxxxxxxxxxxx> > Reported-by: Christian Borntraeger <borntraeger@xxxxxxxxxx> > Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx> Applied to linux-kbuild. > --- > > Changes in v2: > - copy macros to tools/build/BUild.include > > tools/build/Build.include | 24 +++++++++++++++++++ > tools/testing/selftests/bpf/Makefile | 2 +- > tools/testing/selftests/kvm/Makefile | 2 +- > .../selftests/powerpc/pmu/ebb/Makefile | 2 +- > tools/thermal/tmon/Makefile | 2 +- > 5 files changed, 28 insertions(+), 4 deletions(-) > > diff --git a/tools/build/Build.include b/tools/build/Build.include > index 585486e40995..2cf3b1bde86e 100644 > --- a/tools/build/Build.include > +++ b/tools/build/Build.include > @@ -100,3 +100,27 @@ cxx_flags = -Wp,-MD,$(depfile) -Wp,-MT,$@ $(CXXFLAGS) -D"BUILD_STR(s)=\#s" $(CXX > ## HOSTCC C flags > > host_c_flags = -Wp,-MD,$(depfile) -Wp,-MT,$@ $(KBUILD_HOSTCFLAGS) -D"BUILD_STR(s)=\#s" $(HOSTCFLAGS_$(basetarget).o) $(HOSTCFLAGS_$(obj)) > + > +# output directory for tests below > +TMPOUT = .tmp_$$$$ > + > +# try-run > +# Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise) > +# Exit code chooses option. "$$TMP" serves as a temporary file and is > +# automatically cleaned up. > +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 > +# Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586) > +cc-option = $(call try-run, \ > + $(CC) -Werror $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2)) > + > +# delete partially updated (i.e. corrupted) files on error > +.DELETE_ON_ERROR: > diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile > index 044bfdcf5b74..17a5cdf48d37 100644 > --- a/tools/testing/selftests/bpf/Makefile > +++ b/tools/testing/selftests/bpf/Makefile > @@ -1,5 +1,5 @@ > # SPDX-License-Identifier: GPL-2.0 > -include ../../../../scripts/Kbuild.include > +include ../../../build/Build.include > include ../../../scripts/Makefile.arch > include ../../../scripts/Makefile.include > > diff --git a/tools/testing/selftests/kvm/Makefile b/tools/testing/selftests/kvm/Makefile > index a6d61f451f88..5ef141f265bd 100644 > --- a/tools/testing/selftests/kvm/Makefile > +++ b/tools/testing/selftests/kvm/Makefile > @@ -1,5 +1,5 @@ > # SPDX-License-Identifier: GPL-2.0-only > -include ../../../../scripts/Kbuild.include > +include ../../../build/Build.include > > all: > > diff --git a/tools/testing/selftests/powerpc/pmu/ebb/Makefile b/tools/testing/selftests/powerpc/pmu/ebb/Makefile > index af3df79d8163..c5ecb4634094 100644 > --- a/tools/testing/selftests/powerpc/pmu/ebb/Makefile > +++ b/tools/testing/selftests/powerpc/pmu/ebb/Makefile > @@ -1,5 +1,5 @@ > # SPDX-License-Identifier: GPL-2.0 > -include ../../../../../../scripts/Kbuild.include > +include ../../../../../build/Build.include > > noarg: > $(MAKE) -C ../../ > diff --git a/tools/thermal/tmon/Makefile b/tools/thermal/tmon/Makefile > index 59e417ec3e13..9db867df7679 100644 > --- a/tools/thermal/tmon/Makefile > +++ b/tools/thermal/tmon/Makefile > @@ -1,6 +1,6 @@ > # SPDX-License-Identifier: GPL-2.0 > # We need this for the "cc-option" macro. > -include ../../../scripts/Kbuild.include > +include ../../build/Build.include > > VERSION = 1.0 > > -- > 2.27.0 > > -- > You received this message because you are subscribed to the Google Groups "Clang Built Linux" group. > To unsubscribe from this group and stop receiving emails from it, send an email to clang-built-linux+unsubscribe@xxxxxxxxxxxxxxxx. > To view this discussion on the web visit https://groups.google.com/d/msgid/clang-built-linux/20210416130051.239782-1-masahiroy%40kernel.org. -- Best Regards Masahiro Yamada