unicorn 4 does not compile on Joyent (SmartOS/Solaris) due to raindrops dependency

Eric Wong normalperson at yhbt.net
Wed May 9 07:02:29 UTC 2012

Konstantin Gredeskoul <kig at wanelo.com> wrote:
> However, the raindrops dependency introduced in 4.0 breaks raindrops
> (and therefore unicorn 4) on SmartOS.
> The fact that the compilation breaks in the file named
> "linux_inet_diag.c" makes me believe that perhaps the authors may not
> have anticipated usage beyond Linux, or there may be some other

That file is Linux-specific, but the rest of raindrops (and unicorn)
works on FreeBSD, OpenBSD and probably others.  I have every expectation
it'd work on SmartOS[1]

> > uname -a
> SunOS demo001.dev 5.11 joyent_XXXX i86pc i386 i86pc Solaris

> > file .rvm/rubies/ruby-1.9.3-p194/bin/ruby
> .rvm/rubies/ruby-1.9.3-p194/bin/ruby:   ELF 64-bit LSB executable
> AMD64 Version 1, dynamically linked, not stripped

Are you running a mixed 32-bit/64-bit installation?
Can you check the build system isn't picking the wrong compiler
or compiler flags?

> make
> compiling linux_inet_diag.c
> linux_inet_diag.c:1:0: error: CPU you selected does not support x86-64
> instruction set

That's odd, the first line is just #include <ruby.h>

You can try emptying/removing that file completely?  (maybe
linux_tcp_diag.c, too).

Your env shouldn't define the __linux__ macro.  The linux_* files is
wrapped with an #ifdef __linux__, so those files shouldn't even
be compiled on other OSes.

The portable part of raindrops does use CPU-specific atomics
(which GCC or libatomic_ops provides).  Ruby 1.9.3 itself uses
these instructions, too.

[1] - SmartOS seems to be Free Software, so I can actually support it :)

More information about the mongrel-unicorn mailing list