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}"
# 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() {
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"
;;
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=$?
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=$?
return 0
}
-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
-
- 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
-}
-
ipfiredist() {
lfsmakecommoncheck $*
[ $? == 1 ] && return 0
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
-
- 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
-}
-
update_langs() {
echo -ne "Checking the translations for missing or obsolete strings..."
chmod 755 $BASEDIR/tools/{check_strings.pl,sort_strings.pl,check_langs.sh}