diff mbox series

selftests/binderfs: use the Makefile's rules, not Make's implicit rules

Message ID 20240503015820.76394-1-jhubbard@nvidia.com
State New
Headers show
Series selftests/binderfs: use the Makefile's rules, not Make's implicit rules | expand

Commit Message

John Hubbard May 3, 2024, 1:58 a.m. UTC
First of all, in order to build with clang at all, one must first apply
Valentin Obst's build fix for LLVM [1]. Once that is done, then when
building with clang, via:

    make LLVM=1 -C tools/testing/selftests

...the following error occurs:

   clang: error: cannot specify -o when generating multiple output files

This is because clang, unlike gcc, won't accept invocations of this
form:

    clang file1.c header2.h

While trying to fix this, I noticed that:

a) selftests/lib.mk already avoids the problem, and

b) The binderfs Makefile indavertently bypasses the selftests/lib.mk
build system, and quitely uses Make's implicit build rules for .c files
instead.

The Makefile attempts to set up both a dependency and a source file,
neither of which was needed, because lib.mk is able to automatically
handle both. This line:

    binderfs_test: binderfs_test.c

...causes Make's implicit rules to run, which builds binderfs_test
without ever looking at lib.mk.

Fix this by simply deleting the "binderfs_test:" Makefile target and
letting lib.mk handle it instead.

[1] https://lore.kernel.org/all/20240329-selftests-libmk-llvm-rfc-v1-1-2f9ed7d1c49f@valentinobst.de/

Fixes: 6e29225af902 ("binderfs: port tests to test harness infrastructure")
Cc: Christian Brauner <brauner@kernel.org>
Signed-off-by: John Hubbard <jhubbard@nvidia.com>
---
 tools/testing/selftests/filesystems/binderfs/Makefile | 2 --
 1 file changed, 2 deletions(-)


base-commit: f03359bca01bf4372cf2c118cd9a987a5951b1c8
prerequisite-patch-id: b901ece2a5b78503e2fb5480f20e304d36a0ea27

Comments

Christian Brauner May 3, 2024, 9:10 a.m. UTC | #1
On Thu, May 02, 2024 at 06:58:20PM -0700, John Hubbard wrote:
> First of all, in order to build with clang at all, one must first apply
> Valentin Obst's build fix for LLVM [1]. Once that is done, then when
> building with clang, via:
> 
>     make LLVM=1 -C tools/testing/selftests
> 
> ...the following error occurs:
> 
>    clang: error: cannot specify -o when generating multiple output files
> 
> This is because clang, unlike gcc, won't accept invocations of this
> form:
> 
>     clang file1.c header2.h
> 
> While trying to fix this, I noticed that:
> 
> a) selftests/lib.mk already avoids the problem, and
> 
> b) The binderfs Makefile indavertently bypasses the selftests/lib.mk
> build system, and quitely uses Make's implicit build rules for .c files
> instead.
> 
> The Makefile attempts to set up both a dependency and a source file,
> neither of which was needed, because lib.mk is able to automatically
> handle both. This line:
> 
>     binderfs_test: binderfs_test.c
> 
> ...causes Make's implicit rules to run, which builds binderfs_test
> without ever looking at lib.mk.
> 
> Fix this by simply deleting the "binderfs_test:" Makefile target and
> letting lib.mk handle it instead.
> 
> [1] https://lore.kernel.org/all/20240329-selftests-libmk-llvm-rfc-v1-1-2f9ed7d1c49f@valentinobst.de/
> 
> Fixes: 6e29225af902 ("binderfs: port tests to test harness infrastructure")
> Cc: Christian Brauner <brauner@kernel.org>
> Signed-off-by: John Hubbard <jhubbard@nvidia.com>
> ---

Reviewed-by: Christian Brauner <brauner@kernel.org>
Shuah Khan May 3, 2024, 7:28 p.m. UTC | #2
On 5/3/24 03:10, Christian Brauner wrote:
> On Thu, May 02, 2024 at 06:58:20PM -0700, John Hubbard wrote:
>> First of all, in order to build with clang at all, one must first apply
>> Valentin Obst's build fix for LLVM [1]. Once that is done, then when
>> building with clang, via:
>>
>>      make LLVM=1 -C tools/testing/selftests
>>
>> ...the following error occurs:
>>
>>     clang: error: cannot specify -o when generating multiple output files
>>
>> This is because clang, unlike gcc, won't accept invocations of this
>> form:
>>
>>      clang file1.c header2.h
>>
>> While trying to fix this, I noticed that:
>>
>> a) selftests/lib.mk already avoids the problem, and
>>
>> b) The binderfs Makefile indavertently bypasses the selftests/lib.mk
>> build system, and quitely uses Make's implicit build rules for .c files
>> instead.
>>
>> The Makefile attempts to set up both a dependency and a source file,
>> neither of which was needed, because lib.mk is able to automatically
>> handle both. This line:
>>
>>      binderfs_test: binderfs_test.c
>>
>> ...causes Make's implicit rules to run, which builds binderfs_test
>> without ever looking at lib.mk.
>>
>> Fix this by simply deleting the "binderfs_test:" Makefile target and
>> letting lib.mk handle it instead.
>>
>> [1] https://lore.kernel.org/all/20240329-selftests-libmk-llvm-rfc-v1-1-2f9ed7d1c49f@valentinobst.de/
>>
>> Fixes: 6e29225af902 ("binderfs: port tests to test harness infrastructure")
>> Cc: Christian Brauner <brauner@kernel.org>
>> Signed-off-by: John Hubbard <jhubbard@nvidia.com>
>> ---
> 
> Reviewed-by: Christian Brauner <brauner@kernel.org>
> 

Thank you. Applied to linunx-kselftest next for Linux 6.10-rc1

thanks,
-- Shuah
diff mbox series

Patch

diff --git a/tools/testing/selftests/filesystems/binderfs/Makefile b/tools/testing/selftests/filesystems/binderfs/Makefile
index c2f7cef919c0..eb4c3b411934 100644
--- a/tools/testing/selftests/filesystems/binderfs/Makefile
+++ b/tools/testing/selftests/filesystems/binderfs/Makefile
@@ -3,6 +3,4 @@ 
 CFLAGS += $(KHDR_INCLUDES) -pthread
 TEST_GEN_PROGS := binderfs_test
 
-binderfs_test: binderfs_test.c ../../kselftest.h ../../kselftest_harness.h
-
 include ../../lib.mk