Linux From Scrach (Parte 4 - Construyendo un sistema temporal 2)

Seguimos creando nuestra propia distribución GNU/Linux con LFS como he prometido, ya vamos avanzando poco a poco, y en este momento vamos a continuar con el siguiente paquete. El Libstdc++ en su versión 8.1.0.

Así que vamos allá.


Libstdc++
Libstdc ++ es la biblioteca estándar de C++. Es necesario para el correcto funcionamiento del compilador g++.
Tiempo aproximado de compilación: 0.4 SBU
Tamaño de disco requerido: 752 MB
Libstdc ++ es parte de las fuentes de GCC. Y como acabamos de descomprimir el archivo, solo tenemos que crear el directorio build, y luego entrar en el.

mkdir -v build
cd build
Preparamos para la compilación:
../libstdc++-v3/configure           \
    --host=$LFS_TGT                 \
    --prefix=/tools                 \
    --disable-multilib              \
    --disable-nls                   \
    --disable-libstdcxx-threads     \
    --disable-libstdcxx-pch         \
    --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/8.1.0
Una vez configurado, compilamos
make
Y ahora lo instalamos.
make install
Una vez instalado, y sin problemas...
Salimos hasta quedarnos en el directorio sources.
cd ../..

 

Binutils-2.30 - 2º paso
El paquete Binutils contiene un enlazador, un ensamblador y otras herramientas para manejar archivos de objetos.
Tiemo aproximado de compilación: 1.1 SBU
Tamaño de disco requerido: 574 MB
cd binutils-2.30
Creamos un directorio build, como en el paso anterior de binutils, y entramos en él.
mkdir -v build 
cd build
Lo preparamos para compilación:
CC=$LFS_TGT-gcc                \
AR=$LFS_TGT-ar                 \
RANLIB=$LFS_TGT-ranlib         \
../configure                   \
    --prefix=/tools            \
    --disable-nls              \
    --disable-werror           \
    --with-lib-path=/tools/lib \
    --with-sysroot
Compilamos:
make
Instalamos:
make install
Ahora preparamos el vinculador para la fase "reajuste" en el siguiente paso:
make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin
Salimos hasta quedarnos en el directorio sources.
cd ../.. 


GCC-8.1.0 - 2º Paso
El paquete GCC contiene la colección del compilador GNU, que incluye los compiladores C y C ++.

Tiempo aproximado de compilación: 11 SBU
Tamaño de disco requerido: 2.6 GB
Nuestra primera compilación de GCC ha instalado un par de encabezados internos del sistema. Normalmente, uno de ellos, limits.h, incluirá a su vez el límite del sistema correspondiente.h header, en este caso, /tools/include/limits.h. Sin embargo, en el momento de la primera compilación de gcc /tools/include/limits.h no existía, por lo que el encabezado interno que GCC instaló es un archivo parcial e independiente y no incluye las características extendidas del encabezado del sistema. Esto fue adecuado para construir la libc temporal, pero esta compilación de GCC requiere ahora el encabezado interno completo. Cree una versión completa del encabezado interno usando un comando que sea idéntico al que hace el sistema de compilación de GCC en circunstancias normales:
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include-fixed/limits.h
Una vez más, cambie la ubicación del enlazador dinámico predeterminado de GCC para usar el que está instalado en / tools.
Si se basa en x86_64, cambie el nombre del directorio predeterminado para las bibliotecas de 64 bits a "lib":
case $(uname -m) in
  x86_64)
    sed -e '/m64=/s/lib64/lib/' \
        -i.orig gcc/config/i386/t-linux64
  ;;
esac
Al igual que en la primera compilación de GCC, requiere los paquetes GMP, MPFR y MPC. Desempaquete los archivos tar y muévalos a los nombres de directorio requeridos:
tar -xf ../mpfr-4.0.1.tar.xz
mv -v mpfr-4.0.1 mpfr
tar -xf ../gmp-6.1.2.tar.xz
mv -v gmp-6.1.2 gmp
tar -xf ../mpc-1.1.0.tar.gz
mv -v mpc-1.1.0 mpc
Y ahora creamos el directorio build, y entamos a verlo:
mkdir -v build 
cd build
Configuramos el paquete:
CC=$LFS_TGT-gcc                                    \
CXX=$LFS_TGT-g++                                   \
AR=$LFS_TGT-ar                                     \
RANLIB=$LFS_TGT-ranlib                             \
../configure                                       \
    --prefix=/tools                                \
    --with-local-prefix=/tools                     \
    --with-native-system-header-dir=/tools/include \
    --enable-languages=c,c++                       \
    --disable-libstdcxx-pch                        \
    --disable-multilib                             \
    --disable-bootstrap                            \
    --disable-libgomp
Compilamos el paquete:
make
Y ahora lo instalamos:
make install
Como toque final, creamos un enlace simbólico. Muchos programas y scripts ejecutan CC en lugar de GCC, que se usa para mantener los programas genéricos y, por lo tanto, utilizables en todo tipo de sistemas UNIX donde el compilador GNU C no siempre está instalado. La ejecución de CC deja libre al administrador del sistema para decidir qué compilador de C instalar:
ln -sv gcc /tools/bin/cc

