X-Git-Url: http://git.ipfire.org/?p=ipfire-2.x.git;a=blobdiff_plain;f=tools%2Fmake-functions;h=b7e957e1856bc65c4ef4c91dff11686b7a76bf77;hp=508f5f21eed358d1dad239165270eb9668a49fc8;hb=32e6d3e320bb21845f1cfaec4b0a23cf390250bd;hpb=65ca3f05075a11e2bce7daef5980f9bb4715ae84 diff --git a/tools/make-functions b/tools/make-functions index 508f5f21ee..b7e957e185 100644 --- a/tools/make-functions +++ b/tools/make-functions @@ -60,6 +60,24 @@ WARN="\\033[1;35m" FAIL="\\033[1;31m" NORMAL="\\033[0;39m" +system_processors() { + getconf _NPROCESSORS_ONLN 2>/dev/null || echo "1" +} + +system_memory() { + local key val unit + + while read -r key val unit; do + case "${key}" in + MemTotal:*) + # Convert to MB + echo "$(( ${val} / 1024 ))" + break + ;; + esac + done < /proc/meminfo +} + configure_build() { local build_arch="${1}" @@ -126,6 +144,26 @@ configure_build() { CFLAGS="-O2 -pipe -Wall -fexceptions -fPIC ${CFLAGS_ARCH}" CXXFLAGS="${CFLAGS}" + + # Determine parallelism + if [ -z "${MAKETUNING}" ]; then + # We assume that each process consumes about + # 192MB of memory. Therefore we find out how + # many processes fit into memory. + local mem_max=$(( ${HOST_MEM} / 192 )) + + local processors="$(system_processors)" + local cpu_max=$(( ${processors} * 2 )) + + local parallelism + if [ ${mem_max} -lt ${cpu_max} ]; then + parallelism=${mem_max} + else + parallelism=${cpu_max} + fi + + MAKETUNING="-j${parallelism}" + fi } configure_build_guess() { @@ -612,6 +650,7 @@ lfsmake1() { CCACHE_COMPILERCHECK="${CCACHE_COMPILERCHECK}" \ CFLAGS="${CFLAGS}" \ CXXFLAGS="${CXXFLAGS}" \ + MAKETUNING="${MAKETUNING}" \ make -f $* \ TOOLCHAIN=1 \ CROSSTARGET="${CROSSTARGET}" \ @@ -621,7 +660,6 @@ lfsmake1() { LFS_BASEDIR="${BASEDIR}" \ ROOT="${LFS}" \ KVER="${KVER}" \ - MAKETUNING="${MAKETUNING}" \ install >> $LOGFILE 2>&1 local COMPILE_SUCCESS=$? @@ -645,8 +683,9 @@ lfsmake2() { local PS1='\u:\w$ ' enterchroot \ - bash -x -c "cd /usr/src/lfs && make -f $* \ + bash -x -c "cd /usr/src/lfs && \ MAKETUNING=${MAKETUNING} \ + make -f $* \ LFS_BASEDIR=/usr/src install" \ >> ${LOGFILE} 2>&1