linux-yocto/tools/build/feature/Makefile
Tomas Glozar 814d051ebe tools/build: Use SYSTEM_BPFTOOL for system bpftool
The feature test for system bpftool uses BPFTOOL as the variable to set
its path, defaulting to just "bpftool" if not set by the user.

This conflicts with selftests and a few other utilities, which expect
BPFTOOL to be set to the in-tree bpftool path by default. For example,
bpftool selftests fail to build:

$ make -C tools/testing/selftests/bpf/
make: Entering directory '/home/tglozar/dev/linux/tools/testing/selftests/bpf'

make: *** No rule to make target 'bpftool', needed by '/home/tglozar/dev/linux/tools/testing/selftests/bpf/tools/include/vmlinux.h'.  Stop.
make: Leaving directory '/home/tglozar/dev/linux/tools/testing/selftests/bpf'

Fix the problem by renaming the variable used for system bpftool from
BPFTOOL to SYSTEM_BPFTOOL, so that the new usage does not conflict with
the existing one of BPFTOOL.

Cc: John Kacur <jkacur@redhat.com>
Cc: Luis Goncalves <lgoncalv@redhat.com>
Link: https://lore.kernel.org/20250326004018.248357-1-tglozar@redhat.com
Fixes: 8a635c3856 ("tools/build: Add bpftool-skeletons feature test")
Closes: https://lore.kernel.org/linux-kernel/5df6968a-2e5f-468e-b457-fc201535dd4c@linux.ibm.com/
Reported-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>
Tested-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>
Suggested-by: Quentin Monnet <qmo@kernel.org>
Acked-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Tomas Glozar <tglozar@redhat.com>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
2025-03-26 10:31:31 -04:00

12 KiB

SPDX-License-Identifier: GPL-2.0

include ../../scripts/Makefile.include

FILES=
test-all.bin
test-backtrace.bin
test-bionic.bin
test-libdw.bin
test-eventfd.bin
test-fortify-source.bin
test-get_current_dir_name.bin
test-glibc.bin
test-gtk2.bin
test-gtk2-infobar.bin
test-hello.bin
test-libbfd.bin
test-libbfd-buildid.bin
test-disassembler-four-args.bin
test-disassembler-init-styled.bin
test-reallocarray.bin
test-libbfd-liberty.bin
test-libbfd-liberty-z.bin
test-cplus-demangle.bin
test-cxa-demangle.bin
test-libcap.bin
test-libelf.bin
test-libelf-getphdrnum.bin
test-libelf-gelf_getnote.bin
test-libelf-getshdrstrndx.bin
test-libelf-zstd.bin
test-libdebuginfod.bin
test-libnuma.bin
test-numa_num_possible_cpus.bin
test-libperl.bin
test-libpython.bin
test-libslang.bin
test-libslang-include-subdir.bin
test-libtraceevent.bin
test-libcpupower.bin
test-libtracefs.bin
test-libcrypto.bin
test-libunwind.bin
test-libunwind-debug-frame.bin
test-libunwind-x86.bin
test-libunwind-x86_64.bin
test-libunwind-arm.bin
test-libunwind-aarch64.bin
test-libunwind-debug-frame-arm.bin
test-libunwind-debug-frame-aarch64.bin
test-pthread-attr-setaffinity-np.bin
test-pthread-barrier.bin
test-stackprotector-all.bin
test-timerfd.bin
test-libbabeltrace.bin
test-libcapstone.bin
test-compile-32.bin
test-compile-x32.bin
test-zlib.bin
test-lzma.bin
test-bpf.bin
test-libbpf.bin
test-get_cpuid.bin
test-sdt.bin
test-cxx.bin
test-gettid.bin
test-jvmti.bin
test-jvmti-cmlr.bin
test-scandirat.bin
test-sched_getcpu.bin
test-setns.bin
test-libopencsd.bin
test-clang.bin
test-llvm.bin
test-llvm-perf.bin
test-libaio.bin
test-libzstd.bin
test-clang-bpf-co-re.bin
test-file-handle.bin
test-libpfm4.bin

FILES := $(addprefix $(OUTPUT),$(FILES))

Some distros provide the command $(CROSS_COMPILE)pkg-config for

searching packges installed with Multiarch. Use it for cross

compilation if it is existed.

ifneq (, $(shell which $(CROSS_COMPILE)pkg-config)) PKG_CONFIG ?= $(CROSS_COMPILE)pkg-config else PKG_CONFIG ?= pkg-config

