The kselftests may be built in a couple different ways: make LLVM=1 make CC=clang
In order to handle both cases, set LLVM=1 if CC=clang. That way,the rest of lib.mk, and any Makefiles that include lib.mk, can base decisions solely on whether or not LLVM is set.
Then, build upon that to disable a pair of clang warnings that are already silenced on gcc.
Doing it this way is much better than the piecemeal approach that I started with in [1] and [2]. Thanks to Nathan Chancellor for the patch reviews that led to this approach.
[1] https://lore.kernel.org/20240527214704.300444-1-jhubbard@nvidia.com [2] https://lore.kernel.org/20240527213641.299458-1-jhubbard@nvidia.com
John Hubbard (2): selftests/lib.mk: handle both LLVM=1 and CC=clang builds selftests/lib.mk: silence some clang warnings that gcc already ignores
tools/testing/selftests/lib.mk | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
base-commit: e0cce98fe279b64f4a7d81b7f5c3a23d80b92fbc
The kselftests may be built in a couple different ways: make LLVM=1 make CC=clang
In order to handle both cases, set LLVM=1 if CC=clang. That way,the rest of lib.mk, and any Makefiles that include lib.mk, can base decisions solely on whether or not LLVM is set.
Cc: Nathan Chancellor nathan@kernel.org Cc: Ryan Roberts ryan.roberts@arm.com
Signed-off-by: John Hubbard jhubbard@nvidia.com --- tools/testing/selftests/lib.mk | 12 ++++++++++++ 1 file changed, 12 insertions(+)
diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk index 429535816dbd..2902787b89b2 100644 --- a/tools/testing/selftests/lib.mk +++ b/tools/testing/selftests/lib.mk @@ -1,5 +1,17 @@ # This mimics the top-level Makefile. We do it explicitly here so that this # Makefile can operate with or without the kbuild infrastructure. + +# The kselftests may be built in a couple different ways: +# make LLVM=1 +# make CC=clang +# +# In order to handle both cases, set LLVM=1 if CC=clang. That way,the rest of +# lib.mk, and any Makefiles that include lib.mk, can base decisions solely on +# whether or not LLVM is set. +ifeq ($(CC),clang) + LLVM := 1 +endif + ifneq ($(LLVM),) ifneq ($(filter %/,$(LLVM)),) LLVM_PREFIX := $(LLVM)
On 5/29/24 7:08 AM, John Hubbard wrote:
The kselftests may be built in a couple different ways: make LLVM=1 make CC=clang
In order to handle both cases, set LLVM=1 if CC=clang. That way,the rest of lib.mk, and any Makefiles that include lib.mk, can base decisions solely on whether or not LLVM is set.
Cc: Nathan Chancellor nathan@kernel.org Cc: Ryan Roberts ryan.roberts@arm.com
Signed-off-by: John Hubbard jhubbard@nvidia.com
LGTM
Reviewed-by: Muhammad Usama Anjum usama.anjum@collabora.com
tools/testing/selftests/lib.mk | 12 ++++++++++++ 1 file changed, 12 insertions(+)
diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk index 429535816dbd..2902787b89b2 100644 --- a/tools/testing/selftests/lib.mk +++ b/tools/testing/selftests/lib.mk @@ -1,5 +1,17 @@ # This mimics the top-level Makefile. We do it explicitly here so that this # Makefile can operate with or without the kbuild infrastructure.
+# The kselftests may be built in a couple different ways: +# make LLVM=1 +# make CC=clang +# +# In order to handle both cases, set LLVM=1 if CC=clang. That way,the rest of +# lib.mk, and any Makefiles that include lib.mk, can base decisions solely on +# whether or not LLVM is set. +ifeq ($(CC),clang)
- LLVM := 1
+endif
ifneq ($(LLVM),) ifneq ($(filter %/,$(LLVM)),) LLVM_PREFIX := $(LLVM)
gcc defaults to silence (off) for the following warnings, but clang defaults to the opposite. These warnings are not useful for kselftests, so silence them for the clang builds as well:
-Wno-address-of-packed-member -Wno-gnu-variable-sized-type-not-at-end
This eliminates warnings for the net/ and user_events/ kselftest subsystems, in these files:
./net/af_unix/scm_rights.c ./net/timestamping.c ./net/ipsec.c ./user_events/perf_test.c
Cc: Nathan Chancellor nathan@kernel.org Signed-off-by: John Hubbard jhubbard@nvidia.com --- tools/testing/selftests/lib.mk | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk index 2902787b89b2..41e879f3f8a2 100644 --- a/tools/testing/selftests/lib.mk +++ b/tools/testing/selftests/lib.mk @@ -50,6 +50,12 @@ else CLANG_FLAGS += --target=$(notdir $(CROSS_COMPILE:%-=%)) endif # CROSS_COMPILE
+# gcc defaults to silence (off) for the following warnings, but clang defaults +# to the opposite. These warnings are not useful for kselftests, so silence them +# for the clang builds as well. +CFLAGS += -Wno-address-of-packed-member +CFLAGS += -Wno-gnu-variable-sized-type-not-at-end + CC := $(CLANG) $(CLANG_FLAGS) -fintegrated-as else CC := $(CROSS_COMPILE)gcc
On 5/28/24 20:08, John Hubbard wrote:
gcc defaults to silence (off) for the following warnings, but clang defaults to the opposite. These warnings are not useful for kselftests, so silence them for the clang builds as well:
Please you add more information on why they aren't useful for kselftests.
-Wno-address-of-packed-member -Wno-gnu-variable-sized-type-not-at-end
This eliminates warnings for the net/ and user_events/ kselftest subsystems, in these files:
./net/af_unix/scm_rights.c ./net/timestamping.c ./net/ipsec.c ./user_events/perf_test.c
Cc: Nathan Chancellor nathan@kernel.org Signed-off-by: John Hubbard jhubbard@nvidia.com
tools/testing/selftests/lib.mk | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk index 2902787b89b2..41e879f3f8a2 100644 --- a/tools/testing/selftests/lib.mk +++ b/tools/testing/selftests/lib.mk @@ -50,6 +50,12 @@ else CLANG_FLAGS += --target=$(notdir $(CROSS_COMPILE:%-=%)) endif # CROSS_COMPILE +# gcc defaults to silence (off) for the following warnings, but clang defaults +# to the opposite. These warnings are not useful for kselftests, so silence them +# for the clang builds as well. +CFLAGS += -Wno-address-of-packed-member +CFLAGS += -Wno-gnu-variable-sized-type-not-at-end
- CC := $(CLANG) $(CLANG_FLAGS) -fintegrated-as else CC := $(CROSS_COMPILE)gcc
thanks, -- Shuah
On 5/30/24 7:25 AM, Shuah Khan wrote:
On 5/28/24 20:08, John Hubbard wrote:
gcc defaults to silence (off) for the following warnings, but clang defaults to the opposite. These warnings are not useful for kselftests, so silence them for the clang builds as well:
Please you add more information on why they aren't useful for kselftests.
Ah OK. My wording is a little misleading. The warnings are not useful for the *kernel*, as previous decided by the gcc settings when building the kernel. And it is only only due to including kernel data structures in the selftests, that we get the warnings on clang.
So it is not something unique to the selftests. There is nothing that the selftests' code does that triggers these warnings, other than the act of including the kernel's data structures.
I can post a v2 to update both the comment and the commit description.
thanks,
On 5/30/24 13:28, John Hubbard wrote:
On 5/30/24 7:25 AM, Shuah Khan wrote:
On 5/28/24 20:08, John Hubbard wrote:
gcc defaults to silence (off) for the following warnings, but clang defaults to the opposite. These warnings are not useful for kselftests, so silence them for the clang builds as well:
Please you add more information on why they aren't useful for kselftests.
Ah OK. My wording is a little misleading. The warnings are not useful for the *kernel*, as previous decided by the gcc settings when building the kernel. And it is only only due to including kernel data structures in the selftests, that we get the warnings on clang.
So it is not something unique to the selftests. There is nothing that the selftests' code does that triggers these warnings, other than the act of including the kernel's data structures.
I can post a v2 to update both the comment and the commit description.
Yes please.
thanks, -- Shuah
linux-kselftest-mirror@lists.linaro.org