Re: [PATCH bpf-next v2 0/5] bpf: tools: support build selftests/bpf with clang

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 4/12/21 4:58 PM, Nick Desaulniers wrote:
On Mon, Apr 12, 2021 at 7:29 AM Yonghong Song <yhs@xxxxxx> wrote:

To build kernel with clang, people typically use
   make -j60 LLVM=1 LLVM_IAS=1
LLVM_IAS=1 is not required for non-LTO build but
is required for LTO build. In my environment,
I am always having LLVM_IAS=1 regardless of
whether LTO is enabled or not.

After kernel is build with clang, the following command
can be used to build selftests with clang:
   make -j60 -C tools/testing/selftests/bpf LLVM=1 LLVM_IAS=1

Thank you for the series Yonghong.  When I test the above command with
your series applied, I observe:
/usr/bin/ld: cannot find -lcap
clang-13: error: linker command failed with exit code 1 (use -v to see
invocation)

I need to install libcap-dev, but this also seems to imply that BFD is
being used as the linker, not LLD.  Perhaps if the compiler is being
used as the "driver" to also link executables, `-fuse-ld=lld` is
needed for the compiler flags.

Yes, bfd is needed to build selftests/bpf. This is due to a dependency
on bpftool which needs uses libbfd to disassemble the jited code.


Then there's:
tools/include/tools/libc_compat.h:11:21: error: static declaration of
'reallocarray' follows non-static declaration
static inline void *reallocarray(void *ptr, size_t nmemb, size_t size)
                     ^
/usr/include/stdlib.h:559:14: note: previous declaration is here
extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
              ^
so perhaps the detection of
COMPAT_NEED_REALLOCARRAY/feature-reallocarray is incorrect?

libbpf already stopped to use system reallocarray(), but
bpftool still uses it.

In bpftool makefile, we have

ifeq ($(feature-reallocarray), 0)
CFLAGS += -DCOMPAT_NEED_REALLOCARRAY
endif

I guess probably detection of feature-reallocarray is
not correct? Could you take a look at your system?
My system supports reallocarray, so the above
-DCOMPAT_NEED_REALLOCARRAY is not added to
compilation flags.




But currently, using the above command, some compilations
still use gcc and there are also compilation errors and warnings.
This patch set intends to fix these issues.
Patch #1 and #2 fixed the issue so clang/clang++ is
used instead of gcc/g++. Patch #3 fixed a compilation
failure. Patch #4 and #5 fixed various compiler warnings.

Changelog:
   v1 -> v2:
     . add -Wno-unused-command-line-argument and -Wno-format-security
       for clang only as (1). gcc does not exhibit those
       warnings, and (2). -Wno-unused-command-line-argument is
       only supported by clang. (Sedat)

Yonghong Song (5):
   selftests: set CC to clang in lib.mk if LLVM is set
   tools: allow proper CC/CXX/... override with LLVM=1 in
     Makefile.include
   selftests/bpf: fix test_cpp compilation failure with clang
   selftests/bpf: silence clang compilation warnings
   bpftool: fix a clang compilation warning

  tools/bpf/bpftool/net.c              |  2 +-
  tools/scripts/Makefile.include       | 12 ++++++++++--
  tools/testing/selftests/bpf/Makefile |  7 ++++++-
  tools/testing/selftests/lib.mk       |  4 ++++
  4 files changed, 21 insertions(+), 4 deletions(-)

--
2.30.2



--
Thanks,
~Nick Desaulniers




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux