forked from pool/memory-constraints
		
	
		
			
				
	
	
		
			27 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #
 | |
| # 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}
 |