On Mon, Oct 14, 2024 at 11:55 PM Viktor Malik <vmalik@xxxxxxxxxx> wrote: > > There exist compiler flags supported by GCC but not supported by Clang > (e.g. -specs=...). Currently, these cannot be passed to BPF selftests > builds, even when building with GCC, as some binaries (urandom_read and > liburandom_read.so) are always built with Clang and the unsupported > flags make the compilation fail (as -Werror is turned on). > > Add new Makefile variable CLANG_FILTEROUT_FLAGS which can be used by > users to specify which flags (from the user-provided CFLAGS or LDFLAGS) > should be filtered out for Clang invocations. > > This allows to do things like: > > $ CFLAGS="-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1" \ > CLANG_FILTEROUT_FLAGS="-specs=%" \ > make -C tools/testing/selftests/bpf > > Without this patch, the compilation would fail with: > > [...] > clang: error: argument unused during compilation: '-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1' [-Werror,-Wunused-command-line-argument] maybe we should just not error out (i.e., enable -Wno-unused-command-line-argument)? > make: *** [Makefile:273: /bpf-next/tools/testing/selftests/bpf/liburandom_read.so] Error 1 > [...] > > Signed-off-by: Viktor Malik <vmalik@xxxxxxxxxx> > --- > tools/testing/selftests/bpf/Makefile | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile > index d81583b2aef9..89662fe0470a 100644 > --- a/tools/testing/selftests/bpf/Makefile > +++ b/tools/testing/selftests/bpf/Makefile > @@ -31,6 +31,11 @@ SAN_LDFLAGS ?= $(SAN_CFLAGS) > RELEASE ?= > OPT_FLAGS ?= $(if $(RELEASE),-O2,-O0) > > +# Some flags supported by GCC are not supported by Clang. > +# This variable allows users to specify such flags so that they can use custom > +# CFLAGS and binaries built with Clang do not fail to build. > +CLANG_FILTEROUT_FLAGS ?= > + > LIBELF_CFLAGS := $(shell $(PKG_CONFIG) libelf --cflags 2>/dev/null) > LIBELF_LIBS := $(shell $(PKG_CONFIG) libelf --libs 2>/dev/null || echo -lelf) > > @@ -271,7 +276,7 @@ endif > $(OUTPUT)/liburandom_read.so: urandom_read_lib1.c urandom_read_lib2.c liburandom_read.map > $(call msg,LIB,,$@) > $(Q)$(CLANG) $(CLANG_TARGET_ARCH) \ > - $(filter-out -static,$(CFLAGS) $(LDFLAGS)) \ > + $(filter-out -static $(CLANG_FILTEROUT_FLAGS),$(CFLAGS) $(LDFLAGS)) \ > $(filter %.c,$^) $(filter-out -static,$(LDLIBS)) \ > -fuse-ld=$(LLD) -Wl,-znoseparate-code -Wl,--build-id=sha1 \ > -Wl,--version-script=liburandom_read.map \ > @@ -280,7 +285,7 @@ $(OUTPUT)/liburandom_read.so: urandom_read_lib1.c urandom_read_lib2.c liburandom > $(OUTPUT)/urandom_read: urandom_read.c urandom_read_aux.c $(OUTPUT)/liburandom_read.so > $(call msg,BINARY,,$@) > $(Q)$(CLANG) $(CLANG_TARGET_ARCH) \ > - $(filter-out -static,$(CFLAGS) $(LDFLAGS)) $(filter %.c,$^) \ > + $(filter-out -static $(CLANG_FILTEROUT_FLAGS),$(CFLAGS) $(LDFLAGS)) $(filter %.c,$^) \ > -lurandom_read $(filter-out -static,$(LDLIBS)) -L$(OUTPUT) \ > -fuse-ld=$(LLD) -Wl,-znoseparate-code -Wl,--build-id=sha1 \ > -Wl,-rpath=. -o $@ > -- > 2.47.0 >