From 5b23e464528ef988cfcd0a87b3ec8db0520db867 Mon Sep 17 00:00:00 2001 From: Kalev Lember 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 Signed-off-by: Mark Wielaard --- 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