History

resolve_btfids: Fix linker flags detection

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/

Ihor Solodrai committed 8 months ago

Commit b0dcdcb1 parent 325d1ba2 files · +8 −2Browse files

Unified · Split

2 files
  1. tools/bpf/resolve_btfids/Makefile +7 −2
  2. tools/testing/selftests/bpf/Makefile +1 −0
tools/bpf/resolve_btfids/Makefile+7−2
@@ -23,6 +23,7 @@ RM ?= rm · 22 unmodified lines
23HOSTCC ?= gcc23HOSTCC ?= gcc
24HOSTLD ?= ld24HOSTLD ?= ld
25HOSTAR ?= ar25HOSTAR ?= ar
26HOSTPKG_CONFIG ?= pkg-config
26CROSS_COMPILE =27CROSS_COMPILE =
27 28
28OUTPUT ?= $(srctree)/tools/bpf/resolve_btfids/29OUTPUT ?= $(srctree)/tools/bpf/resolve_btfids/
@@ -63,10 +64,14 @@ $(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(LIBBPF_OU · 34 unmodified lines
63 $(abspath $@) install_headers64 $(abspath $@) install_headers
64 65
65LIBELF_FLAGS := $(shell $(HOSTPKG_CONFIG) libelf --cflags 2>/dev/null)66LIBELF_FLAGS := $(shell $(HOSTPKG_CONFIG) libelf --cflags 2>/dev/null)
67
68ifneq ($(filter -static,$(EXTRA_LDFLAGS)),)
69LIBELF_LIBS := $(shell $(HOSTPKG_CONFIG) libelf --libs --static 2>/dev/null || echo -lelf -lzstd)
70else
66LIBELF_LIBS := $(shell $(HOSTPKG_CONFIG) libelf --libs 2>/dev/null || echo -lelf)71LIBELF_LIBS := $(shell $(HOSTPKG_CONFIG) libelf --libs 2>/dev/null || echo -lelf)
72endif
67 73
68ZLIB_LIBS := $(shell $(HOSTPKG_CONFIG) zlib --libs 2>/dev/null || echo -lz)74ZLIB_LIBS := $(shell $(HOSTPKG_CONFIG) zlib --libs 2>/dev/null || echo -lz)
69ZSTD_LIBS := $(shell $(HOSTPKG_CONFIG) libzstd --libs 2>/dev/null || echo -lzstd)
70 75
71HOSTCFLAGS_resolve_btfids += -g \76HOSTCFLAGS_resolve_btfids += -g \
72 -I$(srctree)/tools/include \77 -I$(srctree)/tools/include \
@@ -76,7 +81,7 @@ HOSTCFLAGS_resolve_btfids += -g \ · 3 unmodified lines
76 $(LIBELF_FLAGS) \81 $(LIBELF_FLAGS) \
77 -Wall -Werror82 -Wall -Werror
78 83
79LIBS = $(LIBELF_LIBS) $(ZLIB_LIBS) $(ZSTD_LIBS)84LIBS = $(LIBELF_LIBS) $(ZLIB_LIBS)
80 85
81export srctree OUTPUT HOSTCFLAGS_resolve_btfids Q HOSTCC HOSTLD HOSTAR86export srctree OUTPUT HOSTCFLAGS_resolve_btfids Q HOSTCC HOSTLD HOSTAR
82include $(srctree)/tools/build/Makefile.include87include $(srctree)/tools/build/Makefile.include
tools/testing/selftests/bpf/Makefile+1−0
@@ -409,6 +409,7 @@ $(RESOLVE_BTFIDS): $(HOST_BPFOBJ) | $(HOST_BUILD_DIR)/resolve_btfids \ · 408 unmodified lines
409 CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)" \409 CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)" \
410 LIBBPF_INCLUDE=$(HOST_INCLUDE_DIR) \410 LIBBPF_INCLUDE=$(HOST_INCLUDE_DIR) \
411 EXTRA_LDFLAGS='$(SAN_LDFLAGS) $(EXTRA_LDFLAGS)' \411 EXTRA_LDFLAGS='$(SAN_LDFLAGS) $(EXTRA_LDFLAGS)' \
412 HOSTPKG_CONFIG=$(PKG_CONFIG) \
412 OUTPUT=$(HOST_BUILD_DIR)/resolve_btfids/ BPFOBJ=$(HOST_BPFOBJ)413 OUTPUT=$(HOST_BUILD_DIR)/resolve_btfids/ BPFOBJ=$(HOST_BPFOBJ)
413 414
414# Get Clang's default includes on this system, as opposed to those seen by415# Get Clang's default includes on this system, as opposed to those seen by