X-Git-Url: http://git.ipfire.org/?p=ipfire-2.x.git;a=blobdiff_plain;f=tools%2Fmake-functions;h=439298b3fd03171cfb32245db6c6f669c9c1b993;hp=8e40163fcddc688ff811d26475109392108bf2f4;hb=5a4fb99e8a4b8b79a8bd61c3d6b9581f8c1dfe24;hpb=e3acfbc1c7f409974b5f7ab29cdda7f94e779588 diff --git a/tools/make-functions b/tools/make-functions index 8e40163fcd..439298b3fd 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() { @@ -138,11 +176,7 @@ configure_build_guess() { echo "aarch64" ;; - armv7*) - echo "armv7hl" - ;; - - armv6*|armv5*) + armv7*|armv6*|armv5*) echo "armv5tel" ;; @@ -225,7 +259,7 @@ beautify() STAGE_TIME_START=`date +%s` echo -ne "${BOLD}*** (${BUILD_ARCH}) ${MESSAGE}${NORMAL}" if [ "$LAST_STAGE_TIME" ]; then - echo -ne "${DONE} (Last stage took $LAST_STAGE_TIME secs)${NORMAL}" + echo -ne "${DONE} (Last stage took $LAST_STAGE_TIME secs)${NORMAL}\n" fi echo -ne "${BOLD}${SET_VER_COL} version${SET_OPT_COL} options${SET_TIME_COL} time (sec)${SET_RESULT_COL} status${NORMAL}\n" ;; @@ -612,6 +646,7 @@ lfsmake1() { CCACHE_COMPILERCHECK="${CCACHE_COMPILERCHECK}" \ CFLAGS="${CFLAGS}" \ CXXFLAGS="${CXXFLAGS}" \ + MAKETUNING="${MAKETUNING}" \ make -f $* \ TOOLCHAIN=1 \ CROSSTARGET="${CROSSTARGET}" \ @@ -621,7 +656,6 @@ lfsmake1() { LFS_BASEDIR="${BASEDIR}" \ ROOT="${LFS}" \ KVER="${KVER}" \ - MAKETUNING="${MAKETUNING}" \ install >> $LOGFILE 2>&1 local COMPILE_SUCCESS=$? @@ -645,8 +679,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