Re: [PATCH] selftests: propagate CC to selftest submakes

From: Andrew Delgadillo
Date: Fri Dec 11 2020 - 15:29:36 EST


On Thu, Dec 10, 2020 at 4:31 PM Shuah Khan <skhan@xxxxxxxxxxxxxxxxxxx> wrote:
>
> On 12/10/20 5:10 PM, Andrew Delgadillo wrote:
> > On Thu, Dec 10, 2020 at 3:08 PM Nick Desaulniers
> > <ndesaulniers@xxxxxxxxxx> wrote:
> >>
> >> On Thu, Dec 3, 2020 at 2:10 PM Andrew Delgadillo <adelg@xxxxxxxxxx> wrote:
> >>>
> >>> lib.mk defaults to gcc when CC is not set. When building selftests
> >>> as part of a kernel compilation, MAKEFLAGS is cleared to allow implicit
> >>> build rules to be used. This has the side-effect of clearing the CC
> >>> variable, which will cause selftests to be built with gcc regardless of
> >>> if we are using gcc or clang. To remedy this, propagate the CC variable
> >>> when clearing makeflags to ensure the correct compiler is used.
> >>>
> >>> Signed-off-by: Andrew Delgadillo <adelg@xxxxxxxxxx>
> >>
> >> Hi Andrew, thanks for the patch. Can you walk me through how to build
> >> the selftests?
> >>
> >> Documentation/dev-tools/kselftest.rst says:
> >> $ make -C tools/testing/selftests
> >>
> >> And if I do:
> >> $ make CC=clang defconfig
> >> $ make CC=clang -C tools/testing/selftests -j
> >>
> >> I observe a spew of errors. If I apply your patch and rerun the
> >> above, I see what looks like the same spew of errors. Am I "holding
> >> it wrong" or could the docs use a refresh?
> >>
> >
> > Hi Nick, sure thing!
> >
> > I also see a slew of errors when building with make -C
> > tools/testing/selftests. However, that is not the problem I am trying
> > to solve. I believe we are seeing errors building that way because it
> > is missing some make variables that are normally set up when building
> > from the kernel's top level makefile.
> >
>
> Both options are supported and should work.
>
> make -C tools/testing/selftests
> make kselftest
>
> That being said, I use gcc. Can you send the errors you are seeing?
> It is possible, a few tests aren't building and need to be fixed
> for clang and gcc.
Most of the errors I saw, I was able to fix by installing the correct
packages to get some missing headers, so in those cases nothing is
broken about the tests. However, after that the errors still remaining
look like so (I've done my best to deduplicate similar errors):

clone3_cap_checkpoint_restore.c: In function 'clone3_cap_checkpoint_restore':
clone3_cap_checkpoint_restore.c:148:9: error: expected expression
before 'return'
XFAIL(return, "Skipping all tests as non-root\n");
^
make[3]: *** [../lib.mk:139:
/usr/local/google/home/adelg/projects/upstream/tools/testing/selftests/clone3/clone3_cap_checkpoint_restore]
Error 1

memfd_test.c: In function 'test_seal_future_write':
memfd_test.c:783:27: error: 'F_SEAL_FUTURE_WRITE' undeclared (first
use in this function)
mfd_assert_add_seals(fd, F_SEAL_FUTURE_WRITE);
^
memfd_test.c:783:27: note: each undeclared identifier is reported only
once for each function it appears in

/usr/local/***/lib/../lib64/librt.so: undefined reference to
`pthread_attr_setstacksize@GLIBC_2.2.5'
collect2: error: ld returned 1 exit status

There are also bpf selftest errors, but I know for a fact those are
just an artifact of me not having llvm-readelf and other binaries in
my PATH as I've compiled those successfully before.
>
> thanks,
> -- Shuah
>