arduino svn compile bug

I get
$ ./run.sh

(:1321): Gtk-WARNING **: Attempting to add a widget with type GtkButton to a GtkComboBoxEntry (need an instance of GtkEntry or of a subclass)

(:1321): Gtk-CRITICAL **: gtk_widget_realize: assertion `GTK_WIDGET_ANCHORED (widget) || GTK_IS_INVISIBLE (widget)' failed

(:1321): Gtk-CRITICAL **: gtk_paint_box: assertion `style->depth == gdk_drawable_get_depth (window)' failed

(:1321): Gtk-CRITICAL **: gtk_paint_box: assertion `style->depth == gdk_drawable_get_depth (window)' failed

(:1321): Gtk-CRITICAL **: gtk_paint_box: assertion `style->depth == gdk_drawable_get_depth (window)' failed

(:1321): Gtk-CRITICAL **: gtk_paint_box: assertion `style->depth == gdk_drawable_get_depth (window)' failed
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
Exception in thread "main" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at gnu.io.CommPortIdentifier.(CommPortIdentifier.java:83)
at processing.app.Editor.populateSerialMenu(Editor.java:903)
at processing.app.Editor.buildToolsMenu(Editor.java:800)
at processing.app.Editor.(Editor.java:190)
at processing.app.Base.(Base.java:149)
at processing.app.Base.main(Base.java:104)

The GTK errors occur while loading the dialog that asks me to pick my sketch directory.

After I do that, and press ok, nothing comes up and the error about the linker comes up :frowning:

It should be noted that this is after I deleted librxtxSerial.so.

If svn-update which restores the file, rm -rf work and then rebuild it and re-run it i get another error

$ ./run.sh

(:1492): Gtk-WARNING **: Attempting to add a widget with type GtkButton to a GtkComboBoxEntry (need an instance of GtkEntry or of a subclass)

(:1492): Gtk-CRITICAL **: gtk_widget_realize: assertion `GTK_WIDGET_ANCHORED (widget) || GTK_IS_INVISIBLE (widget)' failed

(:1492): Gtk-CRITICAL **: gtk_paint_box: assertion `style->depth == gdk_drawable_get_depth (window)' failed

(:1492): Gtk-CRITICAL **: gtk_paint_box: assertion `style->depth == gdk_drawable_get_depth (window)' failed

(:1492): Gtk-CRITICAL **: gtk_paint_box: assertion `style->depth == gdk_drawable_get_depth (window)' failed

(:1492): Gtk-CRITICAL **: gtk_paint_box: assertion `style->depth == gdk_drawable_get_depth (window)' failed

(:1492): Gtk-CRITICAL **: gtk_paint_box: assertion `style->depth == gdk_drawable_get_depth (window)' failed

(:1492): Gtk-CRITICAL **: gtk_paint_box: assertion `style->depth == gdk_drawable_get_depth (window)' failed
java.lang.UnsatisfiedLinkError: /home/jm/arduino-svn/build/linux/work/lib/librxtxSerial.so: /home/jm/arduino-svn/build/linux/work/lib/librxtxSerial.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch) thrown while loading gnu.io.RXTXCommDriver
Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/jm/arduino-svn/build/linux/work/lib/librxtxSerial.so: /home/jm/arduino-svn/build/linux/work/lib/librxtxSerial.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1751)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1676)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at gnu.io.CommPortIdentifier.(CommPortIdentifier.java:83)
at processing.app.Editor.populateSerialMenu(Editor.java:903)
at processing.app.Editor.buildToolsMenu(Editor.java:800)
at processing.app.Editor.(Editor.java:190)
at processing.app.Base.(Base.java:149)
at processing.app.Base.main(Base.java:104)

You need a version of RXTX that's compiled for your system, and you need to put it in place of the librxtxSerial.so that's in the source tree.

ahh ok.

So i will delete the rxtx that comes with it and replace it with the one found locally on my system after compile, THEN compile arduino.

thanks!

I'm getting very close!

So im summary to get this built and running on a 64-bit gentoo system do the following

Build your own version of RXTX.
then either symlink or cp your local version of librxtxSerial.so to /path/to/arduino-svn/build/linux/dist/lib
#updatedb
#locate librxtxSerial.so
$cp /local/path/librxtxSerial.so /arduino-svn/build/linux/dist/lib/.

Then deal with AVRDUDE, which will take care of 64 bit libusb issues.
so compile avrdude for your own system.

then locate your avrdude binary path locally
then cp /local/avrdude to arduino-svn/build/linux/dist/tools/.

now go to /arduino-sv/build/linux/ and rm -rf work, then ./make.sh

NOW we have to symlink the ldscripts libray
cd into work
ln -s /usr/lib64(NOTE THE 64HERE)/binutils/2.18/ldscripts/

now ./arduino and it'll run.

Things I still need to figure out.

BUG I NEED HELP WITH:
When uploading firmware I get that the device signature doesn't match. This is because arduino uses another method of determining this with a patch source which I could've used to compile avrdude locally. I chose portage since that'll keep it up to date and line with gentoo config's.....
That being said, I can also add the "-F" flag to ignore this. Now, where in the arduino-gui source do I add that flag? Where is that command actually called from? This way I can use the button on the GUI.

  1. My sketchbook directory is NOT saved upon exiting the program.

JM

  1. app/AvrdudeUploader.java

  2. what's not saved? the preference that indicates the location of the sketchbook directory? or the contents of the directory?

K. Got it working

I edited app/AvrdudeUploader.java and added in the last function right before the commandDownloader.addAll
commandDownloader.Add("-F");

Now this will force uploading even for an improper ident which I would imagine could do bad things if you don't have the proper board hooked up.

The preference saving issues went away once I changed that.... very weird..... but good :slight_smile:

I will write up another post that can be appended to the gentoo guide.

First, follow the Arduino on Gentoo guide. Down to the part where it tells you to download and un-tar the arduino software archive. We are going to take it from there.
First checkout the latest version
svn checkout http://arduino-svn-repo/trunk/latest/ /path/to/where/u/want/arduino-svn

Now we need to recompile some lib's of our own.

Start by compiling rxtx and avrdude for your system
You'll need to add dev-embedded/uisp and dev-embedded/avrdude to your /etc/portage/package.keywords since they are keyword masked for some arches (namely amd64)
#emerge -vp rxtx avrdude
and if your happy
#emerge -v rxtx avrdude

Now we need to hook those into the arduino build.
So as root
#updatedb

Now locate librxtxSerial.so and the avrdude binary file.
locate librxtxSerial.so
locate avrdude
Note those path's.

Now either copy or symlink those files into the build system
$ln -s /local/path/librxtxSerial.so /path/to/arduino-svn/build/linux/dist/lib/librxtxSerial.so
$ln -s /local/path/to/avrdude to /path/to/arduino-svn/build/linux/dist/tools/avrdude

Lastly we need to edit the file
nano /path/to/arduino-svn/app/AvrdudeUploader.java
and before the line
"commandDownloader.addAll(params);" [which for me appears at line 152]
add
//add a -F flag
commandDownloader.add("-F");
What this does is force the uploader to go even though the device signature won't be correct. Arduino provides a patched version of avrdude so you dont need to do this (safer) but this would require downloading and compiling that separately and I prefer to use portage for everything since that is the reason i use gentoo in the first place.

Build Time!
Now cd /path/to/arduino-svn/build/linux/. and clear the work directory out if anything is there rm -rf work.
Now build it ./make.sh

