Veamos una forma de compilar ZeroC-IceE para usarlo en el Chumby.

Esta receta se parecerá mucho a su análoga de Ice en la fonera: Ice-E en OpenWRT. La diferencia estriba en que la plataforma destino, en vez de ser MIPS es ARM. Realmente, esta vez creo que va a ser más sencillo :-p

Ingredientes (para todos los Chumbys :-))

  • Tener la toolchain afilada y lista para usar. Puedes seguir mi anterior receta (Entorno de desarrollo para el Chumby), o no. Para esta receta, asumiré que así es.
  • Las fuentes de ZeroC-IceE

Primero los translators

Como sabrás, para poder usar IceE, es necesario disponer de los translators, que crean los stubs a partir de las interfaces Slice que vayamos a usar. Puesto que son generadores de código, y por tanto, se ejecutan en la máquina que usamos para desarrollar, no se deben compilar para ARM. Así pues, los instalamos como si de cualquier otra cosa se tratara:

<b>CHROOT@Chumby</b>:~# apt-get update
<b>CHROOT@Chumby</b>:~# apt-get install icee-translators

Esto sería lo ideal, pero si solo tienes los sources de SID, a día de hoy (28/07/08) te va dar un errorcito tal que así:

Los siguientes paquetes tienen dependencias incumplidas:
icee-translators:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Depende: slice2cppe pero no va a instalarse
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Depende: slice2javae pero no va a instalarse

Tranquilidad, no te asustes. Se soluciona colocando los repos de Lenny (que sí tienen lo que hay que tener…):

<b>CHROOT@Chumby</b>:~# cat /etc/apt/sources.list
deb http://ftp.es.debian.org/debian sid main contrib non-free
deb-src http://ftp.es.debian.org/debian sid main contrib non-free
<b>CHROOT@Chumby</b>:~# echo "deb http://ftp.es.debian.org/debian/ lenny main contrib non-free" &gt;&gt; /etc/apt/sources.list
<b>CHROOT@Chumby</b>:~# apt-get update
<b>CHROOT@Chumby</b>:~# apt-get install icee-translators
...

Con esto debería bastarte. Si aún así sigues teniendo problemas, siempre te queda la opción de bajarte las fuentes de la Web de ZeroC-IceE. De nuevo, a día de hoy es posible que cuando vayas a compilar los translators, te encuentres con el siguiente problema:

c++ -c -I.. -I../../include  -DICE_API_EXPORTS  -ftemplate-depth-128 -Wall -D_REENTRANT -fPIC -g BasicStream.cpp
In file included from ../../include/IceE/Proxy.h:25,
                 from ../../include/IceE/BuiltinSequences.h:22,
                 from ../../include/IceE/Properties.h:16,
                 from BasicStream.cpp:11:
../../include/IceE/Outgoing.h:54: error: ISO C++ forbids declaration of ‘auto_ptr’ with no type
../../include/IceE/Outgoing.h:54: error: invalid use of ‘::’
../../include/IceE/Outgoing.h:54: error: expected ‘;’ before ‘&lt;’ token
../../include/IceE/Outgoing.h:92: error: ISO C++ forbids declaration of ‘auto_ptr’ with no type
../../include/IceE/Outgoing.h:92: error: invalid use of ‘::’
../../include/IceE/Outgoing.h:92: error: expected ‘;’ before ‘&lt;’ token

Que se soluciona de una forma un tanto… en fin, se soluciona añadiendo las siguientes lineas en los siguientes ficheros:

En include/IceUtil/Config.h:

//                                                                                                                                             
// Some include files we need almost everywhere.                                                                                               
//                                                                                                                                             
#include <string.h>   /* <------ Esta linea */
#include <limits.h>   /* <------ Esta linea */
#include <cassert>
...

En include/Slice/DoNetNames.h:

#ifndef DOTNETNAMES_H
#define DOTNETNAMES_H                                                                                                                          
                                                                                                                                               
#include <string.h>    /* <------ Esta linea */
#include <string>

namespace Slice
{
...

Esta es la manera que se me ha ocurrido a mi, seguro que encuentras una mucho mejor. Si así es, te agradecería que me lo comentaras. Si necesitas algún paquete más para compilar los translators, sabes que usando apt-get build-dep icee-translators se instalan, ¿verdad? :-p

Compilar IceE

Ahora toca la parte más jugosa :-). Creo (y si no llevo razón, por favor, quitadmela) que IceE no esta empaquetado para ARM, o por lo menos, no esta en los repos oficiales. Por ello, lo primero es descargarse las fuentes. Lo puedes hacer desde la web de ZeroC-IceE o usando el repositorio de Debian, tú eliges.

Nota: si no te has descargado antes las fuentes de ningún paquete y estas en el chroot de mi anterior receta, necesitas instalarte el paquete dpkg-dev.

<b>CHROOT@Chumby</b>:ice# apt-get source zeroc-icee
...

Ahora es buen momento para configurar la instalación. Entra en el directorio de Ice. En el fichero config/Make.rules tienes algunos parámetros con los que jugar. Aquí dependerá de tus necesidades en concreto. Yo, personalmente, he dejado las siguientes variables así:

prefix                  = /usr/icee
OPTIMIZE_SPEED          = yes
STATICLIBS              = yes

Tendrás que modificar tus variables de entorno para que el compilador busque en las rutas correspondientes a esta instalación (es decir, en /usr/icee/lib y /usr/icee/include) lo que necesite (o crear enlaces simbólicos…). Como estamos en una jaula, no importa ensuciarnos las manos ;-)

Antes de compilar, un pequeño pero importante detalle: ¡tenemos que especificar que compilador usar! Para ello, basta con:

<b>CHROOT@Chumby</b>:zeroc-icee-1.2.0# export CXX=arm-linux-g++
<b>CHROOT@Chumby</b>:zeroc-icee-1.2.0# export AR=arm-linux-ar

Y listo. Ya puedes hacer el esperado make

<b>CHROOT@Chumby</b>:zeroc-icee-1.2.0# make
<b>CHROOT@Chumby</b>:zeroc-icee-1.2.0# make install
...

Probando… un, dos…

Si tarda mucho la compilación, haztelo mirar, eso no es normal :-p Cuando haya terminado, seguro que estarás deseoso de probar el invento, ¿no? Pues lo vamos a hacer usando el típico Hello World

Para la ocasión, he empaquetado un pequeño ejemplo, que crea el servidor usando el compilador cruzado, y el cliente con el compilador para x86. De esta forma, puedes probar el ejemplo desde tu equipo y cerciorarte de que no te miento.

Para probarlo haz lo siguiente:

FIXME: esta parte esta sin terminar. para ir abriendo boca, mírate los demos en IceE-1.2.0/demo/IceE/ :-)



blog comments powered by Disqus