Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/bpf: make BPF_TARGET_ENDIAN non-recursive to speed up *.bpf.o build

BPF_TARGET_ENDIAN is used in CLANG_BPF_BUILD_RULE and co macros.
It is defined as a recursively expanded variable, meaning that it is
recomputed each time the value is needed. Thus, it is recomputed for
each *.bpf.o file compilation. The variable is computed by running a C
compiler in a shell. This significantly hinders parallel build
performance for *.bpf.o files.

This commit changes BPF_TARGET_ENDIAN to be a simply expanded
variable.

# Build performance stats before this commit
$ git clean -xfd; time make -j12
real 1m0.000s
...

# Build performance stats after this commit
$ git clean -xfd; time make -j12
real 0m43.605s
...

Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Acked-by: Yonghong Song <yonghong.song@linux.dev>
Link: https://lore.kernel.org/r/20241213003224.837030-1-eddyz87@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>

authored by

Eduard Zingerman and committed by
Alexei Starovoitov
5506b7d7 f4f25b68

+3 -3
+3 -3
tools/testing/selftests/bpf/Makefile
··· 461 461 endef 462 462 463 463 # Determine target endianness. 464 - IS_LITTLE_ENDIAN = $(shell $(CC) -dM -E - </dev/null | \ 464 + IS_LITTLE_ENDIAN := $(shell $(CC) -dM -E - </dev/null | \ 465 465 grep 'define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__') 466 - MENDIAN=$(if $(IS_LITTLE_ENDIAN),-mlittle-endian,-mbig-endian) 467 - BPF_TARGET_ENDIAN=$(if $(IS_LITTLE_ENDIAN),--target=bpfel,--target=bpfeb) 466 + MENDIAN:=$(if $(IS_LITTLE_ENDIAN),-mlittle-endian,-mbig-endian) 467 + BPF_TARGET_ENDIAN:=$(if $(IS_LITTLE_ENDIAN),--target=bpfel,--target=bpfeb) 468 468 469 469 ifneq ($(CROSS_COMPILE),) 470 470 CLANG_TARGET_ARCH = --target=$(notdir $(CROSS_COMPILE:%-=%))