Now cd work
And we need to add the ldscripts reference, which is mentioned in the gentoo guide (but we didn't do since it was past the cut off point :))
Your version of avr-binutils MAY be something other than 2.18, most likely it'll be the only entry in there so you can just tab complete it.
ln -s /usr/lib64(NOTE THE 64 HERE)/binutils/avr/2.18/ldscripts/ /path/to/arduino-svn/build/linux/work/ldscripts

now if you aren't already there
cd /path/to/arduino-svn/build/linux/work/.

and you should be able to ./arduino and it should work.

Now you need to go back to the Arduino Gentoo guide and finish getting the hardware setup in the kernel. Pick backup where it says
"The next step is to get the USB to serial adapter working. "
and follow it the rest of the way from there.

Happy Gentoo'ing! :slight_smile:
JM

BTW, if you compile the Arduino version of avrdude, you shouldn't need to actually build the Arduino distribution - just replace the RXTX with a 64 bit version. (Most of the code is Java, so it should run fine on 64-bit systems.)

BTW, if you compile the Arduino version of avrdude, you shouldn't need to actually build the Arduino distribution - just replace the RXTX with a 64 bit version. (Most of the code is Java, so it should run fine on 64-bit systems.)

Cool :slight_smile:

It would be awesome if the dev's could throw together an ebuild for this and get it in portage :sunglasses:

ahh it would be great, i can't get arduino-0012 working, but only 0009.
I'll try this guide tonight and let's see.

ok, i got it working my default 0011 installation.
All i did was downloading arduino-svn and compiling with the -F param patch.
Then copied pde.jar to my 0011 lib directory and that's all.

;D

I'm having trouble getting this to work on my system. I've followed the instructions to the letter.

running

crossdev -t avr -s4

returns

--------------------------------------------------------------------------------
 * Host Portage ARCH:     amd64
 * Target Portage ARCH:   *
 * Target System:         avr
 * Stage:                 4 (C/C++ compiler)

 * binutils:              binutils-[latest]
 * gcc:                   gcc-[latest]
 * libc:                  avr-libc-[latest]

 * PORTDIR_OVERLAY:       /usr/portage
 * PORT_LOGDIR:           /var/log/portage
 * PKGDIR:                /usr/portage/packages/cross/avr
 * PORTAGE_TMPDIR:        /var/tmp/cross/avr
  _  -  ~  -  _  -  ~  -  _  -  ~  -  _  -  ~  -  _  -  ~  -  _  -  ~  -  _  -  
 * Using sys-devel/binutils from /usr/portage instead of /usr/portage
 * Using sys-devel/gcc from /usr/portage instead of /usr/portage
 * Using dev-embedded/avr-libc from /usr/portage instead of /usr/portage
 * Using sys-devel/gdb from /usr/portage instead of /usr/portage
 * Using dev-util/insight from /usr/portage instead of /usr/portage
 * Forcing the latest versions of {binutils,gcc}-config/gnuconfig ...     [ ok ]
 * Log: /var/log/portage/cross-avr-binutils.log
 * Emerging cross-binutils ...                                            [ ok ]
 * Log: /var/log/portage/cross-avr-avr-libc-headers.log
 * Emerging cross-avr-libc-headers ...

 * avr-libc failed :(
 * If you file a bug, please attach the following logfiles:
 * /var/log/portage/cross-avr-info.log
 * /var/log/portage/cross-avr-avr-libc-headers.log

The log files, as noted read:

 /var/log/portage/cross-avr-info.log

>>> Auto-cleaning packages...

>>> No outdated packages were found on your system.
/var/log/portage/cross-avr-avr-libc-headers.log

>>> Verifying ebuild Manifests...

>>> Emerging (1 of 1) cross-avr/avr-libc-1.6.2 to /
 * avr-libc-1.6.2.tar.bz2 RMD160 SHA1 SHA256 size ;-) ...                 [ ok ]
 * avr-libc-manpages-1.6.2.tar.bz2 RMD160 SHA1 SHA256 size ;-) ...        [ ok ]
 * checking ebuild checksums ;-) ...                                      [ ok ]
 * checking auxfile checksums ;-) ...                                     [ ok ]
 * checking miscfile checksums ;-) ...                                    [ ok ]
 * checking avr-libc-1.6.2.tar.bz2 ;-) ...                                [ ok ]
 * checking avr-libc-manpages-1.6.2.tar.bz2 ;-) ...                       [ ok ]
 * Checking for avr-gcc ...
  [ !! ]
 * 
 * Failed to locate 'avr-gcc' in $PATH. You can install an AVR toolchain using:
 *   $ crossdev -t avr
 * 
 * 
 * ERROR: cross-avr/avr-libc-1.6.2 failed.
 * Call stack:
 *               ebuild.sh, line   49:  Called pkg_setup
 *   avr-libc-1.6.2.ebuild, line   40:  Called die
 * The specific snippet of code:
 *               die "AVR toolchain not found"
 *  The die message:
 *   AVR toolchain not found
 * 
 * If you need support, post the topmost build error, and the call stack if relevant.
 * A complete build log is located at '/var/tmp/cross/avr/portage/cross-avr/avr-libc-1.6.2/temp/build.log'.
 * The ebuild environment file is located at '/var/tmp/cross/avr/portage/cross-avr/avr-libc-1.6.2/temp/die.env'.
 * This ebuild used the following eclasses from overlays:
 *   /usr/portage/eclass/flag-o-matic.eclass
 *   /usr/portage/eclass/eutils.eclass
 *   /usr/portage/eclass/multilib.eclass
 *   /usr/portage/eclass/toolchain-funcs.eclass
 *   /usr/portage/eclass/portability.eclass
 * 

 * Messages for package cross-avr/avr-libc-1.6.2:

 * 
 * Failed to locate 'avr-gcc' in $PATH. You can install an AVR toolchain using:
 *   $ crossdev -t avr
 * 
 * 
 * ERROR: cross-avr/avr-libc-1.6.2 failed.
 * Call stack:
 *               ebuild.sh, line   49:  Called pkg_setup
 *   avr-libc-1.6.2.ebuild, line   40:  Called die
 * The specific snippet of code:
 *               die "AVR toolchain not found"
 *  The die message:
 *   AVR toolchain not found
 * 
 * If you need support, post the topmost build error, and the call stack if relevant.
 * A complete build log is located at '/var/tmp/cross/avr/portage/cross-avr/avr-libc-1.6.2/temp/build.log'.
 * The ebuild environment file is located at '/var/tmp/cross/avr/portage/cross-avr/avr-libc-1.6.2/temp/die.env'.
 * This ebuild used the following eclasses from overlays:
 *   /usr/portage/eclass/flag-o-matic.eclass
 *   /usr/portage/eclass/eutils.eclass
 *   /usr/portage/eclass/multilib.eclass
 *   /usr/portage/eclass/toolchain-funcs.eclass
 *   /usr/portage/eclass/portability.eclass
 *

