public inbox for gentoo-embedded@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-embedded] Problem cross compiling modular X
@ 2006-07-06 11:05 Ryan Baldwin
  2006-07-06 12:02 ` Ryan Baldwin
                   ` (2 more replies)
  0 siblings, 3 replies; 16+ messages in thread
From: Ryan Baldwin @ 2006-07-06 11:05 UTC (permalink / raw
  To: gentoo-embedded

[-- Attachment #1: Type: text/plain, Size: 10411 bytes --]

Hi,

I have been trying to develop an embedded system using gentoo that can be
cross compiled. I have succeeded in building a busybox/uclibc based system
and PXE booting. I am now trying to emerge xorg-server but get the following
error:

      ./include/X11/Xauth.h:48:31: X11/Xfuncproto.h: No such file or
directory
      ./include/X11/Xauth.h:49:27: X11/Xfuncs.h: No such file or directory
      In file included from AuDispose.c:33:
      ./include/X11/Xauth.h:62: error: syntax error before "char"
      ./include/X11/Xauth.h:69: error: syntax error before "char"
      ./include/X11/Xauth.h:73: warning: function declaration isn't a
prototype
      ./include/X11/Xauth.h:76: error: syntax error before "char"
      ./include/X11/Xauth.h:77: warning: function declaration isn't a
prototype
      ./include/X11/Xauth.h:85: error: syntax error before "char"
      ./include/X11/Xauth.h:86: warning: function declaration isn't a
prototype
      ./include/X11/Xauth.h:96: error: syntax error before "_Xconst"
      ./include/X11/Xauth.h:109: warning: function declaration isn't a
prototype
      ./include/X11/Xauth.h:119: error: syntax error before "_Xconst"
      ./include/X11/Xauth.h:129: warning: function declaration isn't a
prototype
      In file included from AuDispose.c:34:
      /usr/i686-pc-linux-uclibc/usr/include/stdlib.h:97: error: syntax error
before "typedef"
      AuDispose.c: In function `XauDisposeAuth':
      AuDispose.c:45: warning: implicit declaration of function `bzero'
      AuDispose.c:45: warning: nested extern declaration of `bzero'
      make[1]: *** [AuDispose.lo] Error 1
      make[1]: Leaving directory
`/var/tmp/portage/libXau-1.0.1/work/libXau-1.0.1'
      make: *** [all] Error 2

      !!! ERROR: x11-libs/libXau-1.0.1 failed.
      Call stack:
        ebuild.sh, line 1539:   Called dyn_compile
        ebuild.sh, line 939:   Called src_compile
        ebuild.sh, line 1248:   Called x-modular_src_compile
        x-modular.eclass, line 327:   Called x-modular_src_make
        x-modular.eclass, line 322:   Called die



Prior to this it has just successfully emerged xproto which has installed
the header file that this package is not picking up. Also I can emerge
xorg-server in the host environment with problems.

During its configure it spits out



      ./configure --prefix=/usr --host=i686-pc-linux-uclibc
--mandir=/usr/share/man --infodir=/usr/share/info --datadir=/usr/share
--sysconfdir=/etc --localstatedir=/var/lib --prefix=/usr
--datadir=/usr/share --build=i686-pc-linux-gnu
      checking for a BSD-compatible install... /bin/install -c
      checking whether build environment is sane... yes
      checking for gawk... gawk
      checking whether make sets $(MAKE)... yes
      checking for i686-pc-linux-uclibc-strip... i686-pc-linux-uclibc-strip
      checking whether to enable maintainer-specific portions of
Makefiles... no
      checking for i686-pc-linux-uclibc-gcc... i686-pc-linux-uclibc-gcc
      checking for C compiler default output file name... a.out
      checking whether the C compiler works... yes
      checking whether we are cross compiling... yes




Here I am trying to compile on a host i686-pc-linux-gnu for a target
i686-pc-linux-uclibc. Is this right - from my understanding(not the best)
should have --host=i686-pc-linux-glibs -target= target i686-pc-linux-uclibc.
Anyhow to continue.

My procedure for building this system involves first setting up a chroot env
with a fresh portage and then using crossdev to build a toolchain and then
emerge to build. This is the script I use to build the chroot environment:





      RBCONFDIR=${RBTHEROOT}/conf/${1}
      RBMEDIADIR=${RBTHEROOT}/media
      RBBUILDROOT=${RBTHEROOT}/${1}_chroot

      . ${RBCONFDIR}/conf

      echo "Config Dir: ${RBCONFDIR}"

      echo "Making build root: ${RBBUILDROOT}"

      mkdir ${RBBUILDROOT}
      cd ${RBBUILDROOT}

      echo "Extracting files to build root."

      tar xjpf ${RBMEDIADIR}/stage3-i686-2006.0.tar.bz2
      tar xjf ${RBMEDIADIR}/portage-20060703.tar.bz2 -C ${RBBUILDROOT}/usr
      
      echo "Copying distfiles"
      cp ${RBMEDIADIR}/distfiles/* ${RBBUILDROOT}/usr/portage/distfiles/
      
      echo "Putting in place host make.conf"
      cp ${RBTHEROOT}/conf/make.conf ${RBBUILDROOT}/etc/
      
      echo "Copying DNS info"
      cp -L /etc/resolv.conf ${RBBUILDROOT}/etc/resolv.conf
      
      echo "Mounting proc filesystem"
      mount -t proc none ${RBBUILDROOT}/proc
      echo "Mounting dev filesystem"
      mount -o bind /dev ${RBBUILDROOT}/dev
      
      echo "Copying phase 2 build files"
      mkdir ${RBBUILDROOT}/p2build
      cp -r ${RBCONFDIR} ${RBBUILDROOT}/p2build/conf
      cp -r ${RBTHEROOT}/build_target/* ${RBBUILDROOT}/p2build/
      
      
      echo "Entering chroot"
      chroot ${RBBUILDROOT} bash /p2build/build-target
      



The preeceeding script source this . ${RBCONFDIR}/conf:
      



      MY_TARGET_ARCH=x86
      MY_TARGET_KERNEL_ARCH=i386
      MY_TARGET_CHOST=i686-pc-linux-uclibc
      MY_TARGET_CFLAGS="-Os -march=pentium4 -pipe -fomit-frame-pointer"
      MY_TARGET_USE="-* x86 mmx ssl theora threads tiff doc usb vcd vorbis
wifi win32codecs wmf xml2 xpm xv xvid bzlib ncurses pam zlib avi crypt
divx4linux ftp gd gif gmp gphoto2 gtk gtk2 imlib avi live matroska mpeg
oggvorbis             real theora xanim jpeg libwww mpeg msn opengl pdflib
png quicktime dri firebird flac gstreamer java kdeenablefinal libedit mikmod
mmap mng mp3 ogg sdl pdflib bash-completion bitmap-font truetype-fonts
spell tiff truetype usb xmms X a52 aac  qt kde dvd dvdr dlloader alsa cdr
nvidia nptl nptlonly pic"
      MY_TARGET_INPUT_DEVICES="keyboard mouse"
      MY_TARGET_VIDEO_CARDS="nvidia"




This all works OK. The last line enters the chroot env and executes the
following script:




      echo "Syncing source tree"
      #emerge --sync

      emerge xorg-server # This works so it builds ok in the host.


      echo "Merging cross dev"
      emerge -v crossdev

      echo "Fixing overlay"
      echo "PORTDIR_OVERLAY=\"/usr/local/portage\"" >> /etc/make.conf
      mkdir /usr/local/portage

      . /p2build/conf/conf

      echo "Creating cross toolchain: ${MY_TARGET_CHOST}"
      crossdev --binutils 2.16.1-r2 --gcc 3.4.5-r1 --libc 0.9.29 --kernel
2.6.17 -t $MY_TARGET_CHOST

      mkdir -p /tmp/target

      echo "sys-apps/baselayout-lite -*" >> /etc/portage/package.keywords

      PRET=

      echo "Creating kernel"

      mkdir /tmp/kernel

      echo "sys-kernel/vanilla-sources ~x86" >>
/etc/portage/package.keywords

      ROOT="/tmp/kernel" \
      ARCH="$MY_TARGET_ARCH" \
      CHOST="$MY_TARGET_CHOST" \
      CBUILD="i686-pc-linux-gnu" \
      CFLAGS="$MY_TARGET_CFLAGS" \
      CXXFLAGS="$MY_TARGET_CFLAGS" \
      INPUT_DEVICES="$MY_TARGET_INPUT_DEVICES" \
      VIDEO_CARDS="$MY_TARGET_VIDEO_CARDS" \
      USE="${MY_TARGET_USE}" \
      CONFIG_PROTECT="-* ${ROOT}/etc" \
       emerge $PRET -v --nodeps vanilla-sources
      
      cp -f /p2build/conf/.config /tmp/kernel/usr/src/linux/
      
      cd /tmp/kernel/usr/src/linux/
      
      ROOT="/tmp/kernel" \
      CROSS_COMPILE="${MY_TARGET_CHOST}-" \
      ARCH="$MY_TARGET_KERNEL_ARCH" \
      CHOST="$MY_TARGET_CHOST" \
      CBUILD="i686-pc-linux-gnu" \
      CFLAGS="$MY_TARGET_CFLAGS" \
      CXXFLAGS="$MY_TARGET_CFLAGS" \
      INPUT_DEVICES="$MY_TARGET_INPUT_DEVICES" \
      VIDEO_CARDS="$MY_TARGET_VIDEO_CARDS" \
      USE="${MY_TARGET_USE}" \
      CONFIG_PROTECT="-* ${ROOT}/etc" \
       make bzImage
      
      cd /
      
      
      echo "Creating rootfs"
      
      
      ROOT="/tmp/target" \
      ARCH="$MY_TARGET_ARCH" \
      CHOST="$MY_TARGET_CHOST" \
      CBUILD="i686-pc-linux-gnu" \
      CFLAGS="$MY_TARGET_CFLAGS" \
      CXXFLAGS="$MY_TARGET_CFLAGS" \
      INPUT_DEVICES="$MY_TARGET_INPUT_DEVICES" \
      VIDEO_CARDS="$MY_TARGET_VIDEO_CARDS" \
      USE="${MY_TARGET_USE} make-symlinks" \
      CONFIG_PROTECT="-* ${ROOT}/etc" \
       emerge $PRET -v busybox

      ROOT="/tmp/target" \
      ARCH="$MY_TARGET_ARCH" \
      CHOST="$MY_TARGET_CHOST" \
      CBUILD="i686-pc-linux-gnu" \
      CFLAGS="$MY_TARGET_CFLAGS" \
      CXXFLAGS="$MY_TARGET_CFLAGS" \
      INPUT_DEVICES="$MY_TARGET_INPUT_DEVICES" \
      VIDEO_CARDS="$MY_TARGET_VIDEO_CARDS" \
      USE="${MY_TARGET_USE}" \
      CONFIG_PROTECT="-* ${ROOT}/etc" \
       emerge $PRET -v baselayout-lite
      
      ROOT="/tmp/target" \
      ARCH="$MY_TARGET_ARCH" \
      CHOST="$MY_TARGET_CHOST" \
      CBUILD="i686-pc-linux-gnu" \
      CFLAGS="$MY_TARGET_CFLAGS" \
      CXXFLAGS="$MY_TARGET_CFLAGS" \
      INPUT_DEVICES="$MY_TARGET_INPUT_DEVICES" \
      VIDEO_CARDS="$MY_TARGET_VIDEO_CARDS" \
      USE="${MY_TARGET_USE}" \
      CONFIG_PROTECT="-* ${ROOT}/etc" \
       emerge $PRET -v cross-${MY_TARGET_CHOST}/uclibc
      
      cp /tmp/target/bin/busybox /bin/busybox

      ROOT="/tmp/target" \
      ARCH="$MY_TARGET_ARCH" \
      CHOST="$MY_TARGET_CHOST" \
      CBUILD="i686-pc-linux-gnu" \
      CFLAGS="$MY_TARGET_CFLAGS" \
      CXXFLAGS="$MY_TARGET_CFLAGS" \
      INPUT_DEVICES="$MY_TARGET_INPUT_DEVICES" \
      VIDEO_CARDS="$MY_TARGET_VIDEO_CARDS" \
      USE="${MY_TARGET_USE} make-symlinks" \
      CONFIG_PROTECT="-* ${ROOT}/etc" \
       emerge $PRET -v busybox

      ROOT="/tmp/target" \
      ARCH="$MY_TARGET_ARCH" \
      CHOST="$MY_TARGET_CHOST" \
      CBUILD="i686-pc-linux-gnu" \
      CFLAGS="$MY_TARGET_CFLAGS" \
      CXXFLAGS="$MY_TARGET_CFLAGS" \
      INPUT_DEVICES="$MY_TARGET_INPUT_DEVICES" \
      VIDEO_CARDS="$MY_TARGET_VIDEO_CARDS" \
      USE="${MY_TARGET_USE} make-symlinks" \
      CONFIG_PROTECT="-* ${ROOT}/etc" \
       emerge $PRET -v busybox



And this all works ok too. I can then use the built kernel and rootfs and
PXE boot it. The problem then comes when trying to emerge xorg-server. I do
the following:



      ROOT="/tmp/target" \
      ARCH="$MY_TARGET_ARCH" \
      CHOST="$MY_TARGET_CHOST" \
      CBUILD="i686-pc-linux-gnu" \
      CFLAGS="$MY_TARGET_CFLAGS" \
      CXXFLAGS="$MY_TARGET_CFLAGS" \
      INPUT_DEVICES="$MY_TARGET_INPUT_DEVICES" \
      VIDEO_CARDS="$MY_TARGET_VIDEO_CARDS" \
      USE="${MY_TARGET_USE} cross -doc" \
      CONFIG_PROTECT="-* ${ROOT}/etc" \
       emerge $PRET -v xorg-server

and after emerging a few packages I get the error. Any help would be greatly
appreciates.

Thanks
Ryan




[-- Attachment #2: Type: text/html, Size: 55180 bytes --]

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2006-08-28  6:53 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-07-06 11:05 [gentoo-embedded] Problem cross compiling modular X Ryan Baldwin
2006-07-06 12:02 ` Ryan Baldwin
2006-07-06 14:37   ` Ryan Baldwin
2006-07-06 19:21     ` Mike Frysinger
2006-08-24 19:19     ` Enrico Weigelt
2006-08-24 20:31       ` Leonardo Shiguemi Dinnouti
2006-08-28  6:51         ` Peter S. Mazinger
2006-08-24 19:17   ` Enrico Weigelt
2006-08-25  3:39     ` Mike Frysinger
2006-07-10 10:41 ` Peter S. Mazinger
2006-07-10 11:01   ` Ryan Baldwin
2006-07-10 17:44     ` [gentoo-embedded] nslu2 non turbo slug emerge gcc freezes / locks up nick thompson
2006-07-11 12:37       ` Ned Ludd
2006-07-14  3:40         ` nick thompson
2006-07-15  2:39           ` Mike Frysinger
2006-07-14 20:21 ` [gentoo-embedded] Problem cross compiling modular X Chuck Robey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox