From 43dfe7d6f058960976cfcd4445629d0222a418a7 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 3229b74..d6d8b80 100644 --- a/redhat-rpm-config.spec +++ b/redhat-rpm-config.spec @@ -6,7 +6,7 @@ Summary: Red Hat specific rpm configuration files Name: redhat-rpm-config -Version: 194 +Version: 195 Release: 1%{?dist} # No version specified. License: GPL+ @@ -215,6 +215,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 - 195-1 +- 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 + * Mon Aug 2 2021 Florian Weimer - 194-1 - Active GCC plugin during LTO linking