# # Macros for memory constraints on buildjobs. # If you happen to have HUGE packages sometimes you need to do # crazy magic in order to make sure it is most of the time building # rather than just giving you OOM # # m: memory limit in Bs per core; default is 1000000 %limit_build(m:) \ _threads="`/usr/bin/getconf _NPROCESSORS_ONLN`" \ _core_memory="%{-m:%{-m*}}%{!-m:1000000}" \ echo "Available memory:" \ cat /proc/meminfo \ echo "System limits:" \ ulimit -a \ echo "System jobs: $_threads" \ if test "$_threads" -gt 1 ; then \ mem_per_process="$_core_memory" \ max_mem=$(awk '/MemTotal/ { print $2 }' /proc/meminfo) \ max_jobs="$(($max_mem / $mem_per_process))" \ test "$_threads" -gt "$max_jobs" && $_threads="$max_jobs" && echo "Warning: Reducing number of jobs to $max_jobs because of memory limits" \ test "$_threads" -le 0 && $_threads=1 && echo "Warning: Do not use the parallel build at all becuse of memory limits" \ fi \ %global jobs $_threads \ %global _smp_mflags -j$_threads \ %{nil}