¡ PRECAUCIÓN !Nuvola apps important yellow
En este punto, es imprescindible detenerse y garantizar que las funciones básicas (compilación y enlace) de la nueva cadena de herramientas funcionen como se esperaba. Para realizar una comprobación de cordura, ejecute los siguientes comandos: 
echo 'int main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /tools'
Si todo funciona correctamente, no debería haber errores, y la salida del último comando será de la siguiente forma:
[Requesting program interpreter: /tools/lib64/ld-linux-x86-64.so.2]
Tenemos que tener en cuenta que el enlazador dinámico será /tools/lib/ld-linux.so.2 para máquinas de 32 bits.
Si la salida no se muestra como arriba o no hubo salida, entonces algo está mal. Investigaremos y volvemos sobre los pasos para descubrir dónde está el problema y corregirlo. Este problema debe resolverse antes de continuar. 

En primer lugar, realizar la comprobación de validez de nuevo, usando gcc en lugar de cc. Si esto funciona, entonces falta el enlace simbólico /tools/bin/cc. Instale el enlace simbólico como se indica arriba. A continuación, asegúrese de que la RUTA sea correcta. Esto puede comprobarse ejecutando echo $PATH y verificando que /tools/bin esté a la cabeza de la lista. Si la RUTA es incorrecta, podría significar que no ha iniciado sesión como usuario lfs o que algo salió mal en el paso "Configuración del entorno".

Si todo está bien, podemos continuar.
Salimos del directorio hasta llegar al directorio sources:
cd ../..

Tcl-8.6.8 
El paquete Tcl contiene la Herramienta de Comando de Idioma.
Tiempo aproximado de compilación: 0.8 SBU
Tamaño de disco requerido: 66 MB
Este paquete y los siguientes dos (Expect y DejaGNU) están instalados para permitir la ejecución de suites de prueba para GCC, Binutils y otros paquetes. La instalación de tres paquetes para fines de prueba puede parecer excesiva, pero es muy tranquilizador, si no esencial, saber que las herramientas más importantes funcionan correctamente.
Estando en el directorio /mnt/lfs/sources, descomprimimos el paquete Tcl:
tar -xvf tcl8.6.8-src.tar.gz
Entramos en el directorio que nos ha creado:
cd  tcl8.6.8

Preparamos Tcl para compilación:
cd unix 
./configure --prefix=/tools
Construimos el paquete:
make 
La compilación ahora está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatorio para las herramientas temporales en este paso. Para ejecutar el conjunto de pruebas de Tcl de todos modos, ejecuta el siguiente comando:
TZ=UTC make test
El conjunto de pruebas de Tcl puede experimentar fallas bajo ciertas condiciones de host que no se comprenden completamente. Por lo tanto, las fallas de la serie de pruebas aquí no son sorprendentes y no se consideran críticas. El parámetro TZ=UTC establece la zona horaria en Tiempo Universal Coordinado (UTC), pero solo durante la ejecución del conjunto de pruebas. Esto asegura que las pruebas de reloj se ejercen correctamente. 

Instalamos el paquete:
make install 
Hacemos que la biblioteca instalada sea editable para que los símbolos de depuración puedan eliminarse más adelante:
chmod -v u+w /tools/lib/libtcl8.6.so
Instala los encabezados de Tcl. El siguiente paquete, Expect, los requiere para que se construya.
make install-private-headers
 Ahora hacemos un enlace simbólico necesario:
ln -sv tclsh8.6 /tools/bin/tclsh
Salimos del directorio hasta situarnos en el directorio build.
cd ../..

Expect-5.45.4
El paquete Expect contiene un programa para llevar a cabo diálogos con guiones con otros programas interactivos.
Tiempo aproximado de compilación: 0.1 SBU
Tamaño de disco requerido: 3.9 MB
Descomprimimos el paquete Expect:
tar -xvf expect5.45.4.tar.gz
Entramos en el directorio que acabamos de extraer:
cd expect5.45.4
Primero, forzamos la secuencia de comandos de configuración de Expect para usar /bin/stty en lugar de /usr/local/bin/stty que pueda encontrar en el sistema host. Esto asegurará que nuestras herramientas de suite de pruebas permanezcan sanas para las versiones finales de nuestra cadena de herramientas:
cp -v configure{,.orig}
sed 's:/usr/local/bin:/bin:' configure.orig > configure
 Ahora preparamos Expect para compilar:
./configure --prefix=/tools       \
            --with-tcl=/tools/lib \
            --with-tclinclude=/tools/include
Construimos el paquete:
make
La compilación ahora está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatorio para las herramientas temporales en este paso. Para ejecutar el conjunto de pruebas Expect de todos modos, ejecutamos el siguiente comando:
make test 
Tenemos que tener en cuenta que se sabe que el paquete de pruebas Expect experimenta fallos bajo ciertas condiciones de host que no están bajo nuestro control. Por lo tanto, los fallos de la suite de prueba aquí no son sorprendentes y no se consideran críticas.

Instalamos el paquete:
make SCRIPTS="" install
Salimos del directorio hasta quedarnos en el directorio sources:
cd .. 

DejaGNU-1.6.1
El paquete DejaGNU contiene un "framework" para probar otros programas.
Tiempo aproximado de compilación: menos de 0.1 SBU
Tamaño de disco requerido: 3.2 MB
Descomprimimos el paquete dejagnu:
tar -xvf dejagnu-1.6.1.tar.gz
Entramos en el directorio:
cd dejagnu-1.6.1
Preparamos el paquete:
./configure --prefix=/tools
 Construimos e instalamos el paquete:
make install
Probamos los resultados:
make check
Salimos del directorio:
cd ..
Y lo dejamos hasta la siguiente publicación.
¡Espero que os esté gustando, y hasta la próxima!

Entradas populares de este blog

Acerca de los mensajes de tipo... "Por favor no agreges a este usuario es un virus!"

Temas oficiales para Windows XP

Activar tema Negro (gris oscuro) en Microsoft Office 2016