Cross-compiling 1.9.1-p0 to bfin-uclinux

Discussion in 'Ruby' started by Aaron Gage, May 4, 2009.

  1. Aaron Gage

    Aaron Gage Guest

    Greetings --

    I am trying to see whether I can build ruby to run on an Analog Devices
    Blackfin processor. The toolchain (with bfin-uclinux-gcc being the
    compiler) is available here:

    http://blackfin.uclinux.org/gf/project/toolchain/frs

    ...using the latest 2008R1.5_RC14 release of both the toolchain and
    libraries, where the build machine is an i686 running CentOS 5.3.

    This will not cross-compile out of the box, but I'm not sure how much
    help it needs to finish. I am using the following command line to
    configure:

    ac_cv_func_getpgrp_void=no \
    ac_cv_func_setpgrp_void=yes \
    ./configure --host=bfin-uclinux

    configure completes without complaint. Everything seems to compile
    (bfin-uclinux-gcc is used as expected) but it fails when trying to
    create the encdb.so file. It looks to me like this step is using the
    wrong linker (ld instead of bfin-uclinux-ld). The exact error is at the
    bottom of this message.

    I tried this with 1.8.7-p72 and it also failed (I had to tweak process.c
    for something that got fixed in 1.9.1-p0 and copy in a config.sub from
    another bfin-uclinux project port) but in a different place
    (extmk.rb:357 undefined method '<<' for nil:NilClass).

    Some Google searches show that others have had success (1.8.6-p114 and
    -p287 are mentioned). However, I'd like to use the latest and greatest
    if possible -- are there any known solutions for 1.9.1?

    Error log is below (only the end is shown, I can the full build log if
    it is needed). Any help would be appreciated.

    bfin-uclinux-gcc -O2 -g -Wall -Wno-parentheses -I.
    -I.ext/include/bfin-uclinux -I./include -I. -DRUBY_EXPORT -o tgamma.o
    -c ./missing/tgamma.c
    bfin-uclinux-gcc -O2 -g -Wall -Wno-parentheses -I.
    -I.ext/include/bfin-uclinux -I./include -I. -DRUBY_EXPORT -o dmyext.o
    -c dmyext.c
    bfin-uclinux-ar rcu libruby-static.a dln.o encoding.o prelude.o array.o
    bignum.o class.o compar.o complex.o dir.o enum.o enumerator.o error.o
    eval.o load.o proc.o file.o gc.o hash.o inits.o io.o marshal.o math.o
    numeric.o object.o pack.o parse.o process.o random.o range.o rational.o
    re.o regcomp.o regenc.o regerror.o regexec.o regparse.o regsyntax.o
    ruby.o safe.o signal.o sprintf.o st.o strftime.o string.o struct.o
    time.o transcode.o util.o variable.o version.o compile.o debug.o iseq.o
    vm.o vm_dump.o thread.o cont.o ascii.o us_ascii.o unicode.o utf_8.o
    newline.o memcmp.o tgamma.o dmyext.o
    ruby -I/tmp/ruby-1.9.1-p0 -rfake ./tool/generic_erb.rb -c -o encdb.h
    /template/encdb.h.tmpl ./enc enc
    encdb.h unchanged
    make -f enc.mk RUBY="ruby -I/tmp/ruby-1.9.1-p0 -rfake " MINIRUBY="ruby
    -I/tmp/ruby-1.9.1-p0 -rfake " enc
    make[1]: Entering directory `/tmp/ruby-1.9.1-p0'
    bfin-uclinux-gcc -I. -I.ext/include/bfin-uclinux -I./include -I.
    -D_FILE_OFFSET_BITS=64 -DONIG_ENC_REGISTER=rb_enc_register -fPIC -O2
    -g -Wall -Wno-parentheses -o enc/encdb.o -c ./enc/encdb.c

    Here is where I think the problem is (the .o was created with
    bfin-uclinux-gcc, now trying to link with normal ld):

    ld -o .ext/bfin-uclinux/enc/encdb.so enc/encdb.o -L. -L. -L.
    -lpthread -lrt -lcrypt -lm
    ld: enc/encdb.o: Relocations in generic ELF (EM: 106)
    ld: enc/encdb.o: Relocations in generic ELF (EM: 106)
    ld: enc/encdb.o: Relocations in generic ELF (EM: 106)
    ld: enc/encdb.o: Relocations in generic ELF (EM: 106)
    ld: enc/encdb.o: Relocations in generic ELF (EM: 106)
    ld: enc/encdb.o: Relocations in generic ELF (EM: 106)
    enc/encdb.o: could not read symbols: File in wrong format
    make[1]: *** [.ext/bfin-uclinux/enc/encdb.so] Error 1
    make[1]: Leaving directory `/tmp/ruby-1.9.1-p0'
    make: *** [enc] Error 2
    --
    Posted via http://www.ruby-forum.com/.
    Aaron Gage, May 4, 2009
    #1
    1. Advertising

  2. Aaron Gage wrote:
    > Some Google searches show that others have had success (1.8.6-p114 and
    > -p287 are mentioned). However, I'd like to use the latest and greatest
    > if possible -- are there any known solutions for 1.9.1?


    ruby 1.9 is *much* bigger than ruby 1.8, so for embedded applications,
    I'd stick with 1.8 (pref 1.8.6) unless you really need 1.9 features.

    openwrt has a working ruby 1.8.6 port. I don't know what the status is
    of openwrt with blackfin, but a google search suggests maybe someone is
    working on it:
    https://dev.openwrt.org/changeset/7306/trunk/tools/mkimage
    --
    Posted via http://www.ruby-forum.com/.
    Brian Candler, May 5, 2009
    #2
    1. Advertising

  3. Aaron Gage

    Aaron Gage Guest

    Brian Candler wrote:
    > ruby 1.9 is *much* bigger than ruby 1.8, so for embedded applications,
    > I'd stick with 1.8 (pref 1.8.6) unless you really need 1.9 features.
    >
    > openwrt has a working ruby 1.8.6 port. I don't know what the status is
    > of openwrt with blackfin, but a google search suggests maybe someone is
    > working on it:
    > https://dev.openwrt.org/changeset/7306/trunk/tools/mkimage


    Thanks for the info about 1.9. I have gone back and tried to build a
    couple of 1.8.6 versions, but I still seem to be getting stuck. I am
    consistently getting this error:

    [blackfin@localhost ruby-1.8.6-p368]$ make
    rbconfig.rb unchanged
    /lib/fileutils.rb:1029:in `utime': can't convert NilClass into time
    (TypeError)
    from ./lib/fileutils.rb:1029:in `touch'
    from ./lib/fileutils.rb:1026:in `each'
    from ./lib/fileutils.rb:1026:in `touch'
    from ./mkconfig.rb:188
    make: *** [.rbconfig.time] Error 1

    I checked out p287 (after reading
    http://groups.google.com/group/ruby-talk-google/browse_thread/thread/26dadccab34f57bf?fwc=2)
    and it reports the same error.

    Since this build machine is CentOS 5.3, I have an older version of ruby
    (1.8.5) installed. However, I can build 1.8.6-p287 (from Subversion),
    1.8.6-p368, and 1.9.1-p0 on this machine natively without any difficulty
    (./configure && make && make test). This tells me that the above error
    (File.utime returning nil) is not necessarily due to the system's ruby
    version being out of date (even though it is a ruby script that fails).

    I will keep plugging away at it. The link to the OpenWRT project
    doesn't give me any ideas about this particular error, but I'll see if I
    can figure out what file mkconfig.rb is failing to find.
    --
    Posted via http://www.ruby-forum.com/.
    Aaron Gage, May 5, 2009
    #3
  4. Aaron Gage

    Aaron Gage Guest

    Well, I've gotten it to build. I have not yet tested this on the target
    processor yet, but first things first.

    The steps I had to follow are:

    1) Get a copy of ruby-1.8.6-p368 and extract it if necessary

    2) cd into the ruby-1.8.6-p368 directory and copy the attached patch
    into it

    3) Apply the attached patch by doing this:
    patch -p0 < ruby-1.8.6-p368-bfin-uclinux.patch

    4) configure as follows:

    ac_cv_func_getpgrp_void=no \
    ac_cv_func_setpgrp_void=yes \
    ./configure --host=bfin-uclinux

    5) make (assuming that bfin-uclinux-gcc is in the PATH and the libraries
    are installed properly)

    The resulting executable is about 2.3MB which isn't too bad. I still
    need to try to convert it to the BFLT format, but I can work on that
    next.

    As for the patch, I had to remove three lines from mkconfig.rb
    ($timestamp was undefined), copy in the config.sub from the 1.9.1-p0
    distribution, and set all of the extensions to build statically.

    Hopefully this will be of use to someone else.

    Attachments:
    http://www.ruby-forum.com/attachment/3656/ruby-1.8.6-p368-bfin-uclinux.patch

    --
    Posted via http://www.ruby-forum.com/.
    Aaron Gage, May 5, 2009
    #4
  5. Hi,

    At Wed, 6 May 2009 00:19:45 +0900,
    Aaron Gage wrote in [ruby-talk:335822]:
    > [blackfin@localhost ruby-1.8.6-p368]$ make
    > rbconfig.rb unchanged
    > ./lib/fileutils.rb:1029:in `utime': can't convert NilClass into time
    > (TypeError)
    > from ./lib/fileutils.rb:1029:in `touch'
    > from ./lib/fileutils.rb:1026:in `each'
    > from ./lib/fileutils.rb:1026:in `touch'
    > from ./mkconfig.rb:188
    > make: *** [.rbconfig.time] Error 1


    r14741 needs to get backported to 1.8.6.

    --
    Nobu Nakada
    Nobuyoshi Nakada, May 6, 2009
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Garrett Cooper
    Replies:
    0
    Views:
    539
    Garrett Cooper
    Feb 24, 2009
  2. Garrett Cooper
    Replies:
    0
    Views:
    482
    Garrett Cooper
    Feb 24, 2009
  3. Gilles Ganault

    Compiling Python for uCLinux appliance?

    Gilles Ganault, Jul 29, 2009, in forum: Python
    Replies:
    1
    Views:
    351
    Diez B. Roggisch
    Jul 29, 2009
  4. Zachary Landau

    Ruby on uClinux

    Zachary Landau, Nov 5, 2004, in forum: Ruby
    Replies:
    1
    Views:
    138
    zhekov
    Nov 5, 2004
  5. zaptellinux
    Replies:
    0
    Views:
    105
    zaptellinux
    Jul 24, 2009
Loading...

Share This Page