Sunday, May 22, 2011

Building on Angstrom on a BeagleBoard

Update: Anonymous says all I needed to do was:  opkg install task-native-sdk, thanks!

These are some quick notes that I intend to update when I have (a) time, and/or (b) a working build.

Tha Angstrom distribution doesn't include a native toolchain (it's meant to be light-weight, so that's OK).  It does, however, mean you need to use the opkg package manager a lot.

First try:
"opkg install gcc"... This works.
"gcc x.c"... command not found - what?

"opkg install gcc-symlinks"... Ah!  gcc now exists!

Here's part of today's bash history:
   87  opkg install gcc
   88  opkg install gcc
   93  opkg install binutils binutils-symlinks cpp cpp-symlinks 
   95  opkg install libc-6
   96  opkg install libc6-dev
  107  opkg install libmagic
  109  opkg install libmagic-dev
  110  opkg install file
  111  opkg install file-dev
  115  opkg install ccache
  117  opkg install install
  118  opkg install libtool-symlink
  119  opkg install libtool-symlinks
  121  opkg install coreutils
  128  opkg install freetype2-dev
  129  opkg install freetype-dbg
  131  opkg install freetype-dbg
  147  opkg install libjpeg-dev
  148  opkg install libpng-dev
  152  opkg install pkg-config
  154  opkg install pkg-config
  174  opkg install eval
  195  opkg install bash
  215  opkg install stl
  218  opkg install c++
  221  opkg install g++ g++-symlinks
  223  opkg install libstdc++-dev


Some worked, some didn't.  But I think the combination of all of them has given me enough programs and libraries to build ROLF without RISC OS compatibility.

I also had to set up these symbolic links for libraries:

ln -s libfreetype.so.6 /usr/lib/libfreetype.so
ln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so

As the applications were supposed to be linked, there was a problem with libtool; the generated static libraries contained only the text "! < a r c h >" (without the spaces), which turned out to be because the /bin/sh link was to /bin/busybox, not /bin/bash (which was already installed).  For search engines: there were several lines like: "eval: 1: libtool_args+=: not found".

ln -sf bash /bin/sh

I've noticed you can get a tarball of rolf code using the following URL (which means you don't have to install SVN to build it):

http://ro-lf.svn.sourceforge.net/viewvc/ro-lf/ROLF/rolf/?view=tar

The code needs modifying to get it to build, including removing the agp specific code and also the compatibility library, for the time being.  The signal handlers in the compatibiity code need modifying to cope with ARM registers, rather than x86.  Also, run_arm_code, and similar routines should be replacable with a simple jump to the code - a kernel patch by Jan Rinze will provide a signal on non-Linux system calls, allowing the compatibilty library to handle RISC OS system calls in-process.

I'm really hoping we can get this to work!