find-debuginfo: Pass -j down to dwz
authorKalev Lember <klember@redhat.com>
Thu, 19 Jan 2023 16:03:18 +0000 (17:03 +0100)
committerMark Wielaard <mark@klomp.org>
Thu, 26 Jan 2023 22:52:30 +0000 (23:52 +0100)
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
configure.ac
scripts/find-debuginfo.in

index 2060b96eee2e4d139072637276fc5d545016b165..4a5092dfcbec5c2b899036e7ddc6b53abc11db02 100644 (file)
@@ -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" > "$@"
index 6a53365eef0841987788b6ccb23d260d33d32cb8..f2d15716f57d4518ce1dcc5212841a8245bf1b0f 100644 (file)
@@ -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
 
index b07a52fe4b983bc7c9c5e12414d68bb91bbe7ea3..8090c8422631ebfddfa28508bec2adf23c810510 100755 (executable)
@@ -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"
This page took 0.063648 seconds and 5 git commands to generate.