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