PKG_CONFIG_PATH or PKG_CONFIG_LIBDIR, alongside PKG_CONFIG_SYSROOT_DIR

for modified system root, are required for the cross compilation.

If these PKG_CONFIG environment variables are not set, Multiarch library

paths are used instead.

ifdef CROSS_COMPILE ifeq ($(PKG_CONFIG_LIBDIR)$(PKG_CONFIG_PATH)$(PKG_CONFIG_SYSROOT_DIR),) CROSS_ARCH = $(shell $(CC) -dumpmachine) PKG_CONFIG_LIBDIR := /usr/local/$(CROSS_ARCH)/lib/pkgconfig/ PKG_CONFIG_LIBDIR := $(PKG_CONFIG_LIBDIR):/usr/local/lib/$(CROSS_ARCH)/pkgconfig/ PKG_CONFIG_LIBDIR := $(PKG_CONFIG_LIBDIR):/usr/lib/$(CROSS_ARCH)/pkgconfig/ PKG_CONFIG_LIBDIR := $(PKG_CONFIG_LIBDIR):/usr/local/share/pkgconfig/ PKG_CONFIG_LIBDIR := $(PKG_CONFIG_LIBDIR):/usr/share/pkgconfig/ export PKG_CONFIG_LIBDIR endif endif endif

all: $(FILES)

__BUILD = $(CC) $(CFLAGS) -MD -Wall -Werror -o $@ $(patsubst %.bin,%.c,$(@F)) $(LDFLAGS) BUILD = $(__BUILD) > $(@:.bin=.make.output) 2>&1 BUILD_BFD = $(BUILD) -DPACKAGE='"perf"' -lbfd -ldl BUILD_ALL = $(BUILD) -fstack-protector-all -O2 -D_FORTIFY_SOURCE=2 -ldw -lelf -lnuma -lelf -lslang $(FLAGS_PERL_EMBED) $(FLAGS_PYTHON_EMBED) -DPACKAGE='"perf"' -lbfd -ldl -lz -llzma -lzstd

__BUILDXX = $(CXX) $(CXXFLAGS) -MD -Wall -Werror -o $@ $(patsubst %.bin,%.cpp,$(@F)) $(LDFLAGS) BUILDXX = $(__BUILDXX) > $(@:.bin=.make.output) 2>&1

###############################

$(OUTPUT)test-all.bin: $(BUILD_ALL) || $(BUILD_ALL) -lopcodes -liberty

$(OUTPUT)test-hello.bin: $(BUILD)

$(OUTPUT)test-pthread-attr-setaffinity-np.bin: $(BUILD) -D_GNU_SOURCE -lpthread

$(OUTPUT)test-pthread-barrier.bin: $(BUILD) -lpthread

$(OUTPUT)test-stackprotector-all.bin: $(BUILD) -fstack-protector-all

$(OUTPUT)test-fortify-source.bin: $(BUILD) -O2 -D_FORTIFY_SOURCE=2

$(OUTPUT)test-bionic.bin: $(BUILD)

$(OUTPUT)test-libcap.bin: $(BUILD) -lcap

$(OUTPUT)test-libelf.bin: $(BUILD) -lelf

$(OUTPUT)test-eventfd.bin: $(BUILD)

$(OUTPUT)test-get_current_dir_name.bin: $(BUILD)

$(OUTPUT)test-glibc.bin: $(BUILD)

$(OUTPUT)test-scandirat.bin: $(BUILD)

$(OUTPUT)test-sched_getcpu.bin: $(BUILD)

$(OUTPUT)test-setns.bin: $(BUILD)

$(OUTPUT)test-libopencsd.bin: $(BUILD) # -lopencsd_c_api -lopencsd provided by # $(FEATURE_CHECK_LDFLAGS-libopencsd)

DWLIBS := -ldw ifeq ($(findstring -static,${LDFLAGS}),-static) DWLIBS += -lelf -lz -llzma -lbz2 -lzstd

LIBDW_VERSION := $(shell $(PKG_CONFIG) --modversion libdw).0.0 LIBDW_VERSION_1 := $(word 1, $(subst ., ,$(LIBDW_VERSION))) LIBDW_VERSION_2 := $(word 2, $(subst ., ,$(LIBDW_VERSION)))

Elfutils merged libebl.a into libdw.a starting from version 0.177,

Link libebl.a only if libdw is older than this version.

ifeq ($(shell test $(LIBDW_VERSION_2) -lt 177; echo ?),0) DWLIBS += -lebl endif

Must put -ldl after -lebl for dependency

DWARFLIBS += -ldl endif