It looks like a recursive error...it says it needs the avr toolchain, and to use crossdev to build it....but that's what I'm doing, isn't it?

Also, checking out the svn repo is proving troublesome. Is it always incredibly slow?

If you're having trouble installing avr-libc on your distribution, I'd look for support from the package maintainer. I don't know anything about it.

The repository does unfortunately have a few very large files in it, so it takes a while to check out. If you're only interested in running Arduino, you should be able to just download the Linux version from the software page.

If you're having trouble installing avr-libc on your distribution, I'd look for support from the package maintainer. I don't know anything about it.

Ok...I'll poke around there.

The repository does unfortunately have a few very large files in it, so it takes a while to check out. If you're only interested in running Arduino, you should be able to just download the Linux version from the software page.

I'm running an amd64, hence finding this thread...it doesn't work out of the box.

What doesn't work? You almost certainly don't need to compile Arduino from source. You probably just need to replace the RXTX library that comes with it with a version that's compiled for 64-bit processors (which you might be able to find a package for). You might need to compile the Arduino version of avrdude from source, but that won't require checking out the whole (huge) Arduino source tree, just downloading: http://www.arduino.cc/files/avrdude-5.4-arduino-0010-src.tgz

It's working, now -

There are some bugs in the Gentoo ebuilds of the avr libs. A few quick tweaks fixed it and everything runs just fine.

How exactly did you solve the problem? I'm having the same issue here, i'm starting to go crazy. I would be very grateful if you could post the fixes.

Same problem of nphillips and Pu0quoov here... nphillips, you should provide solutions when you find them, or a forum isn't useful :stuck_out_tongue:
I'm trying to figure it out.

A change in crossdev default headers settings worked for me:
http://bugs.gentoo.org/show_bug.cgi?id=230343

Be sure to have mpfr and gmp up to date, they are required for building gcc.

EDIT: I got that working with gcc 4.1.2 and binutils 2.18.50.0.7 installed with emerge and explicitly set when calling crossdev.
Now I'm looking for an usb cable :smiley: