From edc19bf3dc8a5839e68f3c729d180b92f7a8fcaf Mon Sep 17 00:00:00 2001 From: Michel Alexandre Salim Date: Sun, 15 Aug 2021 13:39:55 -0700 Subject: [PATCH] Fix macros.build-constraints' %limit_build number of CPUs will never be set to less than 1 this now outputs build flag overrides to be used with %make_build etc. add documentation Signed-off-by: Michel Alexandre Salim --- macros.build-constraints | 48 +++++++++++++++++++++++++++++++++------- redhat-rpm-config.spec | 8 ++++++- 2 files changed, 47 insertions(+), 9 deletions(-) diff --git a/macros.build-constraints b/macros.build-constraints index 1343cd8..db99418 100644 --- a/macros.build-constraints +++ b/macros.build-constraints @@ -1,10 +1,42 @@ # Macros to constrain resource use during the build process -# m: memory limit in MBs per core; default is 1024 -%limit_build(m:) \ - _mem_per_process="%{-m:%{-m*}}%{!-m:1024}" \ - _max_mem=$(awk '/MemTotal/ { print $2 }' /proc/meminfo) \ - _max_jobs="$(($_max_mem / ($_mem_per_process * 1024)))" \ - _cur_max_jobs="%{_smp_build_ncpus}" \ - test "${_cur_max_jobs}" -gt "${_max_jobs}" && _cur_max_jobs="${_max_jobs}" && echo "Warning: Reducing build parallelism to -j${_max_jobs} because of memory limits" \ - %global _smp_build_ncpus "${_cur_max_jobs}" +# outputs build flag overrides to be used in conjunction with +# %%make_build, %%cmake_build etc. +# +# if no override is needed, this macro outputs nothing +# +# - m memory limit in MBs per core; default is 1024 +# +# Usage: +# e.g. %make_build %{limit_build -m 2048} +# => /usr/bin/make -O -j16 V=1 VERBOSE=1 +# %make_build %{limit_build -m 40960} +# => /usr/bin/make -O -j16 V=1 VERBOSE=1 -j1 +# +%limit_build(m:) %{lua: + local mem_per_process=rpm.expand("%{-m*}") + if mem_per_process == "" then + mem_per_process = 1024 + else + mem_per_process = tonumber(mem_per_process) + end + local mem_total = 0 + for line in io.lines('/proc/meminfo') do + if line:sub(1, 9) == "MemTotal:" then + local tokens = {} + for token in line:gmatch("%w+") do + tokens[#tokens + 1] = token + end + mem_total = tonumber(tokens[2]) + break + end + end + local max_jobs = mem_total // (mem_per_process * 1024) + if max_jobs < 1 then + max_jobs = 1 + end + cur_max_jobs=tonumber(rpm.expand("%{_smp_build_ncpus}")) + if cur_max_jobs > max_jobs then + print("-j" .. max_jobs) + end +} diff --git a/redhat-rpm-config.spec b/redhat-rpm-config.spec index 9161063..9817f2e 100644 --- a/redhat-rpm-config.spec +++ b/redhat-rpm-config.spec @@ -7,7 +7,7 @@ Summary: Red Hat specific rpm configuration files Name: redhat-rpm-config Version: 176 -Release: 2%{?dist} +Release: 3%{?dist} # No version specified. License: GPL+ URL: https://src.fedoraproject.org/rpms/redhat-rpm-config @@ -216,6 +216,12 @@ install -p -m 644 -t %{buildroot}%{_rpmluadir}/fedora/srpm forge.lua %{_rpmconfigdir}/macros.d/macros.kmp %changelog +* Sun Aug 15 2021 Michel Alexandre Salim - 176-3 +- Fix macros.build-constraints' %%limit_build + - number of CPUs will never be set to less than 1 + - this now outputs build flag overrides to be used with %%make_build etc. + - add documentation + * Sat Jul 24 2021 Michel Alexandre Salim - 176-2 - Add macros.build-constraints - Keep the misc macros in alphabetical order