X-Git-Url: http://git.ipfire.org/?p=ipfire-2.x.git;a=blobdiff_plain;f=tools%2Fmake-functions;h=9cf2fcfb472f0f10da31c293e06fa1e99539924a;hp=08ac7a1a66aea32da0cf59aab059ba64727dcd0b;hb=a98ab1d7fdba5d18d42faab43bf03662ca4d4261;hpb=9d928e829cfe6eaa748dc58873ac22eb29a66ff6 diff --git a/tools/make-functions b/tools/make-functions index 08ac7a1a66..9cf2fcfb47 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}" @@ -124,8 +142,34 @@ configure_build() { # 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}" + CFLAGS="-O2 -Wall -fexceptions -fPIC ${CFLAGS_ARCH}" + + # Run compiler and assembler simultaneously on systems that have enough memory + if [ ${HOST_MEM} -ge 1024 ]; then + CFLAGS="${CFLAGS} -pipe" + fi + 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() { @@ -223,9 +267,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" ;; @@ -501,9 +545,12 @@ enterchroot() { TERM="${TERM}" \ PS1="${PS1}" \ PATH="${PATH}" \ + SYSTEM_RELEASE="${SYSTEM_RELEASE}" \ + PAKFIRE_CORE="${PAKFIRE_CORE}" \ NAME="${NAME}" \ SNAME="${SNAME}" \ VERSION="${VERSION}" \ + CORE="${CORE}" \ SLOGAN="${SLOGAN}" \ CONFIG_ROOT="${CONFIG_ROOT}" \ CFLAGS="${CFLAGS} ${HARDENING_CFLAGS}" \ @@ -511,13 +558,14 @@ enterchroot() { BUILDTARGET="${BUILDTARGET}" \ CROSSTARGET="${CROSSTARGET}" \ BUILD_ARCH="${BUILD_ARCH}" \ + BUILD_PLATFORM="${BUILD_PLATFORM}" \ CCACHE_DIR=/usr/src/ccache \ CCACHE_COMPRESS="${CCACHE_COMPRESS}" \ CCACHE_COMPILERCHECK="${CCACHE_COMPILERCHECK}" \ KVER="${KVER}" \ $(fake_environ) \ $(qemu_environ) \ - $@ + "$@" } entershell() { @@ -603,21 +651,21 @@ lfsmake1() { cd $BASEDIR/lfs && env -i \ PATH="/tools/ccache/bin:/tools/bin:$PATH" \ + CCACHE_DIR="${CCACHE_DIR}" \ + CCACHE_COMPRESS="${CCACHE_COMPRESS}" \ + CCACHE_COMPILERCHECK="${CCACHE_COMPILERCHECK}" \ + CFLAGS="${CFLAGS}" \ + CXXFLAGS="${CXXFLAGS}" \ + MAKETUNING="${MAKETUNING}" \ make -f $* \ TOOLCHAIN=1 \ 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=$? @@ -637,72 +685,15 @@ lfsmake2() { lfsmakecommoncheck $* [ $? == 1 ] && return 0 - # Install QEMU helper, if needed - qemu_install_helper - local PKG_TIME_START=`date +%s` - chroot $LFS /tools/bin/env -i HOME=/root \ - TERM=$TERM PS1='\u:\w\$ ' \ - PATH=/tools/ccache/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \ - VERSION=$VERSION PAKFIRE_CORE="${PAKFIRE_CORE}" \ - SYSTEM_RELEASE="${SYSTEM_RELEASE}" \ - CONFIG_ROOT=$CONFIG_ROOT \ - NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \ - CFLAGS="${CFLAGS} ${HARDENING_CFLAGS}" \ - CXXFLAGS="${CXXFLAGS} ${HARDENING_CFLAGS}" \ - CCACHE_DIR=/usr/src/ccache \ - CCACHE_COMPRESS="${CCACHE_COMPRESS}" \ - CCACHE_COMPILERCHECK="${CCACHE_COMPILERCHECK}" \ - KVER=$KVER MAKETUNING=$MAKETUNING \ - BUILDTARGET="$BUILDTARGET" \ - CROSSTARGET="${CROSSTARGET}" \ - BUILD_ARCH="${BUILD_ARCH}" \ - $(qemu_environ) \ - $(fake_environ) \ - /tools/bin/bash -x -c "cd /usr/src/lfs && \ - make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1 - local COMPILE_SUCCESS=$? - local PKG_TIME_END=`date +%s` - - if [ $COMPILE_SUCCESS -ne 0 ]; then - beautify result FAIL $[ $PKG_TIME_END - $PKG_TIME_START ] - exiterror "Building $*"; - else - beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ] - fi - - return 0 -} + local PS1='\u:\w$ ' -ipfiremake() { - lfsmakecommoncheck $* - [ $? == 1 ] && return 0 - - # Install QEMU helper, if needed - qemu_install_helper - - local PKG_TIME_START=`date +%s` - chroot $LFS /tools/bin/env -i HOME=/root \ - TERM=$TERM PS1='\u:\w\$ ' \ - PATH=/tools/ccache/bin:/bin:/usr/bin:/sbin:/usr/sbin \ - VERSION=$VERSION \ - CORE=$CORE \ - CONFIG_ROOT=$CONFIG_ROOT \ - NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \ - SYSTEM_RELEASE="$SYSTEM_RELEASE" \ - CFLAGS="${CFLAGS} ${HARDENING_CFLAGS}" \ - CXXFLAGS="${CXXFLAGS} ${HARDENING_CFLAGS}" \ - CCACHE_DIR=/usr/src/ccache \ - CCACHE_COMPRESS="${CCACHE_COMPRESS}" \ - CCACHE_COMPILERCHECK="${CCACHE_COMPILERCHECK}" \ - KVER=$KVER MAKETUNING=$MAKETUNING \ - BUILDTARGET="$BUILDTARGET" \ - CROSSTARGET="${CROSSTARGET}" \ - BUILD_ARCH="${BUILD_ARCH}" \ - $(qemu_environ) \ - $(fake_environ) \ - /bin/bash -x -c "cd /usr/src/lfs && \ - make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1 + enterchroot \ + bash -x -c "cd /usr/src/lfs && \ + MAKETUNING=${MAKETUNING} \ + make -f $* \ + LFS_BASEDIR=/usr/src install" \ + >> ${LOGFILE} 2>&1 local COMPILE_SUCCESS=$? local PKG_TIME_END=`date +%s` @@ -713,81 +704,27 @@ ipfiremake() { else beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ] fi + return 0 } ipfiredist() { lfsmakecommoncheck $* [ $? == 1 ] && return 0 - - # Install QEMU helper, if needed - qemu_install_helper local PKG_TIME_START=`date +%s` - chroot $LFS /tools/bin/env -i HOME=/root \ - TERM=$TERM PS1='\u:\w\$ ' \ - PATH=/tools/ccache/bin:/bin:/usr/bin:/sbin:/usr/sbin \ - VERSION=$VERSION \ - CONFIG_ROOT=$CONFIG_ROOT \ - NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \ - CFLAGS="${CFLAGS} ${HARDENING_CFLAGS}" \ - CXXFLAGS="${CXXFLAGS} ${HARDENING_CFLAGS}" \ - CCACHE_DIR=/usr/src/ccache \ - CCACHE_COMPRESS="${CCACHE_COMPRESS}" \ - CCACHE_COMPILERCHECK="${CCACHE_COMPILERCHECK}" \ - KVER=$KVER \ - BUILDTARGET="$BUILDTARGET" \ - CROSSTARGET="${CROSSTARGET}" \ - BUILD_ARCH="${BUILD_ARCH}" \ - $(qemu_environ) \ - $(fake_environ) \ - /bin/bash -x -c "cd /usr/src/lfs && \ - make -f $1 LFS_BASEDIR=/usr/src dist" >>$LOGFILE 2>&1 + local PS1='\u:\w$ ' - local COMPILE_SUCCESS=$? - local PKG_TIME_END=`date +%s` - - if [ $COMPILE_SUCCESS -ne 0 ]; then - beautify result FAIL $[ $PKG_TIME_END - $PKG_TIME_START ] - exiterror "Packaging $*"; - else - beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ] - fi - return 0 -} - -installmake() { - lfsmakecommoncheck $* - [ $? == 1 ] && return 0 - - # Install QEMU helper, if needed - qemu_install_helper - - local PKG_TIME_START=`date +%s` - chroot $LFS /tools/bin/env -i HOME=/root \ - TERM=$TERM PS1='\u:\w\$ ' \ - PATH=/tools/ccache/bin:/bin:/usr/bin:/sbin:/usr/sbin \ - VERSION=$VERSION \ - SYSTEM_RELEASE="${SYSTEM_RELEASE}" \ - CONFIG_ROOT=$CONFIG_ROOT \ - NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \ - CFLAGS="${CFLAGS} ${HARDENING_CFLAGS}" \ - CXXFLAGS="${CXXFLAGS} ${HARDENING_CFLAGS}" \ - CCACHE_DIR=/usr/src/ccache CCACHE_COMPRESS=1 CCACHE_HASHDIR=1 \ - KVER=$KVER \ - BUILDTARGET="$BUILDTARGET" \ - CROSSTARGET="${CROSSTARGET}" \ - BUILD_ARCH="${BUILD_ARCH}" \ - LD_LIBRARY_PATH=/tools/lib \ - /tools/bin/bash -x -c "cd /usr/src/lfs && \ - /tools/bin/make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1 + enterchroot \ + bash -x -c "cd /usr/src/lfs && make -f $* LFS_BASEDIR=/usr/src dist" \ + >> ${LOGFILE} 2>&1 local COMPILE_SUCCESS=$? local PKG_TIME_END=`date +%s` if [ $COMPILE_SUCCESS -ne 0 ]; then beautify result FAIL $[ $PKG_TIME_END - $PKG_TIME_START ] - exiterror "Building $*"; + exiterror "Packaging $*"; else beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ] fi