Esto también tiene el problema que si compilamos para una arquitectura en concreto no podemos ejecutar ese programa en una máquina inferior, por ejemplo, no podemos instalar una distribución Mandrake en un 386
Aclarado esto, paso a explicar que la mayoría de distribuciones traen paquetes (rpm o deb) compilados para 386. El objetivo de este artículo es lograr construir paquetes optimizados para nuestra arquitectura
RPM
Aquí no hace falta que explique nada, el amigo Gorka Olaizola escribió hace mucho tiempo un mini-howto para generar paquetes rpm
El howto lo podemos encontrar en la página personal de Gorka (la versión 1.1 es más completa), aunque me suena haberlo visto también por el Insflug
DEB
DISCLAIMER: El procedimiento descrito aquí es meramente intuitivo ya que básicamente he intentado trasladar la idea de compilar un rpm y desconozco si es la forma correcta de realizarlo, como mínimo puedo asegurar que compila y se ejecuta ;)
En primer lugar leer el howto escrito para rpm ya que es la fuente de inspiración y hay algunos conceptos que se explican en él que yo no voy a tratar
Debemos bajar las fuentes del paquete que queremos compilar, para esto debemos tener en el fichero /etc/apt/sources.list una línea con la siguiente pinta:
deb-src ftp:/ftp.xx.debian.org/debian/ stable main non-free contrib
Donde xx es el mirror de debian que empleemos (es, fi, uk...) y stable se puede cambiar por testing o unstable.
Si el paquete es non-US el procedimiento es el mismo pero referenciando a un servidor non-US
Después del apt-get update de rigor haremos un apt-get source nombre_del_paquete en mi caso voy a emplear el paquete hello, que es un paquete para hacer pruebas
Una vez que hemos bajado el paquete tendremos un directorio hello-x.xx y tres ficheros hello-x.xx (.diff.gz, .dsc y .orig.tar.gz), a nosotros nos interesa el fichero hello-x.xx/debian/rules, por lo que usando nuestro editor favorito lo abrimos
Ahora viene la parte interesante, se trata de añadir a la variable CFLAGS o CXXFLAGS los paramétros de compilación de nuestra máquina. Para hacer esto debemos localizar la sección build: y añadir al make o al configure estas variables
En el paquete hello el fichero rules original tiene esta pinta
package=hello
build:
$(checkdir)
./configure --prefix=/usr
$(MAKE) CFLAGS=-O2 LDFLAGS=
touch build
...
Por ejemplo voy a compilar para un Pentium de forma que el fichero rules me quedará así:
package=hello
build:
$(checkdir)
./configure --prefix=/usr
$(MAKE) CFLAGS="-O2 -fomit-frame-pointer \
-mpreferred-stack-boundary=2 -march=i586" -LDFLAGS=
touch build
...
Por último solo nos falta generar el paquete .deb correspondiente, para esto haremos nos iremos al directorio hello-x.xx y escribiremos dpkg-buildpackage después hacemos un cd .. y encontraremos el paquete hello-x.xx |