$(OUTPUT)test-libdw.bin: $(BUILD) $(DWLIBS)

$(OUTPUT)test-libelf-getphdrnum.bin: $(BUILD) -lelf

$(OUTPUT)test-libelf-gelf_getnote.bin: $(BUILD) -lelf

$(OUTPUT)test-libelf-getshdrstrndx.bin: $(BUILD) -lelf

$(OUTPUT)test-libelf-zstd.bin: $(BUILD) -lelf -lz -lzstd

$(OUTPUT)test-libdebuginfod.bin: $(BUILD) -ldebuginfod

$(OUTPUT)test-libnuma.bin: $(BUILD) -lnuma

$(OUTPUT)test-numa_num_possible_cpus.bin: $(BUILD) -lnuma

$(OUTPUT)test-libunwind.bin: $(BUILD) -lelf -llzma

$(OUTPUT)test-libunwind-debug-frame.bin: $(BUILD) -lelf -llzma $(OUTPUT)test-libunwind-x86.bin: $(BUILD) -lelf -llzma -lunwind-x86

$(OUTPUT)test-libunwind-x86_64.bin: $(BUILD) -lelf -llzma -lunwind-x86_64

$(OUTPUT)test-libunwind-arm.bin: $(BUILD) -lelf -llzma -lunwind-arm

$(OUTPUT)test-libunwind-aarch64.bin: $(BUILD) -lelf -llzma -lunwind-aarch64

$(OUTPUT)test-libunwind-debug-frame-arm.bin: $(BUILD) -lelf -llzma -lunwind-arm

$(OUTPUT)test-libunwind-debug-frame-aarch64.bin: $(BUILD) -lelf -llzma -lunwind-aarch64

$(OUTPUT)test-libslang.bin: $(BUILD) -lslang

$(OUTPUT)test-libslang-include-subdir.bin: $(BUILD) -lslang

$(OUTPUT)test-libtraceevent.bin: $(BUILD) -ltraceevent

$(OUTPUT)test-libcpupower.bin: $(BUILD) -lcpupower

$(OUTPUT)test-libtracefs.bin: $(BUILD) $(shell $(PKG_CONFIG) --cflags libtracefs 2>/dev/null) -ltracefs

$(OUTPUT)test-libcrypto.bin: $(BUILD) -lcrypto

$(OUTPUT)test-gtk2.bin: $(BUILD) $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null) -Wno-deprecated-declarations

$(OUTPUT)test-gtk2-infobar.bin: $(BUILD) $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null)

grep-libs = $(filter -l%,$(1)) strip-libs = $(filter-out -l%,$(1))

PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null) PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS)) PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS)) PERL_EMBED_CCOPTS = $(shell perl -MExtUtils::Embed -e ccopts 2>/dev/null) FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)

ifeq ($(CC_NO_CLANG), 0) PERL_EMBED_LDOPTS := $(filter-out -specs=%,$(PERL_EMBED_LDOPTS)) PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS)) PERL_EMBED_CCOPTS := $(filter-out -specs=%,$(PERL_EMBED_CCOPTS)) FLAGS_PERL_EMBED += -Wno-compound-token-split-by-macro endif

$(OUTPUT)test-libperl.bin: $(BUILD) $(FLAGS_PERL_EMBED)

$(OUTPUT)test-libpython.bin: $(BUILD) $(FLAGS_PYTHON_EMBED)

$(OUTPUT)test-libbfd.bin: $(BUILD_BFD)

$(OUTPUT)test-libbfd-buildid.bin: $(BUILD_BFD) || $(BUILD_BFD) -liberty || $(BUILD_BFD) -liberty -lz

$(OUTPUT)test-disassembler-four-args.bin: $(BUILD_BFD) -lopcodes || $(BUILD_BFD) -lopcodes -liberty ||
$(BUILD_BFD) -lopcodes -liberty -lz

$(OUTPUT)test-disassembler-init-styled.bin: $(BUILD_BFD) -lopcodes || $(BUILD_BFD) -lopcodes -liberty ||
$(BUILD_BFD) -lopcodes -liberty -lz

$(OUTPUT)test-reallocarray.bin: $(BUILD)

$(OUTPUT)test-libbfd-liberty.bin: $(CC) $(CFLAGS) -Wall -Werror -o $@ test-libbfd.c -DPACKAGE='"perf"' $(LDFLAGS) -lbfd -ldl -liberty

$(OUTPUT)test-libbfd-liberty-z.bin: $(CC) $(CFLAGS) -Wall -Werror -o $@ test-libbfd.c -DPACKAGE='"perf"' $(LDFLAGS) -lbfd -ldl -liberty -lz

