Re: [PATCH v2 3/6] perf: build: Only link libebl.a for old libdw

From: Leo Yan
Date: Tue Jun 25 2024 - 14:09:23 EST



On 6/22/24 00:40, Namhyung Kim wrote:

On Mon, Jun 10, 2024 at 10:54:30AM +0100, Leo Yan wrote:
Since libdw version 0.177, elfutils has merged libebl.a into libdw (see
the commit "libebl: Don't install libebl.a, libebl.h and remove backends
from spec." in the elfutils repository).

As a result, libebl.a does not exist on Debian Bullseye and newer
releases, causing static perf builds to fail on these distributions.

What about libebl.so? I'm curious why it's ok with dynamic build and
causing a problem with static builds.

For the new Debian / Ubuntu distros, libebl has been merged in libdw so
merged into libdw, so libebl.so doesn't exist.

'-lebl' is only included only for static building (see below code piece,
it detects '-static' in ${LDFLAGS}). This is why dynamic build has no
issue.

This commit checks the libdw version and only links libebl.a if it
detects that the libdw version is older than 0.177.

Have you tested on the older versions too?

IIRC, I did test on the Debian buster (which contains the libdw version
is 0.176).

Signed-off-by: Leo Yan <leo.yan@xxxxxxx>
---
tools/build/feature/Makefile | 12 +++++++++++-
tools/perf/Makefile.config | 12 +++++++++++-
2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
index 084f803093c3..b23b3e8ad5e4 100644
--- a/tools/build/feature/Makefile
+++ b/tools/build/feature/Makefile
@@ -171,7 +171,17 @@ $(OUTPUT)test-libopencsd.bin:

DWARFLIBS := -ldw
ifeq ($(findstring -static,${LDFLAGS}),-static)
-DWARFLIBS += -lelf -lebl -lz -llzma -lbz2
+ DWARFLIBS += -lelf -lz -llzma -lbz2
+
+ LIBDW_VERSION := $(shell $(PKG_CONFIG) --modversion libdw)
+ 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)
+ DWARFLIBS += -lebl

I'm not sure if it's ok to change the order as libebl might depend on
later libraries like libz.

I confirmed that this change works on Debian Buster (Debian 10) and
Bookworm (Debian 12).

Thanks,
Leo