ZeroC-IceE para el Chumby

ChumbyIcenetworking

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 Sticking out tongue

Ingredientes (para todos los Chumbys Smiling)

  • 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:

CHROOT@Chumby:~# apt-get update
CHROOT@Chumby:~# 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:
      Depende: slice2cppe pero no va a instalarse
      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…):

CHROOT@Chumby:~# 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
CHROOT@Chumby:~# echo “deb http://ftp.es.debian.org/debian/ lenny main contrib non-free” >> /etc/apt/sources.list
CHROOT@Chumby:~# apt-get update
CHROOT@Chumby:~# 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 ‘<’ 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 ‘<’ 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? Sticking out tongue

Compilar IceE

Ahora toca la parte más jugosa Smiling. 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.

CHROOT@Chumby: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 Eye-wink

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

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

Y listo. Ya puedes hacer el esperado make

CHROOT@Chumby:zeroc-icee-1.2.0# make
CHROOT@Chumby:zeroc-icee-1.2.0# make install

Probando… un, dos…

Si tarda mucho la compilación, haztelo mirar, eso no es normal Sticking out tongue 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/ Smiling

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Bug en Sid

Pues ya que te has tirado el rollo en escribir la receta y tal, digo yo que por el mismo precio podías reportar el bug que has encontrado al bts de Debian ¿no? Smiling

Imagen de oscarah

Cierto

Es cierto, creo que deberia reportar el BUG. Harelo. Eye-wink

EDITADO: El bug ya esta reportado, y yo sin saberlo Shocked. Bug en zeroc-icee. Ya me extrañaba a mi...
_________________________________________________________________________________
"aviso: la dereferencia de punteros de tipo castigado romperá las reglas de alias estricto" --GCC 4.3.1

"aviso: la dereferencia de punteros de tipo castigado romperá las reglas de alias estricto" --GCC 4.3.1

Imagen de david.villa

Madre mía

que productividad! Yo creo que quieres ganar puntos para trabajar en ZeroC, o en Chumby... Sticking out tongue

Enhorabuena por la receta.

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.

Imagen de oscarah

Jajajaja...

es que estoy compitiendo con Lk2 para ver quien saca más recetas del Chumby... Sticking out tongue

Gracias por tu apreciación.
Un Salido... digo saludo.
_________________________________________________________________________________
"aviso: la dereferencia de punteros de tipo castigado romperá las reglas de alias estricto" -GCC 4.3.1-

"aviso: la dereferencia de punteros de tipo castigado romperá las reglas de alias estricto" --GCC 4.3.1

Imagen de Lk2

Sin color

Más que lo que me puedes sacar en una competición en esto... ¡madre mía!

Pedazo de receta. ¡¡¡Iceeeeee!!!! ¡Qué señor!

Imagen de oscarah

Ufff

"Al final me pongo colorado..." Pero si esto SÍ que es trivial!! Sticking out tongue Gracias por comentar, y te toca a ti ahora Eye-wink
_________________________________________________________________________________
"aviso: la dereferencia de punteros de tipo castigado romperá las reglas de alias estricto" -GCC 4.3.1-

"aviso: la dereferencia de punteros de tipo castigado romperá las reglas de alias estricto" --GCC 4.3.1

OpenSuse 11.0 y ICE ( ZeroC )

Yo tambien tenia ese problema compilando el Ice finalmente he pasado del gcc 4.3.1 a gcc 4.1 y todo ha funcionado.

En la pag de Ice pone que el gcc 4.3.1 no esta soportado asi que ...