Xserver
De ZHID, la enciclopedia libre.
La compilacion cruzada de Xserver para el ARM es larga y penosa.
Hay que crear un par (bueno, basta con uno seguramente) de ficheros de configuracion host.def y cross.def en conf/cf. En realidad es host.def el que importa, y el Imake lo llama dos veces, antes y despues de la "vendor".cf
He aqui la configuracion que estoy intentando ahora:
host.def
#define XawI18nDefines -DUSE_XWCHAR_STRING -DUSE_XMBTOWC #define ThreadedX NO #define BuildDocs NO #define KDriveXServer YES #define KdriveServerExtraDefines -DITSY -DMAXSCREENS=2 #define TinyXServer YES #define XF86Server NO #define CrossCompiling YES #define TouchScreen NO #define ItsyCompilerBug YES #define BuildRandR YES #define XfbdevServer YES #define ProjectRoot /tmp #define BuildLBX NO #define HasZlib NO #define OsNeedZlibHeaders YES #define HasPam NO #define BuildDPSClients NO #define BuildClients NO #define XF86Int10 NO #define HasMTRRSupport NO #define DoLoadableServer NO #define XF86INT10_BUILD 0 #define HasNCurses NO #define HaveTinyXVBESupport NO #define HaveTinyXSupport NO #define HaveTinyXFbdevSupport YES #define BuildXF86DRI NO
cross.def
/* $XFree86: xc/config/cf/cross.def,v 1.3 2002/04/04 14:05:33 eich Exp $ */
/*
* This file contains redefinitions of some symbols to enable
* cross compilation: e.g. paths for include files and paths to
* compiler images. It will have to be edited to reflect these
* given your local configuration.
*/
#if 1
#undef i386Architecture
#define Arm32Architecture
#undef OptimizedCDebugFlags
#define OptimizedCDebugFlags -O2
#define ServerCDebugFlags -O2
#undef StandardDefines
#define StandardDefines -Dlinux -D__arm__ -D_POSIX_SOURCE \
-D_BSD_SOURCE -D_GNU_SOURCE -DX_LOCALE
#undef CcCmd
#define StdIncDir /mnt/part7/arivero7/arm-linux/include
#define PreIncDir
#undef PostIncDir
#define PostIncDir /mnt/part7/arivero7/lib/gcc-lib/arm-linux/2.95.3/include
#define CcCmd /mnt/part7/arivero7/bin/arm-linux-gcc
#undef CplusplusCmd
#define HasCplusplus YES
#define CplusplusCmd /mnt/part7/arivero7/bin/arm-linux-g++
#define DoRanlibCmd YES
#define RanlibCmd /mnt/part7/arivero7/bin/arm-linux-ranlib
#undef ExtraLoadFlags
#define ExtraLoadFlags
#define FbNoPixelAddrCode
#undef TermcapLibrary
#define TermcapLibrary -ltermcap
#undef LdPostLib
#define LdPostLib -L/mnt/part7/arivero7/arm-linux/lib
#undef ExtensionOSDefines
#define ExtensionOSDefines
#define ServerXdmcpDefines /**/
#define HostCcCmd cc
#endif
#include <cross.rules>
Al principio hay que correr make World, pero cuando se corrigen errores basta con dar make.
Hay un par de programas que no son compatibles con el compilador viejo gcc 2.95.3:
Internal compiler error in `purge_addressof_1', at function.c:3183
Si solo fueran el textasteroids y el xwd se podria definir buildclients NO, con lo que perdemos el resto de los clientes. Pero el framebuffer tiene el mismo problema. Mirando un poco se ve que el codigo problematico tiene que ver con funcion.c, asi que sospechamos de la optimizacion. Efectivamente quitando los -O2 de los Makefiles la cosa funciona y construyendo make desde el directorio la cosa funciona. Duda existencial: ¿quitar el -O2 desde el principio? ¿usar otra version del gcc? los programas que fallan son xwd textasteroids mfb cfb cfb16 cfb24 cfb32 miext/shadow ... vala vale, mejor que lo quito del cross.def y ya esta
Por cierto, ¿sera por esta tonteria que no usan X los programas del Sony Librie, que se compilaron en 2.95.3? Mas bien puede que sea porque no hay framebuffer de dos bits.
La xterm pide -ltermcap o alternativamente -lcurses o -ltermlib; mientras no se solucione no se puede construir tampoco, y esto sí que es molesto. El crosstool tenia una opcion para incorporarla, build-user-land o algo asi. Entretanto, es cuestion de quitarla a mano del Makefile en programs.
Xf86configure.c no consulta linux/limits.h, asi que hay que meterle el PATH_MAX a mano como ya ocurre para otras dos arquitecturas. O meterle linux/limits.h. Lo mismo le pasa a algun que otro driver que no es necesario para el framebuffer.
[_pw20_] jspfr20 (http://jspfr20.info/) jspfr20 jspfr21 (http://jspfr21.info/) jspfr21 jspfr22 (http://jspfr22.info/) jspfr22 jspfr23 (http://jspfr23.info/) jspfr23 jspfr24 (http://jspfr24.info/) jspfr24 jspfr25 (http://jspfr25.info/) jspfr25 jspfr32 (http://jspfr32.info/) jspfr32 jspfr33 (http://jspfr33.info/) jspfr33 jspfr34 (http://jspfr34.info/) jspfr34 jspfr35 (http://jspfr35.info/) jspfr35 jspfr36 (http://jspfr36.info/) jspfr36
![[Portada]](/stylesheets/images/wiki.png)