]> git.ipfire.org Git - ipfire-3.x.git/blame - tools/make-include
Added new package: dosfstools.
[ipfire-3.x.git] / tools / make-include
CommitLineData
ca8da28e
MT
1#!/bin/bash
2###############################################################################
3# #
4# IPFire.org - A linux based firewall #
acef7362 5# Copyright (C) 2008 Michael Tremer & Christian Schmidt #
ca8da28e
MT
6# #
7# This program is free software: you can redistribute it and/or modify #
8# it under the terms of the GNU General Public License as published by #
9# the Free Software Foundation, either version 3 of the License, or #
10# (at your option) any later version. #
11# #
12# This program is distributed in the hope that it will be useful, #
13# but WITHOUT ANY WARRANTY; without even the implied warranty of #
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15# GNU General Public License for more details. #
16# #
17# You should have received a copy of the GNU General Public License #
18# along with this program. If not, see <http://www.gnu.org/licenses/>. #
19# #
20###############################################################################
21###############################################################################
22#
23# System variables
24#
25###############################################################################
26
1ded22cc
MT
27PWD=$(pwd)
28BASENAME=$(basename $0)
ca8da28e
MT
29
30# Debian specific settings
31if [ ! -e /etc/debian_version ]; then
1ded22cc 32 FULLPATH=$(which $0)
ca8da28e
MT
33else
34 if [ -x /usr/bin/realpath ]; then
1ded22cc 35 FULLPATH=$(/usr/bin/realpath $0)
ca8da28e
MT
36 else
37 echo "ERROR: Need to do apt-get install realpath"
38 exit 1
39 fi
40fi
41
1ded22cc 42BASEDIR=$(echo $FULLPATH | sed "s/\/$BASENAME//g")
ca8da28e 43export BASEDIR
ca8da28e 44
1ded22cc
MT
45. $BASEDIR/tools/make-constants # Load this very early
46. $BASEDIR/tools/make-beautify
98be0467 47
11f0ec61 48mkdir $BASEDIR/log_${TARGET}/ 2>/dev/null
be472d5a 49
ca8da28e
MT
50################################################################################
51# #
52# Necessary shell functions #
53# #
54################################################################################
55
0cba4dde 56. $BASEDIR/tools/make-buildspy
38e7c3ac
MT
57. $BASEDIR/tools/make-check
58. $BASEDIR/tools/make-batch
59. $BASEDIR/tools/make-compilers
60. $BASEDIR/tools/make-git
aef37aba 61. $BASEDIR/tools/make-packages
b07899d1 62. $BASEDIR/tools/make-rootfiles
95642cd9 63. $BASEDIR/tools/make-vm
e694da34 64. $BASEDIR/tools/make-cron
0cba4dde 65
ca8da28e 66evaluate() {
da1befdd
MT
67 RETVAL=$?
68 if [ "$RETVAL" -eq "0" ]; then
ca8da28e
MT
69 beautify message DONE
70 else
ca8da28e 71 beautify message FAIL
ca8da28e 72 fi
da1befdd 73 (exit $RETVAL)
ca8da28e
MT
74}
75
ca8da28e 76stdumount() {
4ce0b818 77 sleep 0.3 # Wait one second for finish of processes
11f0ec61 78 for fs in $(mount | grep $BASEDIR/build_${TARGET} | awk '{print $3}'); do
1ded22cc 79 umount $fs 2>/dev/null;
ca8da28e
MT
80 done
81} # End of stdumount()
82
83exiterror() {
84 stdumount
98be0467 85 dialogerror $*
4a792716 86 build_spy state error
5f85db01
MT
87 if [ -n "$LOGFILE" ]; then
88 echo "$(date -u '+%b %e %T') ERROR: $*" >> $LOGFILE
b1d2e219 89 build_spy log $(tail -n16 $LOGFILE | $BASEDIR/tools/base64)
5f85db01 90 fi
12b17e35 91 build_spy exit
98be0467
MT
92 touch $FAILED
93 rm -f $RUNNING 2>/dev/null
ca8da28e
MT
94 exit 1
95} # End of exiterror()
96
469d71b4
MT
97logger() {
98 local logfile=$LOGFILE
99 case "$1" in
100 --distcc)
101 logfile=$BASEDIR/log_$TARGET/_build.00-distcc.log
102 shift
103 ;;
104 esac
105 echo "$(date -u '+%b %e %T') $*" >> $logfile
106}
107
ca8da28e
MT
108################################################################################
109# This is the function that sets the environment of a chroot and enters it #
110################################################################################
111entershell() {
6e0756c3 112 PATH=${TOOLS_DIR}/usr/bin:/bin:/usr/bin:/sbin:/usr/sbin:${TOOLS_DIR}/bin:/usr/${MACHINE_REAL}-linux/bin
ca8da28e
MT
113
114 if [ ! -e $LFS/usr/src/lfs/ ]; then
115 exiterror "No such file or directory: $LFS/usr/src/lfs/"
116 fi
145db3c5
MT
117
118 COMMAND=${@-bash} # Run command, given as parameters.
ca8da28e
MT
119
120 echo -ne "Entering ${BOLD}$MACHINE${NORMAL} LFS chroot, type exit to return to host environment\n"
121
122 chroot $LFS $TOOLS_DIR/bin/env -i \
123 HOME=/root \
124 TERM=$TERM \
acef7362 125 PS1="${BOLD}[chroot-${TARGET}(${MACHINE})]${NORMAL} \u:\w\$ " \
ca8da28e
MT
126 PATH=$PATH \
127 CONFIG_ROOT=${CONFIG_ROOT} \
128 VERSION=${VERSION} \
129 NAME=${NAME} \
130 SNAME=${SNAME} \
131 SLOGAN="$SLOGAN" \
132 CCACHE_DIR=/usr/src/ccache \
133 CCACHE_PREFIX=${CCACHE_PREFIX} \
134 CCACHE_HASHDIR=${CCACHE_HASHDIR} \
135 DISTCC_DIR=/usr/src/distcc \
3d84c75d 136 PARALLELISMFLAGS=$PARALLELISMFLAGS \
ca8da28e
MT
137 LINKER=$LINKER \
138 TOOLS_DIR=$TOOLS_DIR \
139 INSTALLER_DIR=$INSTALLER_DIR \
140 MACHINE="$MACHINE" \
141 MACHINE_REAL="$MACHINE_REAL" \
acef7362
MT
142 CFLAGS="$CFLAGS" \
143 CXXFLAGS="$CXXFLAGS" \
144 IFS_HOST="$IFS_HOST" \
145 IFS_TARGET="$IFS_TARGET" \
ca8da28e
MT
146 KVER=$KVER \
147 STAGE=$STAGE \
148 STAGE_ORDER=$STAGE_ORDER \
1ded22cc 149 LOGFILE=$(echo $LOGFILE | sed "s,$BASEDIR,/usr/src,g") \
145db3c5 150 $COMMAND
ca8da28e
MT
151
152 if [ $? -ne 0 ]; then
153 exiterror "chroot error"
154 else
155 stdumount
156 fi
157} # End of entershell()
158
159
160
161################################################################################
162# Common checking before entering the chroot and compilling #
163# Return:0 caller can continue #
a57b7dd3
MT
164# :1 skip (nothing to do) #
165# or fail if no script file found #
ca8da28e
MT
166################################################################################
167lfsmakecommoncheck()
168{
47815f74
MT
169 logger "Building $*"
170 build_spy package $1
171
ca8da28e
MT
172 # Script present?
173 if [ ! -f $BASEDIR/lfs/$1 ]; then
a57b7dd3 174 exiterror "No such file or directory: $BASEDIR/lfs/$1"
ca8da28e
MT
175 fi
176
1ded22cc 177 local PKG_VER=$(get_pkg_ver $BASEDIR/lfs/$1)
ca8da28e
MT
178 beautify make_pkg "$PKG_VER $*"
179
180 # Script slipped?
181 local i
1ded22cc 182 for i in $SKIP_PACKAGE_LIST; do
ca8da28e
MT
183 if [ "$i" == "$1" ]; then
184 beautify result SKIP
1ded22cc 185 return 1
ca8da28e
MT
186 fi
187 done
188
497652cb 189 # On debug build, we don't strip
e694da34
MT
190 if [ "$STAGE" != "toolchain" -a \
191 "$1" == "strip" -a "$BUILD_DEBUG" == "1" ]; then
497652cb 192 beautify result SKIP
1ded22cc 193 return 1
497652cb
MT
194 fi
195
4b9c6965 196 # Don't create addons?
1ded22cc 197 local EXTRA=$(grep ^EXTRA $BASEDIR/lfs/$1 | awk '{print $3}')
05b1236d 198 if [ "$EXTRA" == "yes" ] && [ "$BUILD_EXTRAS" == "0" ]; then
4b9c6965
MT
199 beautify result SKIP
200 return 1
201 fi
202
203 # Don't create debugging tools?
1ded22cc 204 local DEBUG=$(grep ^DEBUG $BASEDIR/lfs/$1 | awk '{print $3}')
05b1236d 205 if [ "$DEBUG" == "yes" ] && [ "$BUILD_DEBUG" == "0" ]; then
4b9c6965
MT
206 beautify result SKIP
207 return 1
208 fi
209
2a5ec6a1
MT
210 # Searching for dependencies
211 local found message
212 for dep in $(pkg_deps $1); do
213 found=0
214 for package in $PACKAGES_DONE; do
215 if [ "$dep" = "$package" ]; then
216 found=1
217 break
218 fi
219 done
220 [ "$found" = "0" ] && message="$message $dep"
221 done
222 if [ "$message" != "" ]; then
223 message="Deps are missing: $message"
224 if [ "$EXTRA" = "yes" ]; then
225 echo -ne "${WARN}${message}${NORMAL}"
226 beautify message SKIP
227 return 1
228 else
229 exiterror "$message"
230 fi
231 fi
232
ca8da28e
MT
233 cd $BASEDIR/lfs && make -s -f $* MACHINE=$MACHINE LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download >> $LOGFILE 2>&1
234 if [ $? -ne 0 ]; then
235 exiterror "Download error in $1"
236 fi
237
47815f74 238 distcc_reload &
98be0467 239
ca8da28e
MT
240 return 0 # pass all!
241} # End of lfsmakecommoncheck()
242
243################################################################################
244# This is the function that builds every package in stage "toolchain" #
245################################################################################
246toolchain_make() {
247 lfsmakecommoncheck $*
248 [ $? == 1 ] && return 0
249
1ded22cc 250 local PKG_VER=$(get_pkg_ver $BASEDIR/lfs/$1)
ca8da28e
MT
251
252 local EXTRA_MAKE=$EXTRA_MAKE
253
1ded22cc 254 local PKG_TIME_START=$(date +%s)
ca8da28e
MT
255 cd $BASEDIR/lfs && $EXTRA_MAKE make -f $* \
256 CONFIG_ROOT=$CONFIG_ROOT \
257 LINKER=$LINKER \
258 TOOLS_DIR=$TOOLS_DIR \
259 MACHINE="$MACHINE" \
acef7362
MT
260 MACHINE_REAL="$MACHINE_REAL" \
261 IFS_HOST="$IFS_HOST" \
262 IFS_TARGET="$IFS_TARGET" \
25ff7c90 263 TARGET="$TARGET" \
ca8da28e
MT
264 LFS_BASEDIR=$BASEDIR \
265 LFS=$LFS \
6d18f164
MT
266 INSTALLER_DIR=$INSTALLER_DIR \
267 PARALLELISMFLAGS=$PARALLELISMFLAGS \
ca8da28e
MT
268 KVER=$KVER \
269 STAGE=$STAGE \
270 STAGE_ORDER=$STAGE_ORDER \
271 install >> $LOGFILE 2>&1
272
273 local COMPILE_SUCCESS=$?
1ded22cc 274 local PKG_TIME_END=$(date +%s)
ca8da28e
MT
275
276 if [ $COMPILE_SUCCESS -ne 0 ]; then
277 beautify result FAIL $[ $PKG_TIME_END - $PKG_TIME_START ] $1 $PKG_VER $STAGE_ORDER $STAGE
1ded22cc 278 exiterror "Building $*"
ca8da28e
MT
279 else
280 beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ] $1 $PKG_VER $STAGE_ORDER $STAGE
7168fbb9 281 PACKAGES_DONE="$PACKAGES_DONE $1"
ca8da28e
MT
282 fi
283
284 return 0
285} # End of toolchain_make()
286
287################################################################################
10f9531b 288# This is the function that builds every package in stage "base" and "ipfire" #
ca8da28e
MT
289################################################################################
290ipfire_make() {
291 lfsmakecommoncheck $*
292 [ $? == 1 ] && return 0
293
1ded22cc 294 local PKG_VER=$(get_pkg_ver $BASEDIR/lfs/$1)
ca8da28e
MT
295
296 local EXTRA_MAKE=$EXTRA_MAKE
297 # When cross-compiling, make sure the kernel is compiled for the target
298 [ "$MACHINE" != "$MACHINE_REAL" -a "$1" == "linux" ] && unset EXTRA_MAKE
299
300 # Also, make sure external kernel modules are compiled 64bit
301 if grep -qEi 'KERNEL_MOD = yes' $1 ; then
302 unset EXTRA_MAKE
303 fi
304
1ded22cc 305 local PKG_TIME_START=$(date +%s)
ca8da28e
MT
306 chroot $LFS $TOOLS_DIR/bin/env -i \
307 HOME=/root \
308 TERM=$TERM \
309 PS1='\u:\w\$ ' \
310 PATH=$PATH \
311 CONFIG_ROOT=${CONFIG_ROOT} \
312 VERSION=${VERSION} \
313 NAME=${NAME} \
314 SNAME=${SNAME} \
315 SLOGAN="$SLOGAN" \
316 CCACHE_DIR=/usr/src/ccache \
317 CCACHE_PREFIX=${CCACHE_PREFIX} \
318 CCACHE_HASHDIR=${CCACHE_HASHDIR} \
319 DISTCC_DIR=/usr/src/distcc \
3d84c75d 320 PARALLELISMFLAGS=$PARALLELISMFLAGS \
ca8da28e
MT
321 LINKER=$LINKER \
322 TOOLS_DIR=$TOOLS_DIR \
323 INSTALLER_DIR=$INSTALLER_DIR \
31c59de6
MT
324 CDROM_DIR=$CDROM_DIR \
325 IMAGES_DIR=$IMAGES_DIR \
ca8da28e
MT
326 MACHINE="$MACHINE" \
327 MACHINE_REAL="$MACHINE_REAL" \
08be8cf6
MT
328 CFLAGS="$CFLAGS" \
329 CXXFLAGS="$CXXFLAGS" \
acef7362
MT
330 IFS_HOST="$IFS_HOST" \
331 IFS_TARGET="$IFS_TARGET" \
25ff7c90 332 TARGET="$TARGET" \
51d841ec
MT
333 BUILD_DEBUG=$BUILD_DEBUG \
334 BUILD_EXTRAS=$BUILD_EXTRAS \
ca8da28e
MT
335 KVER=$KVER \
336 STAGE=$STAGE \
337 STAGE_ORDER=$STAGE_ORDER \
283eab18 338 EMB=$EMB \
0ad657e2 339 IMAGENAME=$IMAGENAME \
1ded22cc 340 LOGFILE=$(echo $LOGFILE | sed "s,$BASEDIR,/usr/src,g") \
ca8da28e
MT
341 bash -x -c "cd /usr/src/lfs && \
342 $EXTRA_MAKE make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
343
344 local COMPILE_SUCCESS=$?
1ded22cc 345 local PKG_TIME_END=$(date +%s)
ca8da28e
MT
346
347 if [ $COMPILE_SUCCESS -ne 0 ]; then
348 beautify result FAIL $[ $PKG_TIME_END - $PKG_TIME_START ] $1 $PKG_VER $STAGE_ORDER $STAGE
1ded22cc 349 exiterror "Building $*"
ca8da28e
MT
350 else
351 beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ] $1 $PKG_VER $STAGE_ORDER $STAGE
2a5ec6a1 352 PACKAGES_DONE="$PACKAGES_DONE $1"
ca8da28e
MT
353 fi
354
355 return 0
356} # End of ipfire_make()
357
ca8da28e
MT
358################################################################################
359# This prepares the build environment #
360################################################################################
361prepareenv() {
11f0ec61 362 LOGFILE=$BASEDIR/log_${TARGET}/_build.00-preparation.log
ca8da28e 363 export LOGFILE
11f0ec61
MT
364 mkdir -p $BASEDIR/log_${TARGET}/01_toolchain 2>/dev/null
365 mkdir -p $BASEDIR/log_${TARGET}/02_base 2>/dev/null
366 mkdir -p $BASEDIR/log_${TARGET}/03_${SNAME} 2>/dev/null
367 mkdir -p $BASEDIR/log_${TARGET}/04_misc 2>/dev/null
368 mkdir -p $BASEDIR/log_${TARGET}/05_installer 2>/dev/null
369 mkdir -p $BASEDIR/log_${TARGET}/06_packages 2>/dev/null
ca8da28e
MT
370
371 #############################################################################
372 # Are we running the right shell? #
373 #############################################################################
374
375 if [ ! "$BASH" ]; then
376 exiterror "BASH environment variable is not set. You're probably running the wrong shell."
377 fi
378
379 if [ -z "${BASH_VERSION}" ]; then
380 exiterror "Not running BASH shell."
381 fi
382
383 #############################################################################
384 # Trap on emergency exit #
385 #############################################################################
386 trap "exiterror 'Build process interrupted'" SIGINT SIGTERM SIGKILL SIGSTOP SIGQUIT
387
388
389 #############################################################################
390 # Resetting our nice level #
391 #############################################################################
e3d88b86 392 echo -ne "Resetting our nice level to $NICE"
ca8da28e 393 renice $NICE $$ > /dev/null
1ded22cc 394 if [ $(nice) != "$NICE" ]; then
ca8da28e
MT
395 beautify message FAIL
396 exiterror "Failed to set correct nice level"
397 else
398 beautify message DONE
399 fi
400
401 # Set SCHED_BATCH
7de88c9f 402 if [ -x /usr/bin/schedtool ]; then
7de88c9f 403 /usr/bin/schedtool -B $$
c90c0df9
MT
404 if [ $? -ne 0 ]; then
405 echo -ne "Setting kernel schedular to SCHED_BATCH"
7de88c9f
MT
406 beautify message FAIL
407 fi
408 fi
ca8da28e
MT
409
410 ##############################################################################
411 # Checking if running as root user #
412 ##############################################################################
1ded22cc 413 if [ $(id -u) != 0 ]; then
c90c0df9 414 echo -ne "Checking if we're running as root user"
ca8da28e
MT
415 beautify message FAIL
416 exiterror "Not building as root"
ca8da28e
MT
417 fi
418
419
420 ##############################################################################
421 # Checking for necessary temporary space #
422 ##############################################################################
1ded22cc
MT
423 BASE_DEV=$(df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }')
424 BASE_ASPACE=$(df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }')
ca8da28e 425 if (( 2048000 > $BASE_ASPACE )); then
1ded22cc 426 BASE_USPACE=$(du -skx $BASEDIR | awk '{print $1}')
ca8da28e 427 if (( 2048000 - $BASE_USPACE > $BASE_ASPACE )); then
c90c0df9 428 echo -ne "Checking for necessary space on disk $BASE_DEV"
ca8da28e
MT
429 beautify message FAIL
430 exiterror "Not enough temporary space available, need at least 2GB on $BASE_DEV"
431 fi
ca8da28e
MT
432 fi
433
485f0a3b
MT
434 ##############################################################################
435 # Embedded build #
436 ##############################################################################
437
438 echo -ne "Embedded build"
283eab18 439 if [ $EMB -eq 1 ]; then
485f0a3b
MT
440 beautify message ON
441 check_loop || exiterror "Can't build flash images on this machine."
442 else
443 beautify message OFF
444 fi
445
283eab18 446 export EMB
485f0a3b 447
c90c0df9
MT
448 ##############################################################################
449 # Checking CPU features #
450 ##############################################################################
451
aac56982
MT
452 check_supported_target $TARGET || \
453 exiterror "Your host doesn't have all needed cpu features for building \"$TARGET\""
c90c0df9 454
ca8da28e
MT
455 ##############################################################################
456 # Building Linux From Scratch system configuration #
457 ##############################################################################
458
459 # Set umask
460 umask 022
461
462 # Set LFS Directory
11f0ec61 463 LFS=$BASEDIR/build_${TARGET}/${SNAME}
ca8da28e
MT
464
465 # Check /tools symlink
466 if [ -h $TOOLS_DIR ]; then
467 rm -f $TOOLS_DIR
468 fi
7de88c9f 469 if [ ! -a $TOOLS_DIR ]; then
11f0ec61 470 ln -s $BASEDIR/build_${TARGET}/$TOOLS_DIR /
ca8da28e
MT
471 fi
472 if [ ! -h $TOOLS_DIR ]; then
473 exiterror "Could not create $TOOLS_DIR symbolic link."
474 fi
475
476 # Setup environment
477 set +h
478 LC_ALL=POSIX
479 export LFS LC_ALL
480 unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
481
482 # Make some extra directories
11f0ec61 483 mkdir -p $BASEDIR/build_${TARGET}/{$TOOLS_DIR,cdrom,$INSTALLER_DIR,$IMAGES_DIR} 2>/dev/null
ca8da28e 484 mkdir -p $BASEDIR/{cache,ccache,distcc} 2>/dev/null
1146889e
MT
485 mkdir -p $BASEDIR/cache/{toolchains,patches,tarballs} 2>/dev/null
486 mkdir -p $LFS/{$TOOLS_DIR,usr/src} 2>/dev/null
3de07634
MT
487 mkdir -p $LFS/{dev,etc,proc,sys} 2>/dev/null
488 mkdir -p $LFS/dev/pts 2>/dev/null
11f0ec61 489 mkdir -p $LFS/usr/src/{cache,config,doc,lfs,log_${TARGET},src,ccache,distcc} 2>/dev/null
3de07634 490 mkdir -p $LFS/{$INSTALLER_DIR,cdrom,images} 2>/dev/null
ca8da28e
MT
491
492 mknod -m 600 $BASEDIR/build/dev/console c 5 1 2>/dev/null
493 mknod -m 666 $BASEDIR/build/dev/null c 1 3 2>/dev/null
494
495 # Make all sources and proc available under lfs build
10f9531b
MT
496 mount --bind /dev $LFS/dev
497 mount --bind /proc $LFS/proc
3de07634 498 mount --bind /sys $LFS/sys
10f9531b
MT
499 mount --bind $BASEDIR/cache $LFS/usr/src/cache
500 mount --bind $BASEDIR/ccache $LFS/usr/src/ccache
501 mount --bind $BASEDIR/distcc $LFS/usr/src/distcc
502 mount --bind $BASEDIR/config $LFS/usr/src/config
503 mount --bind $BASEDIR/doc $LFS/usr/src/doc
504 mount --bind $BASEDIR/lfs $LFS/usr/src/lfs
11f0ec61 505 mount --bind $BASEDIR/log_${TARGET} $LFS/usr/src/log_${TARGET}
10f9531b 506 mount --bind $BASEDIR/src $LFS/usr/src/src
11f0ec61
MT
507 mount --bind $BASEDIR/build_${TARGET}/$TOOLS_DIR $LFS/$TOOLS_DIR
508 mount --bind $BASEDIR/build_${TARGET}/$CDROM_DIR $LFS/$CDROM_DIR
509 mount --bind $BASEDIR/build_${TARGET}/$INSTALLER_DIR $LFS/$INSTALLER_DIR
510 mount --bind $BASEDIR/build_${TARGET}/$IMAGES_DIR $LFS/$IMAGES_DIR
ca8da28e 511
ca8da28e
MT
512 # Run LFS static binary creation scripts one by one
513 export CCACHE_DIR=$BASEDIR/ccache
514 export CCACHE_HASHDIR=1
469d71b4
MT
515 export CCACHE_PREFIX="distcc"
516 export DISTCC_DIR=$BASEDIR/distcc
517
ca8da28e
MT
518 # Remove pre-install list of installed files in case user erase some files before rebuild
519 rm -f $LFS/usr/src/lsalr 2>/dev/null
520}
521
cfccf561 522build() {
cfccf561
MT
523 #a prebuilt toolchain package is only used if found in cache
524 if [ ! -d $BASEDIR/cache ]; then
c90c0df9 525 exiterror "Use make.sh source get first!"
ca8da28e 526 fi
cfccf561 527 cd $BASEDIR/cache/toolchains
1ded22cc 528 PACKAGE=$(ls -v -r $TOOLCHAINNAME.tar.bz2 2>/dev/null | head -n 1)
cfccf561 529 #only restore on a clean disk
ca8da28e 530
1ded22cc 531 local BLD_TIME_START=$(date +%s)
4a792716 532 touch $RUNNING; rm -f $FAILED $BUILD_SPY_FILENAME 2>/dev/null
fb86d09d 533
acef7362 534 echo -ne "Building for ${BOLD}${TARGET} (${MACHINE}) on ${MACHINE_REAL}${NORMAL}\n"
fb86d09d 535
4a792716
MT
536 build_spy_send_profile
537 build_spy state compiling
12b17e35 538 build_spy start
47eb4a27
MT
539 distcc_get_hosts
540
11f0ec61 541 if [ -f $BASEDIR/log_${TARGET}/02_base/stage2-LFS ]; then
cfccf561
MT
542 prepareenv
543 echo "Using installed toolchain" >> $LOGFILE
544 beautify message DONE "Stage toolchain already built or extracted"
545 else
546 if [ -z "$PACKAGE" ]; then
acef7362 547 echo "Full toolchain compilation"
cfccf561 548 prepareenv
38e7c3ac 549
cfccf561
MT
550 check_toolchain
551
552 beautify build_stage "Building toolchain"
553 toolchain_build
554 else
acef7362 555 echo "Restore from $PACKAGE"
d4155cdb
MT
556 cd $BASEDIR && tar jxf $BASEDIR/cache/toolchains/$PACKAGE
557 prepareenv
cfccf561
MT
558 fi
559 fi
689314ee
MT
560
561 # Run distcc daemon
562 distccd_start
563
cfccf561
MT
564 beautify build_stage "Building base"
565 base_build
ca8da28e 566
cfccf561
MT
567 beautify build_stage "Building $SNAME"
568 ipfire_build
ca8da28e 569
cfccf561
MT
570 beautify build_stage "Building miscellaneous"
571 misc_build
ca8da28e 572
ccdb935e 573if [ "${EMB}" -eq "0" ]; then
cfccf561
MT
574 beautify build_stage "Building installer"
575 installer_build
ccdb935e 576fi
ca8da28e 577
cfccf561
MT
578 beautify build_stage "Building packages"
579 packages_build
580
581 echo ""
582 echo "... and all this hard work for this:"
27eac87a 583 ls -sh $BASEDIR/${IMAGENAME}.iso
fb86d09d 584
1ded22cc 585 local BLD_TIME_END=$(date +%s)
4a792716
MT
586 build_spy duration $[ $BLD_TIME_END - $BLD_TIME_START ]
587 build_spy state idle
12b17e35 588 build_spy exit
da1befdd 589 rm -f $RUNNING
ca8da28e 590}
3349c6c9
MT
591
592gettoolchain() {
da1befdd 593 check_user
1ded22cc 594 DIR_TOOLCHAIN="$BASEDIR/cache/toolchains"
eac267c0 595 [ -d "${DIR_TOOLCHAIN}" ] || mkdir -p ${DIR_TOOLCHAIN}
3349c6c9
MT
596 if [ ! -f $BASEDIR/cache/toolchains/$TOOLCHAINNAME.tar.bz2 ]; then
597 URL_TOOLCHAIN=$(grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }')
598 DIR_TOOLCHAIN="$BASEDIR/cache/toolchains"
599
11f0ec61 600 echo "Loading toolchain for $TARGET"
1ded22cc 601 scp -2 ${IPFIRE_USER}@${URL_TOOLCHAIN}/$TOOLCHAINNAME.tar.bz2 \
da1befdd 602 ${DIR_TOOLCHAIN}
3349c6c9
MT
603 else
604 echo -n "Toolchain \"$TOOLCHAINNAME\" is already existing"
605 beautify message SKIP
606 fi
607}
da1befdd
MT
608
609puttoolchain() {
610 check_user
611 if [ -f $BASEDIR/cache/toolchains/$TOOLCHAINNAME.tar.bz2 ]; then
612 URL_TOOLCHAIN=$(grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }')
613 DIR_TOOLCHAIN="$BASEDIR/cache/toolchains"
614
11f0ec61 615 echo "Pushing toolchain for $TARGET"
1ded22cc 616 scp -2 ${DIR_TOOLCHAIN}/$TOOLCHAINNAME.tar.bz2 \
da1befdd
MT
617 ${IPFIRE_USER}@${URL_TOOLCHAIN}
618 else
619 echo -n "Toolchain \"$TOOLCHAINNAME\" is not existing. "
620 echo -n "Run \"./make.sh build\", first"
621 beautify message SKIP
622 fi
623}
624
625getsource() {
626 if [ ! -d $BASEDIR/cache ]; then
627 mkdir -p $BASEDIR/cache/{tarballs,patches}
628 fi
11f0ec61 629 mkdir -p $BASEDIR/log_${TARGET}
da1befdd
MT
630 echo -e "${BOLD}Preload all source files${NORMAL}"
631 cd $BASEDIR/lfs
632 for i in *; do
633 if [ -f "$i" -a "$i" != "Config" ]; then
634 make -s -f $i \
635 LFS_BASEDIR=$BASEDIR \
636 MESSAGE="$i\t" \
dd26ccb3 637 download 2>> $LOGFILE
da1befdd
MT
638 [ $? -ne 0 ] && beautify message FAIL
639 fi
640 done
641 cd $BASEDIR
642}
643
644putsource() {
645 check_user
646 URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
647 REMOTE_FILES=$(echo "ls -1" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
648
649 cd $BASEDIR/cache/tarballs/
650 for file in $(ls -1); do
651 grep -q "$file" <<<$REMOTE_FILES && continue
652 NEW_FILES="$NEW_FILES $file"
653 done
1ded22cc 654 [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
da1befdd
MT
655 cd $BASEDIR
656}
e70deaa8
MT
657
658puttarget() {
659 check_user
660 URL_TARGET=$(grep URL_TARGET lfs/Config | awk '{ print $3 }')
fd2b3d14 661 DIR="${BASEDIR}/${HOSTNAME}/$(date '+%Y%m%d-%0k')-${TARGET}/"
e70deaa8 662
47778a57 663 # If there is no iso, we do nothing.
0ad657e2 664 ls ${BASEDIR}/${IMAGENAME}.* &>/dev/null || return 0
47778a57
MT
665
666 rm -rf ${BASEDIR}/${HOSTNAME} 2>/dev/null
e70deaa8
MT
667 mkdir -p ${DIR}
668
669 [ -e "${BASEDIR}/packages" ] && cp -al ${BASEDIR}/packages ${DIR}
3554fded 670 [ -e "${BATCHLOG}" ] && \
93cb874d 671 python ${BASEDIR}/tools/alog2html < ${BATCHLOG} > ${DIR}/build_log.html
12b17e35
MT
672 pkg_list_packages > ${DIR}/packages-list.txt
673 git_log >/dev/null; cp -l ${BASEDIR}/doc/ChangeLog ${DIR}
3554fded 674 git_export; cp -l ${BASEDIR}/${SNAME}-${VERSION}.source.tar.gz ${DIR}
896427c7 675 git_diff >/dev/null && cp -l ${DIFF_NAME} ${DIR}
0ad657e2 676 cp -l ${BASEDIR}/${IMAGENAME}.* ${DIR}
e70deaa8
MT
677
678 cd $BASEDIR && \
1ded22cc 679 scp -2 -r ${HOSTNAME} ${IPFIRE_USER}@${URL_TARGET} || :
e70deaa8 680
47778a57 681 rm -rf ${BASEDIR}/${HOSTNAME} 2>/dev/null
e70deaa8 682}