87 lines
3.0 KiB
Diff
87 lines
3.0 KiB
Diff
|
From 5b23e464528ef988cfcd0a87b3ec8db0520db867 Mon Sep 17 00:00:00 2001
|
||
|
From: Kalev Lember <klember@redhat.com>
|
||
|
Date: Thu, 19 Jan 2023 17:03:18 +0100
|
||
|
Subject: [PATCH 1/4] find-debuginfo: Pass -j down to dwz
|
||
|
|
||
|
Now that dwz 0.15 supports parallel jobs, add a way to control it from
|
||
|
here. find-debuginfo already has a -j parameter so we can just extend it
|
||
|
and pass the value down to dwz as well.
|
||
|
|
||
|
This should fix building large packages on memory constrained builders,
|
||
|
such as webkitgtk on s390x in Fedora koji build system, where we can now
|
||
|
use the -j option to tune down parallelism to avoid running out of
|
||
|
memory during dwz run.
|
||
|
|
||
|
Add a configure check to make sure the installed dwz supports the
|
||
|
-j option.
|
||
|
|
||
|
Signed-off-by: Kalev Lember <klember@redhat.com>
|
||
|
Signed-off-by: Mark Wielaard <mark@klomp.org>
|
||
|
---
|
||
|
Makefile.am | 3 ++-
|
||
|
configure.ac | 21 +++++++++++++++++++++
|
||
|
scripts/find-debuginfo.in | 1 +
|
||
|
3 files changed, 24 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/Makefile.am b/Makefile.am
|
||
|
index 2060b96..4a5092d 100644
|
||
|
--- a/Makefile.am
|
||
|
+++ b/Makefile.am
|
||
|
@@ -33,7 +33,8 @@ CLEANFILES = $(bin_SCRIPTS)
|
||
|
# Some standard substitutions for scripts
|
||
|
do_subst = ($(SED) -e 's,[@]PACKAGE[@],$(PACKAGE),g' \
|
||
|
-e 's,[@]VERSION[@],$(VERSION),g' \
|
||
|
- -e 's,[@]READELF[@],$(READELF),g')
|
||
|
+ -e 's,[@]READELF[@],$(READELF),g' \
|
||
|
+ -e 's,[@]DWZ_J[@],$(DWZ_J),g')
|
||
|
|
||
|
find-debuginfo: $(top_srcdir)/scripts/find-debuginfo.in Makefile
|
||
|
$(do_subst) < "$(top_srcdir)/scripts/$@.in" > "$@"
|
||
|
diff --git a/configure.ac b/configure.ac
|
||
|
index 6a53365..f2d1571 100644
|
||
|
--- a/configure.ac
|
||
|
+++ b/configure.ac
|
||
|
@@ -47,6 +47,27 @@ AC_CHECK_TOOL([LD], [ld])
|
||
|
AC_CHECK_TOOL([READELF], [readelf])
|
||
|
AM_MISSING_PROG(HELP2MAN, help2man)
|
||
|
|
||
|
+# Whether dwz support -j.
|
||
|
+# Make sure to compile something with -g.
|
||
|
+# Run dwz on it with -j1.
|
||
|
+DWZ_J=""
|
||
|
+AC_CHECK_PROG([DWZ], [dwz], [dwz])
|
||
|
+if test "x$DWZ" = "xdwz"; then
|
||
|
+ save_CFLAGS="$CFLAGS"
|
||
|
+ CFLAGS="$save_CFLAGS -g"
|
||
|
+ AC_CACHE_CHECK([whether the dwz support -j], ac_cv_dwz_j, [dnl
|
||
|
+ AC_LINK_IFELSE([AC_LANG_PROGRAM()],[dnl
|
||
|
+ ac_cv_dwz_j=yes; ${DWZ} -j1 conftest$EXEEXT 2>/dev/null || ac_cv_dwz_j=no],
|
||
|
+ AC_MSG_FAILURE([unexpected compile failure]))])
|
||
|
+ if test "x$ac_cv_dwz_j" = "xyes"; then
|
||
|
+ DWZ_J="-j"
|
||
|
+ fi
|
||
|
+ CFLAGS="$save_CFLAGS"
|
||
|
+else
|
||
|
+ AC_MSG_WARN([dwz not installed])
|
||
|
+fi
|
||
|
+AC_SUBST([DWZ_J])
|
||
|
+
|
||
|
# Only really an issue on 32bit platforms. Makes sure we'll get large off_t.
|
||
|
AC_SYS_LARGEFILE
|
||
|
|
||
|
diff --git a/scripts/find-debuginfo.in b/scripts/find-debuginfo.in
|
||
|
index b07a52f..8090c84 100755
|
||
|
--- a/scripts/find-debuginfo.in
|
||
|
+++ b/scripts/find-debuginfo.in
|
||
|
@@ -586,6 +586,7 @@ if $run_dwz \
|
||
|
done
|
||
|
dwz_multifile_name="${dwz_multifile_name}${dwz_multifile_suffix}"
|
||
|
dwz_opts="-h -q -r"
|
||
|
+ [ -n "@DWZ_J@" ] && dwz_opts="${dwz_opts} -j ${n_jobs}"
|
||
|
[ ${#dwz_files[@]} -gt 1 ] && [ "$dwz_single_file_mode" = "false" ] \
|
||
|
&& dwz_opts="${dwz_opts} -m .dwz/${dwz_multifile_name}"
|
||
|
mkdir -p "${RPM_BUILD_ROOT}/usr/lib/debug/.dwz"
|
||
|
--
|
||
|
2.39.1
|
||
|
|