Hi all. I wrote a crude script to build toolchain for x86 architecture. Please excuse me for this insolence. I am a beginner. I like to leave from you to advise you to edit and put better.
Thanks 00.stage1-toolchain.sh ------------------------------------------- #!/bin/bash # # # Written by Milan Buska - newishi at newishi dot net # Created with resources to # http://crux.nu # http://cross-lfs.org/view/clfs-sysroot/x86 # http://www.eglibc.org/cgi-bin/viewcvs.cgi/branches/eglibc- 2_10/libc/EGLIBC.cross-building? rev = 8421 & view = markup / # # Before running, select the disk is formatted # partition and attach it to the directory /mnt/sysroot # set +h set -e # Settings variables # build="i686-pc-linux-gnu" host=$build target="i686-saux-linux-gnu" sysroot="/mnt/sysroot" linux_arch="x86" # stage1 gmpv=gmp-4.3.2 mpfrv=mpfr-2.4.2 pplv=ppl-0.10.2 cloogv=cloog-ppl-0.15.7 mpcv=mpc-0.8.1 binutilsv=binutils-2.20 gccv=gcc-4.4.3 eglibcv=eglibc-2.10 linuxv=linux-2.6.32.8 filev=file-5.03 groffv=groff-1.20.1 shadowv=shadow-4.1.4.2 ncursesv=ncurses-5.7 # src=$sysroot/src mkdir -pv $src gnu="http://ftp.sh.cvut.cz/MIRRORS/gnu/pub/gnu" wget -nc -P $src \ $gnu/binutils/binutils-2.20.tar.bz2 \ $gnu/groff/groff-1.20.1.tar.gz \ $gnu/ncurses/ncurses-5.7.tar.gz \ http://ftp.sh.cvut.cz/MIRRORS/kernel/linux/kernel/v2.6/linux-2.6.32.8.tar.bz2 \ http://gcc.fyxm.net/releases/gcc-4.4.3/gcc-4.4.3.tar.bz2 \ http://gcc.fyxm.net/infrastructure/gmp-4.3.2.tar.bz2 \ http://gcc.fyxm.net/infrastructure/mpfr-2.4.2.tar.bz2 \ http://gcc.fyxm.net/infrastructure/mpc-0.8.1.tar.gz \ http://gcc.fyxm.net/infrastructure/ppl-0.10.2.tar.gz \ http://gcc.fyxm.net/infrastructure/cloog-ppl-0.15.7.tar.gz \ ftp://ftp.astron.com/pub/file/file-5.03.tar.gz \ ftp://pkg-shadow.alioth.debian.org/pub/pkg-shadow/shadow-4.1.4.2.tar.bz2 \ http://www.lfs-matrix.org/pub/clfs/conglomeration/eglibc/eglibc-2.10.tar.bz2 \ http://patches.cross-lfs.org/sysroot-dev/shadow-4.1.4.2-sysroot_hacks-1.patch \ http://patches.cross-lfs.org/sysroot-dev/ncurses-5.7-bash_fix-1.patch echo "" # # cd $src echo "" echo " == Unpacking GMP == " tar -xf gmp-4.3.2.tar.bz2 echo "" echo " == Unpacking MPFR == " tar -xf mpfr-2.4.2.tar.bz2 echo "" echo " == Unpacking MPC == " tar -xf mpc-0.8.1.tar.gz echo "" echo " == Unpacking PPL == " tar -xf ppl-0.10.2.tar.gz echo "" echo " == Unpacking CLOOG-PPL == " tar -xf cloog-ppl-0.15.7.tar.gz echo "" echo " == Unpacking BINUTILS == " tar -xf binutils-2.20.tar.bz2 echo "" echo " == Unpacking GCC == " tar -xf gcc-4.4.3.tar.bz2 echo "" echo " == Unpacking KERNEL == " tar -xf linux-2.6.32.8.tar.bz2 echo "" echo " == Unpacking EGLIBC == " tar -xf eglibc-2.10.tar.bz2 echo "" echo " == Unpacking FILE == " tar -xf file-5.03.tar.gz echo "" echo " == Unpacking GROFF == " tar -xf groff-1.20.1.tar.gz echo "" echo " == Unpacking SHADOW == " tar -xf shadow-4.1.4.2.tar.bz2 echo "" echo " == Unpacking NCURSES == " tar -xf ncurses-5.7.tar.gz echo "" echo " == All O.K == " echo "" # # # work=$sysroot/work mkdir -pv $work tools=$sysroot/tools mkdir -pv $tools echo "" # Creating Directories mkdir -v $sysroot/bin mkdir -v $sysroot/sbin mkdir -v $sysroot/boot mkdir -v $sysroot/dev mkdir -v $sysroot/proc mkdir -v $sysroot/sys mkdir -v $sysroot/etc mkdir -v $sysroot/tmp mkdir -v $sysroot/mnt mkdir -v $sysroot/root mkdir -v $sysroot/lib mkdir -v $sysroot/lib/modules mkdir -v $sysroot/opt mkdir -v $sysroot/opt/bin mkdir -v $sysroot/opt/sbin mkdir -v $sysroot/usr mkdir -v $sysroot/usr/{bin,include,lib,sbin,share,src,man} mkdir -v $sysroot/usr/man/man{1,2,3,4,5,6,7,8} ln -sv ../var $sysroot/usr/var mkdir -v $sysroot/var mkdir -v $sysroot/var/cache mkdir -v $sysroot/var/lib mkdir -v $sysroot/var/lib/pkg mkdir -v $sysroot/var/lock mkdir -v $sysroot/var/log mkdir -v $sysroot/var/log/old mkdir -v $sysroot/var/run touch $sysroot/var/run/utmp mkdir -v $sysroot/var/spool mkdir -v $sysroot/var/spool/mail mkdir -v $sysroot/var/tmp mkdir -v $sysroot/var/ftp mkdir -v $sysroot/var/www mkdir -v $sysroot/var/empty ln -sv spool/mail $sysroot/var/mail mkdir -v $sysroot/home chmod -v 1777 $sysroot/var/spool/mail chmod -v 1777 $sysroot/tmp chmod -v 1777 $sysroot/var/lock chmod -v 1777 $sysroot/var/tmp chmod -v 0750 $sysroot/root ### /dev mknod $sysroot/dev/console c 5 1 chmod -v 0600 $sysroot/dev/console # ### Creating the passwd, group, fstab, issue, # mime.types, motd, mtab,securetty, shadow, # shells and log Files # # passwd cat > $sysroot/etc/passwd << EOF root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin: daemon:x:2:2:daemon:/sbin: mail:x:8:12:mail:/var/spool/mail: ftp:x:14:11:ftp:/var/ftp: www:x:15:15:www:/var/www:/bin/false messagebus:x:81:81::/var/empty:/bin/false nobody:x:99:99:nobody:/: EOF # group cat > $sysroot/etc/group << EOF root::0:root bin::1:root,bin,daemon daemon::2:root,bin,daemon sys::3:root,bin adm::4:root,daemon tty::5: disk::6:root lp::7:daemon mem::8: kmem::9: wheel::10:root ftp::11: mail::12: mlocate::13: dialout::14: www::15: audio::16: video::17: floppy::18: tape::19: scanner::20: cdrom::21: nobody::99: messagebus::81: users::100: EOF # fstab cat > $sysroot/etc/fstab << EOF # /etc/fstab: static file system information # # <file system> <dir> <type> <options> <dump> # <pass> #/dev/#REISERFS_ROOT# / reiserfs defaults 0 0 #/dev/#EXT3FS_ROOT# / ext3 defaults 0 1 #/dev/#EXT4FS_ROOT# / ext4 defaults 0 1 #/dev/#JFS_ROOT# / jfs defaults 1 1 #/dev/#XFS_ROOT# / xfs defaults 0 0 #/dev/#SWAP# swap swap defaults 0 0 #/dev/#REISERFS_HOME# /home reiserfs defaults 0 0 #/dev/#EXT3FS_HOME# /home ext3 defaults 0 2 #/dev/#EXT4FS_HOME# /home ext4 defaults 0 2 #/dev/#JFS_HOME# /home jfs defaults 1 2 #/dev/#XFS_HOME# /home xfs defaults 0 0 #/dev/cdrom /cdrom iso9660 ro,user,noauto,unhide 0 0 #/dev/dvd /dvd udf ro,user,noauto,unhide 0 0 #/dev/floppy/0 /floppy vfat user,noauto,unhide 0 0 devpts /dev/pts devpts defaults 0 0 none /sys sysfs defaults 0 0 none /proc proc defaults 0 0 #tmp /tmp tmpfs defaults 0 0 #shm /dev/shm tmpfs defaults 0 0 #usb /proc/bus/usb usbfs defaults 0 0 # End of file EOF # issue cat > $sysroot/etc/issue << EOF Welcome to new system (\n) (\l) EOF # mime.types cat > $sysroot/etc/mime.types << EOF # /etc/mime.types: mime types # application/andrew-inset ez application/excel xls application/octet-stream bin application/oda oda application/pdf pdf application/pgp pgp application/postscript ps PS eps application/rtf rtf application/x-arj-compressed arj application/x-bcpio bcpio application/x-chess-pgn pgn application/x-cpio cpio application/x-csh csh application/x-debian-package deb application/x-msdos-program com exe bat application/x-dvi dvi application/x-gtar gtar application/x-gunzip gz application/x-hdf hdf application/x-latex latex application/x-mif mif application/x-netcdf cdf nc application/x-perl pl pm application/x-rar-compressed rar application/x-sh sh application/x-shar shar application/x-sv4cpio sv4cpio application/x-sv4crc sv4crc application/x-tar tar application/x-tar-gz tgz tar.gz application/x-tcl tcl application/x-tex tex application/x-texinfo texi texinfo application/x-troff t tr roff application/x-troff-man man application/x-troff-me me application/x-troff-ms ms application/x-ustar ustar application/x-wais-source src application/x-zip-compressed zip audio/basic snd audio/midi mid midi audio/ulaw au audio/x-aiff aif aifc aiff audio/x-wav wav image/gif gif image/ief ief image/jpeg jpe jpeg jpg image/png png image/tiff tif tiff image/x-cmu-raster ras image/x-portable-anymap pnm image/x-portable-bitmap pbm image/x-portable-graymap pgm image/x-portable-pixmap ppm image/x-rgb rgb image/x-xbitmap xbm image/x-xpixmap xpm image/x-xwindowdump xwd text/html html htm text/plain asc txt text/css css text/richtext rtx text/tab-separated-values tsv text/x-setext etx video/dl dl video/fli fli video/gl gl video/mpeg mp2 mpe mpeg mpg video/quicktime mov qt video/x-msvideo avi video/x-sgi-movie movie x-world/x-vrml vrm vrml wrl # End of file EOF # motd touch $sysroot/etc/motd # mtab touch $sysroot/etc/mtab # securetty cat > $sysroot/etc/securetty << EOF # /etc/securetty: defines which devices root can log in on # console ttyS0 tty1 tty2 tty3 tty4 tty5 tty6 # End of file EOF # shadow cat > $sysroot/etc/shadow << EOF root::0:::::: bin:x:0:::::: daemon:x:0:::::: mail:x:0:::::: ftp:x:0:::::: www:x:0:::::: messagebus:x:0:::::: nobody:x:0:::::: EOF # shells cat > $sysroot/etc/shells << EOF # /etc/shells: defines valid login shells # /bin/sh /bin/bash # End of file EOF # touch $sysroot/var/run/utmp $sysroot/var/log/{btmp,lastlog,wtmp} chmod -v 664 $sysroot/var/run/utmp $sysroot/var/log/lastlog chmod -v 600 $sysroot/var/log/btmp # ### Constructing Cross-Compile Tools # GMP mkdir -pv $work/gmp cd $work/gmp $src/$gmpv/configure --prefix=$tools \ --enable-cxx make make install # MPFR mkdir -pv $work/mpfr cd $work/mpfr LDFLAGS="-Wl,-rpath,$tools/lib" \ $src/$mpfrv/configure --prefix=$tools \ --enable-shared \ --with-gmp=$tools make make install # MPC mkdir -pv $work/mpc cd $work/mpc LDFLAGS="-Wl,-rpath,$tools/lib" \ $src/$mpcv/configure --prefix=$tools \ --enable-shared \ --with-gmp=$tools \ --with-mpfr=$tools make make install # PPL mkdir -pv $work/ppl cd $work/ppl LDFLAGS="-Wl,-rpath,$tools/lib" \ $src/$pplv/configure --prefix=$tools \ --enable-shared \ --enable-interfaces="c,cxx" \ --disable-optimization \ --with-libgmp-prefix=$tools \ --with-libgmpxx-prefix=$tools make make install # CLOOG mkdir -pv $work/cloog cd $work/cloog LDFLAGS="-Wl,-rpath,$tools/lib" \ $src/$cloogv/configure --prefix=$tools \ --enable-shared \ --with-bits=gmp \ --with-gmp=$tools \ --with-ppl=$tools make make install # BINUTILS mkdir -pv $work/binutils cd $work/binutils AR=ar AS=as \ $src/$binutilsv/configure --prefix=$tools \ --host=$host \ --target=$target \ --with-sysroot=$sysroot \ --disable-nls \ --enable-shared \ --disable-multilib \ --with-pkgversion="SAUX" make configure-host make make install # GCC - 1 mkdir -pv $work/gcc1 cd $work/gcc1 AR=ar LDFLAGS="-Wl,-rpath,$tools/lib" \ $src/$gccv/configure --prefix=$tools \ --build=$build \ --host=$host \ --target=$target \ --disable-multilib \ --with-sysroot=$sysroot \ --disable-nls \ --without-headers \ --with-newlib \ --disable-decimal-float \ --disable-libgomp \ --disable-libmudflap \ --disable-libssp \ --with-mpfr=$tools \ --with-gmp=$tools \ --with-mpc=$tools \ --with-ppl=$tools \ --with-cloog=$tools \ --disable-shared \ --disable-threads \ --enable-languages=c PATH=$tools/bin:$PATH make PATH=$tools/bin:$PATH make install # Install kernel headers cp -r $src/$linuxv $work/linux cd $work/linux PATH=$tools/bin:$PATH \ make headers_install \ ARCH=$linux_arch CROSS_COMPILE=$target- \ INSTALL_HDR_PATH=$sysroot/usr find $sysroot/usr/include -name .install -or -name ..install.cmd | xargs /bin/rm -fv cp -v $src/$binutilsv/include/libiberty.h $sysroot/usr/include # EGLIBC - HEADERS mkdir -pv $work/eglibc-headers cd $work/eglibc-headers BUILD_CC=gcc \ CC=$tools/bin/$target-gcc \ AR=$tools/bin/$target-ar \ RANLIB=$tools/bin/$target-ranlib \ $src/$eglibcv/configure --prefix=/usr \ --with-headers=$sysroot/usr/include \ --build=$build \ --host=$target \ --disable-profile \ --without-gd \ --without-cvs \ --enable-add-ons make install-headers install_root=$sysroot \ install-bootstrap-headers=yes # # # mkdir -pv $sysroot/usr/lib make csu/subdir_lib cp -v csu/{crt1.o,crti.o,crtn.o} $sysroot/usr/lib # $tools/bin/$target-gcc -nostdlib -nostartfiles -shared -x c /dev/null \ -o $sysroot/usr/lib/libc.so # GCC - 2 mkdir -pv $work/gcc2 cd $work/gcc2 AR=ar LDFLAGS="-Wl,-rpath,$tools/lib" \ $src/$gccv/configure --prefix=$tools \ --build=$build \ --host=$host \ --target=$target \ --with-sysroot=$sysroot \ --disable-libssp \ --disable-libgomp \ --disable-libmudflap \ --with-mpfr=$tools \ --with-gmp=$tools \ --with-mpc=$tools \ --with-ppl=$tools \ --with-cloog=$tools \ --disable-nls \ --disable-multilib \ --disable-decimal-float \ --enable-languages=c PATH=$tools/bin:$PATH make PATH=$tools/bin:$PATH make install # EGLIBC mkdir -pv $work/eglibc cd $work/eglibc cat > configparms << EOF install_root=$sysroot EOF CFLAGS="-march=i686 -g -O2" \ BUILD_CC=gcc \ CC=$tools/bin/$target-gcc \ AR=$tools/bin/$target-ar \ RANLIB=$tools/bin/$target-ranlib \ $src/$eglibcv/configure --prefix=/usr \ --with-headers=$sysroot/usr/include \ --build=$build \ --host=$target \ --disable-profile \ --without-gd \ --without-cvs \ --enable-add-ons \ --with-pkgversion="SAUX" PATH=$tools/bin:$PATH make PATH=$tools/bin:$PATH make install install_root=$sysroot PATH=$tools/bin:$PATH make install_root=$sysroot localedata/install-locales ln -sfv ../usr/share/zoneinfo/UTC $sysroot/etc/localtime mkdir -pv $sysroot/etc/ld.so.conf.d $sysroot/usr/lib/locale rm $sysroot/usr/include/rpcsvc/{rquota.h,rquota.x} rm -rf $sysroot/usr/share/info # # $sysroot/etc (host.conf,hosts,ld.so.conf,nsswitch.conf,resolv.conf) # # host.conf cat > $sysroot/etc/host.conf << EOF # /etc/host.conf: resolver configuration file # order hosts,bind multi on # End of file EOF # hosts cat > $sysroot/etc/hosts << EOF # /etc/hosts: static lookup table for host names # # IPv4 127.0.0.1 localhost #<ip-address> <hostname.domain.org> <aliases> # IPv6 #::1 ip6-localhost ip6-loopback #fe00::0 ip6-localnet #ff00::0 ip6-mcastprefix #ff02::1 ip6-allnodes #ff02::2 ip6-allrouters #ff02::3 ip6-allhosts # End of file EOF # ld.so.conf cat > $sysroot/etc/ld.so.conf << EOF # /etc/ld.so.conf: dynamic linker configuration file # include /etc/ld.so.conf.d/*.conf # End of file EOF # nsswitch.conf cat > $sysroot/etc/nsswitch.conf << EOF # /etc/nsswitch.conf: name service switch configuration file # passwd: files group: files shadow: files hosts: files dns networks: files services: files protocols: files rpc: files publickey: files ethers: files netmasks: files netgroup: files bootparams: files automount: files aliases: files # End of file EOF # resolv.conf cat > $sysroot/etc/resolv.conf << EOF # /etc/resolv.conf: resolver configuration file # #search <domain.org> #nameserver <ip-address> # End of file EOF # GCC - 3 mkdir -pv $work/gcc3 cd $work/gcc3 AR=ar LDFLAGS="-Wl,-rpath,$tools/lib" \ $src/$gccv/configure --prefix=$tools \ --build=$build \ --host=$host \ --target=$target \ --enable-c99 \ --enable-long-long \ --enable-threads=posix \ --enable-shared \ --enable-__cxa_atexit \ --disable-libssp \ --disable-libgomp \ --disable-libmudflap \ --disable-nls \ --disable-multilib \ --enable-languages=c,c++,objc \ --with-sysroot=$sysroot \ --with-mpfr=$tools \ --with-gmp=$tools \ --with-mpc=$tools \ --with-ppl=$tools \ --with-cloog=$tools \ --with-pkgversion="SAUX" PATH=$tools/bin:$PATH make \ AS_FOR_TARGET="$target-as" \ LD_FOR_TARGET="$target-ld" PATH=$tools/bin:$PATH make install # # FILE mkdir -pv $work/file cd $work/file $src/$filev/configure --prefix=$tools make make install # GROFF mkdir -pv $work/groff cd $work/groff PAGE="A4" \ $src/$groffv/configure --prefix=$tools \ --without-x make make install # SHADOW cd $src/$shadowv patch -Np1 -i ../shadow-4.1.4.2-sysroot_hacks-1.patch mkdir -pv $work/shadow cd $work/shadow cat > config.cache << EOF shadow_cv_passwd_dir=$sysroot/bin" EOF cat >> config.cache << EOF ac_cv_func_lckpwdf=no EOF $src/$shadowv/configure --prefix=$tools \ --sbindir=$tools/bin \ --sysconfdir=$sysroot/etc \ --disable-shared \ --without-libpam \ --without-audit \ --without-selinux \ --program-prefix=$target- \ --without-nscd cp config.h{,.orig} sed "/PASSWD_PROGRAM/s/passwd/$target-&/" config.h.orig > config.h make make install # NCURSES cd $src/$ncursesv patch -Np1 -i ../ncurses-5.7-bash_fix-1.patch mkdir -pv $work/ncurses cd $work/ncurses $src/$ncursesv//configure --prefix=$tools \ --without-debug \ --without-shared make -C include make -C progs tic install -m755 progs/tic $tools/bin # echo "" echo " == FINISH == :-)" echo "" echo " == Warning: Before you install other packages, == add the variable PATH - /mnt/sysroot/tools/bin" # End of file Milan Buska -- Remember, no question is too stupid and no problem too small -- We've all been beginners _______________________________________________ Clfs-support mailing list [email protected] http://lists.cross-lfs.org/listinfo.cgi/clfs-support-cross-lfs.org
