X-Git-Url: http://git.ipfire.org/?p=ipfire-2.x.git;a=blobdiff_plain;f=tools%2Fmake-functions;h=6ef1d115342a2340743fcae6950813e00062ae1d;hp=ebe157a477c09c2ad736bf36cb8f7c9abba26343;hb=6c4cc7ea1bcb58c586ae64ae6f76720b6b89bda4;hpb=9a9cb82c4f73b7ec11a6ebb4e2f50cd319f25aa3 diff --git a/tools/make-functions b/tools/make-functions index ebe157a477..6ef1d11534 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}" @@ -120,12 +138,33 @@ configure_build() { fi BUILD_ARCH="${build_arch}" + TOOLS_DIR="/tools_${BUILD_ARCH}" # Enables hardening HARDENING_CFLAGS="-Wp,-D_FORTIFY_SOURCE=2 -fstack-protector-strong --param=ssp-buffer-size=4" 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 +177,7 @@ configure_build_guess() { echo "aarch64" ;; - armv7*) - echo "armv7hl" - ;; - - armv6*|armv5*) + armv7*|armv6*|armv5*) echo "armv5tel" ;; @@ -223,9 +258,9 @@ beautify() LAST_STAGE_TIME=$[ `date +%s` - $STAGE_TIME_START ] fi STAGE_TIME_START=`date +%s` - echo -ne "${BOLD}*** ${MESSAGE}${NORMAL}" + 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" ;; @@ -351,9 +386,9 @@ exiterror() { } fake_environ() { - [ -e "${BASEDIR}/build/tools/lib/libpakfire_preload.so" ] || return + [ -e "${BASEDIR}/build${TOOLS_DIR}/lib/libpakfire_preload.so" ] || return - local env="LD_PRELOAD=/tools/lib/libpakfire_preload.so" + local env="LD_PRELOAD=${TOOLS_DIR}/lib/libpakfire_preload.so" # Fake kernel version, because some of the packages do not compile # with kernel 3.0 and later. @@ -494,7 +529,7 @@ enterchroot() { # Install QEMU helper, if needed qemu_install_helper - local PATH="/tools/ccache/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin" + local PATH="${TOOLS_DIR}/ccache/bin:/bin:/usr/bin:/sbin:/usr/sbin:${TOOLS_DIR}/bin" PATH="${PATH}" chroot ${LFS} env -i \ HOME="/root" \ @@ -508,6 +543,7 @@ enterchroot() { VERSION="${VERSION}" \ CORE="${CORE}" \ SLOGAN="${SLOGAN}" \ + TOOLS_DIR="${TOOLS_DIR}" \ CONFIG_ROOT="${CONFIG_ROOT}" \ CFLAGS="${CFLAGS} ${HARDENING_CFLAGS}" \ CXXFLAGS="${CXXFLAGS} ${HARDENING_CFLAGS}" \ @@ -606,22 +642,23 @@ lfsmake1() { local PKG_TIME_START=`date +%s` cd $BASEDIR/lfs && env -i \ - PATH="/tools/ccache/bin:/tools/bin:$PATH" \ + PATH="${TOOLS_DIR}/ccache/bin:${TOOLS_DIR}/bin:$PATH" \ + CCACHE_DIR="${CCACHE_DIR}" \ + CCACHE_COMPRESS="${CCACHE_COMPRESS}" \ + CCACHE_COMPILERCHECK="${CCACHE_COMPILERCHECK}" \ + CFLAGS="${CFLAGS}" \ + CXXFLAGS="${CXXFLAGS}" \ + MAKETUNING="${MAKETUNING}" \ make -f $* \ TOOLCHAIN=1 \ + TOOLS_DIR="${TOOLS_DIR}" \ CROSSTARGET="${CROSSTARGET}" \ BUILDTARGET="${BUILDTARGET}" \ BUILD_ARCH="${BUILD_ARCH}" \ BUILD_PLATFORM="${BUILD_PLATFORM}" \ - CFLAGS="${CFLAGS}" \ - CXXFLAGS="${CXXFLAGS}" \ LFS_BASEDIR="${BASEDIR}" \ ROOT="${LFS}" \ KVER="${KVER}" \ - MAKETUNING="${MAKETUNING}" \ - CCACHE_DIR="${CCACHE_DIR}" \ - CCACHE_COMPRESS="${CCACHE_COMPRESS}" \ - CCACHE_COMPILERCHECK="${CCACHE_COMPILERCHECK}" \ install >> $LOGFILE 2>&1 local COMPILE_SUCCESS=$? @@ -645,7 +682,10 @@ lfsmake2() { local PS1='\u:\w$ ' enterchroot \ - bash -x -c "cd /usr/src/lfs && make -f $* LFS_BASEDIR=/usr/src install" \ + bash -x -c "cd /usr/src/lfs && \ + MAKETUNING=${MAKETUNING} \ + make -f $* \ + LFS_BASEDIR=/usr/src install" \ >> ${LOGFILE} 2>&1 local COMPILE_SUCCESS=$?