Blob Blame History Raw
# Macros to constrain resource use during the build process

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