tazwok annotate chroot-scripts/cook-toolchain @ rev 548

Fix: -pipe compile flag shouldn't make compilation fails because of low ram anymore (+ cosmetic change)
author Antoine Bodin <gokhlayeh@slitaz.org>
date Fri Dec 09 22:43:04 2011 +0100 (2011-12-09)
parents 44e24b12e9dd
children 176f3c91b68a
rev   line source
gokhlayeh@315 1 #!/bin/bash
gokhlayeh@315 2 #
gokhlayeh@315 3 # An attempt to cook a new toolchain from scratch.
gokhlayeh@315 4
gokhlayeh@315 5 # Important settings and variables.
gokhlayeh@315 6 source /usr/lib/slitaz/libtaz
gokhlayeh@315 7 source /etc/slitaz/tazwok.conf
gokhlayeh@352 8
gokhlayeh@542 9 LOCAL_REPOSITORY=$SLITAZ_DIR/${undigest:-$SLITAZ_VERSION}
gokhlayeh@542 10 if [ -f $LOCAL_REPOSITORY/tazwok.conf ]; then
gokhlayeh@542 11 source $LOCAL_REPOSITORY/tazwok.conf
gokhlayeh@542 12 fi
gokhlayeh@542 13 WOK=$LOCAL_REPOSITORY/wok
gokhlayeh@542 14
gokhlayeh@352 15 # Report progress on webserver.
gokhlayeh@352 16 log_step="$LOCAL_REPOSITORY/log/step"
gokhlayeh@352 17 run_on_exit="$run_on_exit
gokhlayeh@352 18 rm -f $LOCAL_REPOSITORY/log/step
gokhlayeh@352 19 rm -f $LOCAL_REPOSITORY/log/package"
gokhlayeh@352 20
gokhlayeh@315 21 source_lib report
gokhlayeh@315 22 report start
gokhlayeh@315 23
gokhlayeh@315 24 report step "Cooking temporary toolchain"
gokhlayeh@315 25 report open-bloc
gokhlayeh@315 26
gokhlayeh@542 27 report step "Configuring packages repositories"
gokhlayeh@441 28 # Incoming packages as the only source for packages.
gokhlayeh@441 29 rm -r /var/lib/tazpkg/undigest
gokhlayeh@542 30 tazpkg setup-mirror $LOCAL_REPOSITORY/packages-incoming
gokhlayeh@441 31 tazpkg recharge
gokhlayeh@315 32
gokhlayeh@441 33 report step "Refreshing SliTaz tools"
gokhlayeh@441 34 report open-bloc
paul@427 35 # These four packages will be needed later.
gokhlayeh@334 36 for p in libtaz tazwok slitaz-base-files tazpkg; do
gokhlayeh@315 37 tazwok cook $p
gokhlayeh@315 38 done
gokhlayeh@441 39 report close-bloc
gokhlayeh@315 40
gokhlayeh@441 41 report step "Setting up environnement"
gokhlayeh@315 42 set +h
gokhlayeh@315 43 umask 022
gokhlayeh@315 44 PS1='\u:\w\$ '
gokhlayeh@315 45 LANG=POSIX
gokhlayeh@315 46 LC_ALL=POSIX
gokhlayeh@315 47
gokhlayeh@542 48 # Set HOST_SYSTEM to something like $ARCH-tmp-linux-gnu to enable
paul@427 49 # the temporary toolchain.
gokhlayeh@542 50 HOST_SYSTEM=$(echo $HOST_SYSTEM | sed 's/\(.*\)-\(.*\)-linux-gnu/\1-tmp-linux-gnu/')
gokhlayeh@315 51
gokhlayeh@315 52 PATH=/tools/bin:/tools/usr/bin:/tools/sbin:/tools/usr/sbin:/bin:/usr/bin:/sbin:/usr/sbin
gokhlayeh@315 53 CONFIG_SITE="/etc/config.site.tmptoolchain"
gokhlayeh@542 54 echo "prefix=/tools" > /etc/config.site.tmptoolchain
gokhlayeh@315 55
gokhlayeh@315 56 export LANG LC_ALL PATH PS1 MAKEFLAGS CONFIG_SITE
gokhlayeh@315 57 unset CC CXX CPP CFLAGS CXXFLAGS LD_LIBRARY_PATH LD_PRELOAD DESTDIR
gokhlayeh@315 58
gokhlayeh@542 59 # Create the dir for the temporary toolchain and link in root of build
gokhlayeh@315 60 # system.
gokhlayeh@441 61 rm -rf /tools
gokhlayeh@315 62 mkdir /tools
gokhlayeh@315 63
gokhlayeh@441 64 report end-step
gokhlayeh@441 65
gokhlayeh@315 66 # Use some tweaked code from tazwok.
gokhlayeh@315 67 prepare_package()
gokhlayeh@315 68 {
gokhlayeh@315 69 tazwok clean $PACKAGE
gokhlayeh@315 70 tazwok get-src $PACKAGE
gokhlayeh@315 71 unset SOURCE VERSION EXTRAVERSION CATEGORY SHORT_DESC \
slaxemulator@497 72 MAINTAINER WEB_SITE WGET_URL DEPENDS BUILD_DEPENDS WANTED \
slaxemulator@497 73 stuff wanted_stuff
gokhlayeh@315 74 . $WOK/$PACKAGE/receipt
gokhlayeh@315 75 src=$WOK/$PACKAGE/$PACKAGE-$VERSION
gokhlayeh@473 76 stuff=$WOK/$PACKAGE/stuff
gokhlayeh@473 77 [ "$WANTED" ] && wanted_stuff=$WOK/$WANTED/stuff
gokhlayeh@315 78 cd $WOK/$PACKAGE
gokhlayeh@315 79 }
gokhlayeh@315 80
gokhlayeh@542 81
gokhlayeh@315 82 # Binutils and gcc need to be compiled twice.
gokhlayeh@315 83 for PACKAGE in binutils gcc; do
gokhlayeh@315 84 rm $LOCAL_REPOSITORY/log/tmp-toolchain-$PACKAGE-firstpass.html 2>/dev/null
gokhlayeh@315 85 report sublog $LOCAL_REPOSITORY/log/tmp-toolchain-$PACKAGE-firstpass.html
gokhlayeh@352 86 echo "tmp-toolchain-$PACKAGE-firstpass" > $LOCAL_REPOSITORY/log/package
gokhlayeh@315 87 report step "Compiling $PACKAGE, first pass"
gokhlayeh@315 88 report open-bloc
gokhlayeh@315 89 prepare_package
gokhlayeh@315 90 report step "Running compilation rules"
gokhlayeh@548 91 precook_tmp_toolchain
gokhlayeh@315 92 report end-step || exit 1
gokhlayeh@315 93 report close-bloc
gokhlayeh@315 94 report end-sublog
gokhlayeh@315 95 done
gokhlayeh@315 96
gokhlayeh@315 97 # Compile temporary toolchain using the $TOOLCHAIN variable.
gokhlayeh@315 98 for PACKAGE in $SLITAZ_TOOLCHAIN; do
gokhlayeh@315 99 rm $LOCAL_REPOSITORY/log/tmp-toolchain-$PACKAGE.html 2>/dev/null
gokhlayeh@315 100 report sublog $LOCAL_REPOSITORY/log/tmp-toolchain-$PACKAGE.html
gokhlayeh@352 101 echo "tmp-toolchain-$PACKAGE" > $LOCAL_REPOSITORY/log/package
gokhlayeh@315 102 report step "Compiling $PACKAGE"
gokhlayeh@315 103 report open-bloc
gokhlayeh@315 104 prepare_package
gokhlayeh@315 105 report step "Running compilation rules"
gokhlayeh@315 106
paul@427 107 # Use compile_rules if there's no function cook_tmp_toolchain in
gokhlayeh@315 108 # the receipt. Works well if both functions are the same, as
paul@427 109 # cook-toolchain uses its own config.site to set different default
paul@427 110 # paths.
gokhlayeh@315 111 if grep -q ^cook_tmp_toolchain\(\)$ $WOK/$PACKAGE/receipt; then
gokhlayeh@315 112 cook_tmp_toolchain
gokhlayeh@315 113 else
gokhlayeh@315 114 compile_rules
gokhlayeh@315 115 fi
gokhlayeh@315 116
gokhlayeh@315 117 report end-step || exit 1
gokhlayeh@315 118 report close-bloc
gokhlayeh@315 119 report end-sublog
gokhlayeh@315 120 done
gokhlayeh@315 121
paul@427 122 # Now we erase previous chroot tools and switch to temporary
gokhlayeh@315 123 # toolchain.
gokhlayeh@315 124
gokhlayeh@315 125 report step "Setting up temporary toolchain environnment"
gokhlayeh@315 126
gokhlayeh@315 127 PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin:/tools/usr/bin:/tools/sbin:/tools/usr/sbin
gokhlayeh@315 128 export PATH
gokhlayeh@315 129
gokhlayeh@315 130 # Ajout manuel de libtaz et tazwok dans ce chroot.
gokhlayeh@315 131 cp -a /etc/slitaz/tazpkg.conf /tmp/tazpkg.conf
gokhlayeh@315 132 mkdir -p /tmp/backup/var/lib/tazpkg
gokhlayeh@315 133 sed 's/^AUTO_INSTALL_DEPS="yes"/AUTO_INSTALL_DEPS="no"/' -i \
gokhlayeh@315 134 /etc/slitaz/tazpkg.conf
gokhlayeh@334 135 BASE_PKGS="tazpkg tazwok slitaz-base-files libtaz"
gokhlayeh@315 136 for i in $BASE_PKGS; do
gokhlayeh@315 137 echo N | tazpkg get-install $i --root=/tmp/backup --forced
gokhlayeh@315 138 done
gokhlayeh@315 139 mkdir -p /tmp/backup/var/log/slitaz /tmp/backup/etc/slitaz
gokhlayeh@315 140 if [ -d /var/log/slitaz ]; then
gokhlayeh@315 141 cp -a /var/log/slitaz/* /tmp/backup/var/log/slitaz
gokhlayeh@315 142 fi
gokhlayeh@322 143 cp -a /var/lib/tazpkg/* /tmp/backup/var/lib/tazpkg
gokhlayeh@315 144 cp -a /etc/slitaz/* /tmp/backup/etc/slitaz
gokhlayeh@315 145 cp -a /tmp/tazpkg.conf /tmp/backup/etc/slitaz
gokhlayeh@315 146 cp -a /etc/resolv.conf /tmp/backup/etc
gokhlayeh@315 147
gokhlayeh@322 148 # Switch to temp toolchain tools entirely.
gokhlayeh@315 149 rm -r /bin /etc /lib /sbin /usr /var
gokhlayeh@315 150 cp -a /tmp/backup/* /
gokhlayeh@322 151 rm -r /tmp/backup
gokhlayeh@315 152
gokhlayeh@315 153 case $ARCH in
gokhlayeh@315 154 x86_64) ln -sv lib /lib64 && ln -sv lib /usr/lib64 ;;
gokhlayeh@315 155 esac
gokhlayeh@315 156
gokhlayeh@315 157 mkdir -p /bin /usr/bin /usr/lib
paul@427 158 # Doing a loop so we don't get {bash,cat,echo,pwd,stty} softlink
gokhlayeh@315 159 BASIC_APPS="bash cat echo pwd stty"
gokhlayeh@315 160 for i in $BASIC_APPS; do
gokhlayeh@315 161 ln -s /tools/bin/$i /bin/$i
gokhlayeh@315 162 done
gokhlayeh@315 163 BASIC_LIBS="libgcc_s.so libgcc_s.so.1 libstdc++.so libstdc++.so.6"
gokhlayeh@315 164 for i in $BASIC_LIBS; do
gokhlayeh@315 165 ln -sf /tools/lib/$i /usr/lib/$i
gokhlayeh@315 166 done
gokhlayeh@315 167
gokhlayeh@315 168 ln -s /tools/bin/perl /usr/bin
gokhlayeh@315 169 ln -s /tools/bin/gettext.sh /usr/bin
gokhlayeh@322 170 ln -s /tools/bin/busybox /bin/sh
gokhlayeh@315 171
gokhlayeh@315 172 report end-step
gokhlayeh@315 173
gokhlayeh@315 174 # Finally, cook final* version of the toolchain packages.
gokhlayeh@315 175 # * : recook toolchain against itself minus linux-api-headers
gokhlayeh@315 176 # glibc binutils & gcc can be a good idea to make things
paul@427 177 # more robust & stable; in some cases it solves dependency
gokhlayeh@315 178 # loops.
gokhlayeh@315 179
gokhlayeh@315 180 # Get toolchain cooklist.
gokhlayeh@315 181 tazwok gen-cooklist ${undigest:+--undigest=$undigest} > /tmp/toolchain.list
gokhlayeh@315 182
gokhlayeh@315 183 # Next cook packages one by one.
paul@427 184 # Cooking the list doesn't work because sh won't take care
gokhlayeh@315 185 # of the presence of new executables even if they're first in
gokhlayeh@315 186 # $PATH.
gokhlayeh@315 187
gokhlayeh@441 188 cat /tmp/toolchain.list | while read PACKAGE; do
gokhlayeh@315 189 tazwok cook $PACKAGE || exit 1
gokhlayeh@315 190 done