clfs-bootstrap

clfs-bootstrap.git
git clone git://git.lenczewski.org/clfs-bootstrap.git
Log | Files | Refs | README | LICENSE

build-core-packages.sh (5743B)


      1 #!/bin/bash
      2 
      3 ################################################################################
      4 ### Defined Variables:
      5 ### - CLFS                  : Root folder for CLFS build, holds final tarballs
      6 ### - CLFS_BOOTSCRIPTS      : Root folder for CLFS bootscripts
      7 ### - CLFS_CONFIGS          : Additional configuration files for CLFS packages
      8 ### - CLFS_LOGS             : Package build log root
      9 ### - CLFS_SCRIPTS          : Build script root
     10 ### - CLFS_SOURCES          : Package source root
     11 ### ----------------------------------------------------------------------------
     12 ### - CLFS_ROOT             : Root folder for cross-compiled system
     13 ### - CLFS_BOOT_ROOT        : Root folder for boot-required binaries
     14 ### - CLFS_CROSS_NAME       : Name of the cross-toolchain root
     15 ### - CLFS_CROSS_ROOT       : Root folder for cross-toolchain
     16 ### - CLFS_CROSS_SYSROOT    : Sysroot for cross-toolchain
     17 ################################################################################
     18 
     19 source ~/.bashrc
     20 
     21 
     22 COMMON_BINUTILS_OPTS=(\
     23 	--enable-deterministic-archives \
     24 	--disable-separate-code \
     25 )
     26 
     27 
     28 COMMON_GCC_OPTS=(\
     29 	--enable-libstdcxx-time=rt \
     30 	--disable-assembly \
     31 	--disable-bootstrap \
     32 	--disable-gnu-indirect-function \
     33 	--disable-libmpx \
     34 	--disable-libmudflap \
     35 	--disable-libsanitizer \
     36 )
     37 
     38 
     39 ## TODO: get libressl to cross compile and ignore /usr/lib/libgcc in favour
     40 ##       of libgcc in sysroot
     41 LIBRESSL () {
     42 	./configure \
     43 		--prefix=/usr \
     44 		--build=${CLFS_HOST} \
     45 		--host=${CLFS_TARGET} \
     46 		--enable-shared \
     47 		--with-openssldir=/etc/ssl
     48 
     49 	make && make DESTDIR=${CLFS_ROOT} install
     50 }
     51 #EXTRACT "LIBRESSL" LIBRESSL "base-pkg-libressl"
     52 
     53 
     54 BINUTILS () {
     55 	mkdir -v binutils-build
     56 	cd binutils-build
     57 
     58 	../configure \
     59 		--prefix=/usr \
     60 		--with-build-sysroot=${CLFS_ROOT} \
     61 		--build=${CLFS_HOST} \
     62 		--host=${CLFS_TARGET} \
     63 		--target=${CLFS_TARGET} \
     64 		--enable-gold \
     65 		--enable-ld=default \
     66 		--enable-plugins \
     67 		--enable-shared \
     68 		--disable-multilib \
     69 		--disable-nls \
     70 		--disable-werror \
     71 		--with-system-zlib \
     72 		${COMMON_BINUTILS_OPTS[@]}
     73 
     74 	make tooldir=/usr
     75 	make tooldir=/usr DESTDIR=${CLFS_ROOT} install
     76 }
     77 #EXTRACT "BINUTILS" BINUTILS "core-pkg-binutils"
     78 
     79 
     80 GCC () {
     81 	mkdir -v gcc-build
     82 	cd gcc-build
     83 
     84 	../configure \
     85 		--prefix=/usr \
     86 		--with-build-sysroot=${CLFS_ROOT} \
     87 		--build=${CLFS_HOST} \
     88 		--host=${CLFS_TARGET} \
     89 		--target=${CLFS_TARGET} \
     90 		${CLFS_GCC_OPTS} \
     91 		--enable-languages=c,c++ \
     92 		--disable-multilib \
     93 		--disable-nls \
     94 		--with-system-zlib \
     95 		${COMMON_GCC_OPTS[@]}
     96 
     97 	make
     98 	make DESTDIR=${CLFS_ROOT} install
     99 	rm -rf ${CLFS_ROOT}/usr/lib/gcc/$(${CLFS_TARGET}-gcc -dumpmachine)/${GCC_VER}/include-fixed/bits
    100 
    101 	ln -sv ../usr/bin/cpp ${CLFS_ROOT}/lib
    102 
    103 	install -v -dm755 ${CLFS_ROOT}/usr/lib/bfd-plugins
    104 	ln -sfv ../../libexec/gcc/$(${CLFS_TARGET}-gcc -dumpmachine)/${GCC_VER}/liblto_plugin.so \
    105 		${CLFS_ROOT}/usr/lib/bfd-plugins
    106 
    107 	mkdir -pv ${CLFS_ROOT}/usr/share/gdb/auto-load/usr/lib
    108 	mv -v ${CLFS_ROOT}/usr/lib/*gdb.py ${CLFS_ROOT}/usr/share/gdb/auto-load/usr/lib
    109 }
    110 #EXTRACT "GCC" GCC "core-pkg-gcc"
    111 
    112 
    113 BUSYBOX () {
    114         make distclean
    115 
    116         make ARCH="${CLFS_ARCH}" defconfig
    117 
    118         make ARCH="${CLFS_ARCH}" CROSS_COMPILE="${CLFS_TARGET}-" && \
    119         make ARCH="${CLFS_ARCH}" CROSS_COMPILE="${CLFS_TARGET}-" CONFIG_PREFIX="${CLFS_ROOT}" install
    120 
    121         #### For building the linux kernel with modules
    122         cp -v examples/depmod.pl ${CLFS_ROOT}/bin
    123         chmod -v 755 ${CLFS_ROOT}/bin/depmod.pl
    124 }
    125 EXTRACT "BUSYBOX" BUSYBOX "core-pkg-busybox"
    126 
    127 
    128 ## Creating /etc/profile
    129 cat > ${CLFS_ROOT}/etc/profile <<'EOF'
    130 # /etc/profile
    131 
    132 # Set the initial path
    133 export PATH=/bin:/usr/bin
    134 
    135 if [ `id -u` -eq 0 ] ; then
    136 	export PATH=/bin:/sbin:/usr/bin:/usr/sbin
    137 	unset HISTFILE
    138 fi
    139 
    140 # Setup some environment variables.
    141 export USER=`id -un`
    142 export LOGNAME=$USER
    143 export HOSTNAME=`/bin/hostname`
    144 export HISTSIZE=1000
    145 export HISTFILESIZE=1000
    146 export PAGER='/bin/more '
    147 export EDITOR='/bin/vi'
    148 
    149 COMMON_FLAGS="-O2 -march=native -mtune=native -pipe"
    150 CFLAGS="${COMMON_FLAGS}"
    151 CXXFLAGS="${COMMON_FLAGS}"
    152 
    153 MAKEFLAGS="-j$(nproc)"
    154 
    155 # End /etc/profile
    156 EOF
    157 
    158 
    159 IANA_ETC () {
    160         cp protocols services ${CLFS_ROOT}/etc
    161 }
    162 EXTRACT "IANA_ETC" IANA_ETC "core-pkg-iana-etc"
    163 
    164 
    165 ## Setting hostname
    166 echo ${CLFS_HOSTNAME} > ${CLFS_ROOT}/etc/hostname
    167 
    168 
    169 ## Customising /etc/hosts
    170 cat > ${CLFS_ROOT}/etc/hosts <<'EOF'
    171 # Begin /etc/hosts (no network card version)
    172 
    173 127.0.0.1 localhost
    174 ::1 localhost
    175 
    176 # End /etc/hosts (no network card version)
    177 EOF
    178 
    179 
    180 ## Configuring the network script
    181 mkdir -pv ${CLFS_ROOT}/etc/network/if-{post-{up,down},pre-{up,down},up,down}.d
    182 mkdir -pv ${CLFS_ROOT}/usr/share/udhcpc
    183 
    184 cat > ${CLFS_ROOT}/etc/network/interfaces <<'EOF'
    185 auto lo
    186 iface lo inet loopback
    187 iface lo inet6 loopback
    188 
    189 auto eth0
    190 iface eth0 inet dhcp
    191 iface eth0 inet6 dhcp
    192 EOF
    193 
    194 cat > ${CLFS_ROOT}/usr/share/udhcpc/default.script <<'EOF'
    195 #!/bin/sh
    196 # udhcpc Interface Configuration
    197 # Based on http://lists.debian.org/debian-boot/2002/11/msg00500.html
    198 # udhcpc script edited by Tim Riker <Tim@Rikers.org>
    199 
    200 [ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1
    201 
    202 RESOLV_CONF="/etc/resolv.conf"
    203 [ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
    204 [ -n "$subnet" ] && NETMASK="netmask $subnet"
    205 
    206 case "$1" in
    207 	deconfig)
    208 		/sbin/ifconfig $interface 0.0.0.0
    209 		;;
    210 
    211 	renew|bound)
    212 		/sbin/ifconfig $interface $ip $BROADCAST $NETMASK
    213 
    214 		if [ -n "$router" ] ; then
    215 			while route del default gw 0.0.0.0 dev $interface ; do
    216 				true
    217 			done
    218 
    219 			for i in $router ; do
    220 				route add default gw $i dev $interface
    221 			done
    222 		fi
    223 
    224 		echo -n > $RESOLV_CONF
    225 		[ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
    226 		for i in $dns ; do
    227 			echo nameserver $i >> $RESOLV_CONF
    228 		done
    229 		;;
    230 esac
    231 
    232 exit 0
    233 EOF
    234 
    235 chmod +x ${CLFS_ROOT}/usr/share/udhcpc/default.script
    236