$(OUTPUT)test-cplus-demangle.bin: $(BUILD) -liberty

$(OUTPUT)test-cxa-demangle.bin: $(BUILDXX)

$(OUTPUT)test-backtrace.bin: $(BUILD)

$(OUTPUT)test-timerfd.bin: $(BUILD)

$(OUTPUT)test-libbabeltrace.bin: $(BUILD) # -lbabeltrace provided by $(FEATURE_CHECK_LDFLAGS-libbabeltrace)

$(OUTPUT)test-libcapstone.bin: $(BUILD) # -lcapstone provided by $(FEATURE_CHECK_LDFLAGS-libcapstone)

$(OUTPUT)test-compile-32.bin: $(CC) -m32 -o $@ test-compile.c

$(OUTPUT)test-compile-x32.bin: $(CC) -mx32 -o $@ test-compile.c

$(OUTPUT)test-zlib.bin: $(BUILD) -lz

$(OUTPUT)test-lzma.bin: $(BUILD) -llzma

$(OUTPUT)test-get_cpuid.bin: $(BUILD)

$(OUTPUT)test-bpf.bin: $(BUILD)

$(OUTPUT)test-libbpf.bin: $(BUILD) -lbpf

$(OUTPUT)test-libbpf-btf__load_from_kernel_by_id.bin: $(BUILD) -lbpf

$(OUTPUT)test-libbpf-bpf_prog_load.bin: $(BUILD) -lbpf

$(OUTPUT)test-libbpf-bpf_map_create.bin: $(BUILD) -lbpf

$(OUTPUT)test-libbpf-bpf_object__next_program.bin: $(BUILD) -lbpf

$(OUTPUT)test-libbpf-bpf_object__next_map.bin: $(BUILD) -lbpf

$(OUTPUT)test-libbpf-bpf_program__set_insns.bin: $(BUILD) -lbpf

$(OUTPUT)test-libbpf-btf__raw_data.bin: $(BUILD) -lbpf

$(OUTPUT)test-sdt.bin: $(BUILD)

$(OUTPUT)test-cxx.bin: $(BUILDXX) -std=gnu++11

$(OUTPUT)test-gettid.bin: $(BUILD)

$(OUTPUT)test-jvmti.bin: $(BUILD)

$(OUTPUT)test-jvmti-cmlr.bin: $(BUILD)

$(OUTPUT)test-llvm.bin: $(BUILDXX) -std=gnu++17
-I$(shell $(LLVM_CONFIG) --includedir)
-L$(shell $(LLVM_CONFIG) --libdir)
$(shell $(LLVM_CONFIG) --libs Core BPF)
$(shell $(LLVM_CONFIG) --system-libs)
> $(@:.bin=.make.output) 2>&1

$(OUTPUT)test-llvm-perf.bin: $(BUILDXX) -std=gnu++17
-I$(shell $(LLVM_CONFIG) --includedir)
-L$(shell $(LLVM_CONFIG) --libdir)
$(shell $(LLVM_CONFIG) --libs Core BPF)
$(shell $(LLVM_CONFIG) --system-libs)
> $(@:.bin=.make.output) 2>&1

$(OUTPUT)test-clang.bin: $(BUILDXX) -std=gnu++17
-I$(shell $(LLVM_CONFIG) --includedir)
-L$(shell $(LLVM_CONFIG) --libdir)
-Wl,--start-group -lclang-cpp -Wl,--end-group
$(shell $(LLVM_CONFIG) --libs Core option)
$(shell $(LLVM_CONFIG) --system-libs)
> $(@:.bin=.make.output) 2>&1

-include $(OUTPUT)*.d

$(OUTPUT)test-libaio.bin: $(BUILD) -lrt

$(OUTPUT)test-libzstd.bin: $(BUILD) -lzstd

$(OUTPUT)test-clang-bpf-co-re.bin: $(CLANG) -S -g --target=bpf -o - $(patsubst %.bin,%.c,$(@F)) |
grep BTF_KIND_VAR

$(OUTPUT)test-file-handle.bin: $(BUILD)

$(OUTPUT)test-libpfm4.bin: $(BUILD) -lpfm

$(OUTPUT)test-bpftool-skeletons.bin: $(SYSTEM_BPFTOOL) version | grep '^features:.*skeletons'
> $(@:.bin=.make.output) 2>&1 ###############################

clean: rm -f $(FILES) $(OUTPUT)*.d $(FILES:.bin=.make.output)