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 <salimma@fedoraproject.org>
This commit is contained in:
Michel Alexandre Salim 2021-08-15 13:39:55 -07:00
parent 0fbc36d215
commit edc19bf3dc
2 changed files with 47 additions and 9 deletions

View File

@ -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
}

View File

@ -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 <salimma@fedoraproject.org> - 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 <salimma@fedoraproject.org> - 176-2
- Add macros.build-constraints
- Keep the misc macros in alphabetical order