On Mon, Mar 21, 2011 at 06:13:12PM +0800, Shuxiang Lim wrote: > Hi, I open this new thread to clearly describe my condition: >
did you notice the post mentioning glib is actually part of android since it's used for bluetooth? maybe you can find out which version / where the headers / libs are and just link with it? I am trying to setup an environment according to your instructions but I don't have any hw to test with. It will take me some time though. Alon > 1.I use the android NDK provided by Mozzila which has nearly full C++ > support: > http://ftp.mozilla.org/pub/mozilla.org/mobile/source/android-ndk-r4c-0moz3.tar.bz2 > and I have modified Andrew Ross's agcc to partner with this NDK: > http://blog.csdn.net/rozenix/archive/2011/02/28/6212994.aspx > > 2. Then I cross compile glib2.28.1 onto Android in this order: > 1)libiconv-1.13.1.tar.gz: > configured by: > *CC=agcc CXX=agcc LD=arm-eabi-ld RANLIB=arm-eabi-ranlib \ > PKG_CONFIG_LIBDIR=/data/local/lib/pkgconfig:/data/local/share/pkgconfig/ \ > ./configure \ > --prefix=/data/local \ > --host=arm-eabi-linux \** > --enable-malloc0returnsnull \* > * --enable-shared \* > 2)gettext-0.18.1.1.tar.gz > configured by: > *CC=agcc CPPFLAGS="-I/data/local/include" LDFLAGS="-L/data/local/lib" > CXX=agcc LD=arm-eabi-ld RANLIB=arm-eabi-ranlib \ > PKG_CONFIG_LIBDIR=/data/local/lib/pkgconfig:/data/local/share/pkgconfig/ \ > ./configure \ > --prefix=/data/local \ > --host=arm-eabi-linux \ > --enable-malloc0returnsnull \ > --enable-shared \ > --cache-file=arm.cache \ > --without-included-regex \ > --disable-java --disable-openmp --without-libiconv-prefix > --without-libintl-prefix --without-libglib-2.0-prefix > --without-libcroco-0.6-prefix --with-included-libxml > --without-libncurses-prefix --without-libtermcap-prefix > --without-libcurses-prefix --without-libexpat-prefix --without-emacs > * But the build of gettext will not fully succeed,never mind, I need only > libintl.so so just make install. > > 3) glib-2.28.1.tar.gz > 1st, do patching with my attached file(these are all that I found that have > to be modified) > 2nd, write this into the cache file arm.cache: > *glib_cv_stack_grows=no** > glib_cv_uscore=no > ac_cv_func_posix_getpwuid_r=no > ac_cv_func_posix_getgrgid_r=no* > 3rd, configured the same as libiconv. > 4th, remove the -lpthread in gthread/Makefile. > 5td, make;make install > > 3. Also I have to port pixman and openssl onto android. > 1)pixman-0.20.0: config. make;make install same as libiconv > 2)openssl-1.0.0: config by: > ./config no-asm shared --prefix=/data/local/ > then modify the Makefile:gcc-->agcc remove the -m64..etc. > make... > > 3. So I disable the audio channels and build snappy onto android with this > script under spice-gtk/gtk: > #!/bin/bash > COMMON_DIR=../common > SPICE_GLIB_SRC="coroutine_gthread.c spice-util.c spice-session.c > spice-channel.c spice-glib-enums.c spice-marshal.c generated_demarshallers.c > generated_demarshallers1.c generated_marshallers.c generated_marshallers1.c > gio-coroutine.c channel-base.c channel-main.c channel-display.c > channel-display-mjpeg.c channel-cursor.c channel-inputs.c decode-glz.c > decode-jpeg.c decode-zlib.c $COMMON_DIR/mem.c $COMMON_DIR/marshaller.c > $COMMON_DIR/canvas_utils.c $COMMON_DIR/sw_canvas.c > $COMMON_DIR/pixman_utils.c $COMMON_DIR/lines.c $COMMON_DIR/rop3.c > $COMMON_DIR/quic.c $COMMON_DIR/lz.c $COMMON_DIR/region.c > $COMMON_DIR/ssl_verify.c" > CPP_FLAGS="-DHAVE_CONFIG_H -DSW_CANVAS_CACHE -D_REENTRANT -I. -I.. > -I../common -I/data/local/include/spice-1 -I/data/local/include/pixman-1 > -I/data/local/include -I/data/local/include/glib-2.0 > -I/data/local/lib/glib-2.0/include" > C_FLAGS="-std=gnu99 -Wall -Wno-sign-compare -Wno-deprecated-declarations > -Wl,--no-undefined -fPIC -DPIC " > LD_FLAGS="-L/data/local/lib/ -lpixman-1 -lm -lssl -lcrypto -ljpeg -lz > -lglib-2.0 -lgio-2.0 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 " > echo "agcc -shared -o libspicec_glib.so $SPICE_GLIB_SRC $CPP_FLAGS $C_FLAGS > $LD_FLAGS" > agcc -shared -o libspicec.so $SPICE_GLIB_SRC $CPP_FLAGS $C_FLAGS $LD_FLAGS > agcc -o snappy spice-cmdline.c snappy.c -DG_LOG_DOMAIN=\"GSpice\" > -DSW_CANVAS_CACHE -DSPICE_GTK_LOCALEDIR=\"/usr/local/share/locale\" > $CPP_FLAGS $C_FLAGS $LD_FLAGS -lspicec -lintl -liconv -L./ > > then I put all the snappy,libspicec.so,lib*so onto android dev. and > reproduce the faults. > Thanks. > --- glib-2.28.1/glib/gstrfuncs.c 2011-02-16 10:55:33.000000000 +0800 > +++ aglib-2.28.1/glib/gstrfuncs.c 2011-03-21 16:33:18.000000000 +0800 > @@ -442,8 +442,12 @@ g_ascii_strtod (const gchar *nptr, > > fail_pos = NULL; > > +#ifdef ANDROID > + decimal_point = "."; > +#else > locale_data = localeconv (); > decimal_point = locale_data->decimal_point; > +#endif > decimal_point_len = strlen (decimal_point); > > g_assert (decimal_point_len != 0); > @@ -656,8 +660,12 @@ g_ascii_formatd (gchar *buffer, > > _g_snprintf (buffer, buf_len, format, d); > > +#ifdef ANDROID > + decimal_point = "."; > +#else > locale_data = localeconv (); > decimal_point = locale_data->decimal_point; > +#endif > decimal_point_len = strlen (decimal_point); > > g_assert (decimal_point_len != 0); > --- glib-2.28.1/glib/gutils.c 2011-02-11 23:23:13.000000000 +0800 > +++ aglib-2.28.1/glib/gutils.c 2011-03-21 17:08:09.000000000 +0800 > @@ -29,6 +29,9 @@ > */ > > #include "config.h" > +#ifdef ANDROID > +#undef HAVE_PWD_H > +#endif > > #ifdef HAVE_UNISTD_H > #include <unistd.h> > --- glib-2.28.1/gio/libasyncns/asyncns.c 2010-04-13 21:33:16.000000000 > +0800 > +++ aglib-2.28.1/gio/libasyncns/asyncns.c 2011-03-21 17:11:43.000000000 > +0800 > @@ -18,6 +18,30 @@ > <http://www.gnu.org/licenses/>. > ***/ > > +#ifdef ANDROID > +typedef struct { > + unsigned id :16; /*%< query identification number */ > + /* fields in third byte */ > + unsigned rd :1; /*%< recursion desired */ > + unsigned tc :1; /*%< truncated message */ > + unsigned aa :1; /*%< authoritive answer */ > + unsigned opcode :4; /*%< purpose of message */ > + unsigned qr :1; /*%< response flag */ > + /* fields in fourth byte */ > + unsigned rcode :4; /*%< response code */ > + unsigned cd: 1; /*%< checking disabled by resolver */ > + unsigned ad: 1; /*%< authentic data from named */ > + unsigned unused :1; /*%< unused bits (MBZ as of 4.9.3a3) */ > + unsigned ra :1; /*%< recursion available */ > + /* remaining bytes */ > + unsigned qdcount :16; /*%< number of question entries */ > + unsigned ancount :16; /*%< number of answer entries */ > + unsigned nscount :16; /*%< number of authority entries */ > + unsigned arcount :16; /*%< number of resource entries */ > +} HEADER; > +#endif > + > + > #ifdef HAVE_CONFIG_H > #include "g-asyncns.h" > #endif > @@ -57,6 +81,10 @@ > #include <inttypes.h> > #endif > > +#ifdef ANDROID > +#undef HAVE_SYS_PRCTL_H > +#endif > + > #ifdef HAVE_SYS_PRCTL_H > #include <sys/prctl.h> > #endif > --- glib-2.28.1/gio/gresolver.c 2011-02-11 23:23:11.000000000 +0800 > +++ aglib-2.28.1/gio/gresolver.c 2011-03-21 16:42:18.000000000 +0800 > @@ -20,6 +20,61 @@ > * Boston, MA 02111-1307, USA. > */ > > +#ifdef ANDROID > +/*% > + * Inline versions of get/put short/long. Pointer is advanced. > + */ > +#define NS_INT32SZ 4 /*%< #/bytes of data in a u_int32_t */ > +#define NS_INT16SZ 2 /*%< #/bytes of data in a u_int16_t */ > +#define NS_GET16(s, cp) do { \ > + register const u_char *t_cp = (const u_char *)(cp); \ > + (s) = ((u_int16_t)t_cp[0] << 8) \ > + | ((u_int16_t)t_cp[1]) \ > + ; \ > + (cp) += NS_INT16SZ; \ > +} while (0) > +#define NS_GET32(l, cp) do { \ > + register const u_char *t_cp = (const u_char *)(cp); \ > + (l) = ((u_int32_t)t_cp[0] << 24) \ > + | ((u_int32_t)t_cp[1] << 16) \ > + | ((u_int32_t)t_cp[2] << 8) \ > + | ((u_int32_t)t_cp[3]) \ > + ; \ > + (cp) += NS_INT32SZ; \ > +} while (0) > + > + > +#define GETSHORT NS_GET16 > +#define GETLONG NS_GET32 > + > +#define ns_c_in 1 /*%< Internet. */ > +#define ns_t_srv 33 /*%< Internet. */ > +#define C_IN ns_c_in > +#define T_SRV ns_t_srv > + > +typedef struct { > + unsigned id :16; /*%< query identification number */ > + /* fields in third byte */ > + unsigned rd :1; /*%< recursion desired */ > + unsigned tc :1; /*%< truncated message */ > + unsigned aa :1; /*%< authoritive answer */ > + unsigned opcode :4; /*%< purpose of message */ > + unsigned qr :1; /*%< response flag */ > + /* fields in fourth byte */ > + unsigned rcode :4; /*%< response code */ > + unsigned cd: 1; /*%< checking disabled by resolver */ > + unsigned ad: 1; /*%< authentic data from named */ > + unsigned unused :1; /*%< unused bits (MBZ as of 4.9.3a3) */ > + unsigned ra :1; /*%< recursion available */ > + /* remaining bytes */ > + unsigned qdcount :16; /*%< number of question entries */ > + unsigned ancount :16; /*%< number of answer entries */ > + unsigned nscount :16; /*%< number of authority entries */ > + unsigned arcount :16; /*%< number of resource entries */ > +} HEADER; > +#endif > + > + > #include "config.h" > #include <glib.h> > #include "glibintl.h" > --- glib-2.28.1/gio/gthreadedresolver.c 2011-02-11 23:23:12.000000000 > +0800 > +++ aglib-2.28.1/gio/gthreadedresolver.c 2011-03-21 16:44:29.000000000 > +0800 > @@ -20,6 +20,60 @@ > * Boston, MA 02111-1307, USA. > */ > > +#ifdef ANDROID > +/*% > + * Inline versions of get/put short/long. Pointer is advanced. > + */ > +#define NS_INT32SZ 4 /*%< #/bytes of data in a u_int32_t */ > +#define NS_INT16SZ 2 /*%< #/bytes of data in a u_int16_t */ > +#define NS_GET16(s, cp) do { \ > + register const u_char *t_cp = (const u_char *)(cp); \ > + (s) = ((u_int16_t)t_cp[0] << 8) \ > + | ((u_int16_t)t_cp[1]) \ > + ; \ > + (cp) += NS_INT16SZ; \ > +} while (0) > +#define NS_GET32(l, cp) do { \ > + register const u_char *t_cp = (const u_char *)(cp); \ > + (l) = ((u_int32_t)t_cp[0] << 24) \ > + | ((u_int32_t)t_cp[1] << 16) \ > + | ((u_int32_t)t_cp[2] << 8) \ > + | ((u_int32_t)t_cp[3]) \ > + ; \ > + (cp) += NS_INT32SZ; \ > +} while (0) > + > + > +#define GETSHORT NS_GET16 > +#define GETLONG NS_GET32 > + > +#define ns_c_in 1 /*%< Internet. */ > +#define ns_t_srv 33 /*%< Internet. */ > +#define C_IN ns_c_in > +#define T_SRV ns_t_srv > + > + typedef struct { > + unsigned id :16; /*%< query identification number */ > + /* fields in third byte */ > + unsigned rd :1; /*%< recursion desired */ > + unsigned tc :1; /*%< truncated message */ > + unsigned aa :1; /*%< authoritive answer */ > + unsigned opcode :4; /*%< purpose of message */ > + unsigned qr :1; /*%< response flag */ > + /* fields in fourth byte */ > + unsigned rcode :4; /*%< response code */ > + unsigned cd: 1; /*%< checking disabled by resolver */ > + unsigned ad: 1; /*%< authentic data from named */ > + unsigned unused :1; /*%< unused bits (MBZ as of 4.9.3a3) */ > + unsigned ra :1; /*%< recursion available */ > + /* remaining bytes */ > + unsigned qdcount :16; /*%< number of question entries */ > + unsigned ancount :16; /*%< number of answer entries */ > + unsigned nscount :16; /*%< number of authority entries */ > + unsigned arcount :16; /*%< number of resource entries */ > + } HEADER; > +#endif > + > #include "config.h" > #include <glib.h> > #include "glibintl.h" > --- glib-2.28.1/gio/gunixresolver.c 2011-02-11 23:23:12.000000000 +0800 > +++ aglib-2.28.1/gio/gunixresolver.c 2011-03-21 16:45:01.000000000 +0800 > @@ -20,6 +20,62 @@ > * Boston, MA 02111-1307, USA. > */ > > +#ifdef ANDROID > +/*% > + * Inline versions of get/put short/long. Pointer is advanced. > + */ > +#define NS_INT32SZ 4 /*%< #/bytes of data in a u_int32_t */ > +#define NS_INT16SZ 2 /*%< #/bytes of data in a u_int16_t */ > +#define NS_GET16(s, cp) do { \ > + register const u_char *t_cp = (const u_char *)(cp); \ > + (s) = ((u_int16_t)t_cp[0] << 8) \ > + | ((u_int16_t)t_cp[1]) \ > + ; \ > + (cp) += NS_INT16SZ; \ > +} while (0) > +#define NS_GET32(l, cp) do { \ > + register const u_char *t_cp = (const u_char *)(cp); \ > + (l) = ((u_int32_t)t_cp[0] << 24) \ > + | ((u_int32_t)t_cp[1] << 16) \ > + | ((u_int32_t)t_cp[2] << 8) \ > + | ((u_int32_t)t_cp[3]) \ > + ; \ > + (cp) += NS_INT32SZ; \ > +} while (0) > + > + > +#define GETSHORT NS_GET16 > +#define GETLONG NS_GET32 > + > +#define ns_c_in 1 /*%< Internet. */ > +#define ns_t_srv 33 /*%< Internet. */ > +#define C_IN ns_c_in > +#define T_SRV ns_t_srv > + > + typedef struct { > + unsigned id :16; /*%< query identification number */ > + /* fields in third byte */ > + unsigned rd :1; /*%< recursion desired */ > + unsigned tc :1; /*%< truncated message */ > + unsigned aa :1; /*%< authoritive answer */ > + unsigned opcode :4; /*%< purpose of message */ > + unsigned qr :1; /*%< response flag */ > + /* fields in fourth byte */ > + unsigned rcode :4; /*%< response code */ > + unsigned cd: 1; /*%< checking disabled by resolver */ > + unsigned ad: 1; /*%< authentic data from named */ > + unsigned unused :1; /*%< unused bits (MBZ as of 4.9.3a3) */ > + unsigned ra :1; /*%< recursion available */ > + /* remaining bytes */ > + unsigned qdcount :16; /*%< number of question entries */ > + unsigned ancount :16; /*%< number of answer entries */ > + unsigned nscount :16; /*%< number of authority entries */ > + unsigned arcount :16; /*%< number of resource entries */ > + } HEADER; > +#endif > + > + > + > #include "config.h" > #include <glib.h> > #include "glibintl.h" > --- glib-2.28.1/gio/glocalfileinfo.c 2011-02-11 23:23:11.000000000 +0800 > +++ aglib-2.28.1/gio/glocalfileinfo.c 2011-03-21 16:55:10.000000000 +0800 > @@ -1096,7 +1096,11 @@ lookup_uid_data (uid_t uid) > if (pwbufp->pw_name != NULL && pwbufp->pw_name[0] != 0) > data->user_name = convert_pwd_string_to_utf8 (pwbufp->pw_name); > > +#ifdef ANDROID > + gecos = NULL; > +#else > gecos = pwbufp->pw_gecos; > +#endif > > if (gecos) > { > --- glib-2.28.1/gio/ginetaddress.c 2011-02-11 23:23:11.000000000 +0800 > +++ aglib-2.28.1/gio/ginetaddress.c 2011-03-21 16:55:45.000000000 +0800 > @@ -20,6 +20,27 @@ > * Authors: Christian Kellner <[email protected]> > * Samuel Cormier-Iijima <[email protected]> > */ > +#ifdef ANDROID > +#define IN6_IS_ADDR_MC_NODELOCAL(a) \ > + (IN6_IS_ADDR_MULTICAST(a) \ > + && ((((__const uint8_t *) (a))[1] & 0xf) == 0x1)) > + > +#define IN6_IS_ADDR_MC_LINKLOCAL(a) \ > + (IN6_IS_ADDR_MULTICAST(a) \ > + && ((((__const uint8_t *) (a))[1] & 0xf) == 0x2)) > + > +#define IN6_IS_ADDR_MC_SITELOCAL(a) \ > + (IN6_IS_ADDR_MULTICAST(a) \ > + && ((((__const uint8_t *) (a))[1] & 0xf) == 0x5)) > + > +#define IN6_IS_ADDR_MC_ORGLOCAL(a) \ > + (IN6_IS_ADDR_MULTICAST(a) \ > + && ((((__const uint8_t *) (a))[1] & 0xf) == 0x8)) > + > +#define IN6_IS_ADDR_MC_GLOBAL(a) \ > + (IN6_IS_ADDR_MULTICAST(a) \ > + && ((((__const uint8_t *) (a))[1] & 0xf) == 0xe)) > +#endif > > #include <config.h> > > _______________________________________________ > Spice-devel mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/spice-devel _______________________________________________ Spice-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/spice-devel
