The "|| echo -lzstd" default makes zstd an unconditional link dependency of resolve_btfids. On systems where libzstd-dev is not installed and pkg-config fails, the linker fails: ld: cannot find -lzstd: No such file or directory libzstd is a transitive dependency of libelf, so the -lzstd flag is strictly necessary only for static builds [1]. Remove ZSTD_LIBS variable, and instead set LIBELF_LIBS depending on whether the build is static or not. Use $(HOSTPKG_CONFIG) as primary source of the flags list. Also add a default value for HOSTPKG_CONFIG in case it's not built via the toplevel Makefile. Pass it from selftests/bpf too. [1] https://lore.kernel.org/bpf/4ff82800-2daa-4b9f-95a9-6f512859ee70@linux.dev/
Unified · Split
| @@ -23,6 +23,7 @@ RM ?= rm · 22 unmodified lines | ||
| 23 | 23 | HOSTCC ?= gcc |
| 24 | 24 | HOSTLD ?= ld |
| 25 | 25 | HOSTAR ?= ar |
| 26 | +HOSTPKG_CONFIG ?= pkg-config | |
| 26 | 27 | CROSS_COMPILE = |
| 27 | 28 | |
| 28 | 29 | OUTPUT ?= $(srctree)/tools/bpf/resolve_btfids/ |
| @@ -63,10 +64,14 @@ $(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(LIBBPF_OU · 34 unmodified lines | ||
| 63 | 64 | $(abspath $@) install_headers |
| 64 | 65 | |
| 65 | 66 | LIBELF_FLAGS := $(shell $(HOSTPKG_CONFIG) libelf --cflags 2>/dev/null) |
| 67 | + | |
| 68 | +ifneq ($(filter -static,$(EXTRA_LDFLAGS)),) | |
| 69 | +LIBELF_LIBS := $(shell $(HOSTPKG_CONFIG) libelf --libs --static 2>/dev/null || echo -lelf -lzstd) | |
| 70 | +else | |
| 66 | 71 | LIBELF_LIBS := $(shell $(HOSTPKG_CONFIG) libelf --libs 2>/dev/null || echo -lelf) |
| 72 | +endif | |
| 67 | 73 | |
| 68 | 74 | ZLIB_LIBS := $(shell $(HOSTPKG_CONFIG) zlib --libs 2>/dev/null || echo -lz) |
| 69 | −ZSTD_LIBS := $(shell $(HOSTPKG_CONFIG) libzstd --libs 2>/dev/null || echo -lzstd) | |
| 70 | 75 | |
| 71 | 76 | HOSTCFLAGS_resolve_btfids += -g \ |
| 72 | 77 | -I$(srctree)/tools/include \ |
| @@ -76,7 +81,7 @@ HOSTCFLAGS_resolve_btfids += -g \ · 3 unmodified lines | ||
| 76 | 81 | $(LIBELF_FLAGS) \ |
| 77 | 82 | -Wall -Werror |
| 78 | 83 | |
| 79 | −LIBS = $(LIBELF_LIBS) $(ZLIB_LIBS) $(ZSTD_LIBS) | |
| 84 | +LIBS = $(LIBELF_LIBS) $(ZLIB_LIBS) | |
| 80 | 85 | |
| 81 | 86 | export srctree OUTPUT HOSTCFLAGS_resolve_btfids Q HOSTCC HOSTLD HOSTAR |
| 82 | 87 | include $(srctree)/tools/build/Makefile.include |
| @@ -409,6 +409,7 @@ $(RESOLVE_BTFIDS): $(HOST_BPFOBJ) | $(HOST_BUILD_DIR)/resolve_btfids \ · 408 unmodified lines | ||
| 409 | 409 | CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)" \ |
| 410 | 410 | LIBBPF_INCLUDE=$(HOST_INCLUDE_DIR) \ |
| 411 | 411 | EXTRA_LDFLAGS='$(SAN_LDFLAGS) $(EXTRA_LDFLAGS)' \ |
| 412 | + HOSTPKG_CONFIG=$(PKG_CONFIG) \ | |
| 412 | 413 | OUTPUT=$(HOST_BUILD_DIR)/resolve_btfids/ BPFOBJ=$(HOST_BPFOBJ) |
| 413 | 414 | |
| 414 | 415 | # Get Clang's default includes on this system, as opposed to those seen by |