Building 1.9.1 as universal binary on OS X

A

Alex Fenton

Hi

I'd like to build the recently released Ruby 1.9.1 as a universal binary
on OS X. I'm on an Intel 10.5, but want the ruby to be runnable on 10.4
or 10.5, Intel or PPC.

Following this tech note and advice:
http://developer.apple.com/technotes/tn2005/tn2137.html
http://lists.apple.com/archives/Xcode-users/2007/Oct/msg00686.html

I did:

Abaddon:ruby-1.9.1-p0 alex$ export CFLAGS="-O3 -g -isysroot
/Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc
-mmacosx-version-min=10.4"
Abaddon:ruby-1.9.1-p0 alex$ export LDFLAGS="-arch i386 -arch ppc"
Abaddon:ruby-1.9.1-p0 alex$ ./configure --prefix=~/bleed

However, the resultant ruby isn't marked as universal:

Abaddon:ruby-1.9.1-p0 alex$ ~/bleed/bin/ruby -v
ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-darwin9.6.0]
^^^^^^^^^^^^^^^^
Unlike the standard 10.5 install of ruby 1.8.6:

Abaddon:~ alex$ ruby -v
ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0]
^^^^^^^^^^^^^^^^^^^
Can anyone offer any advice here please?

alex
 
A

Adam Gardner

Alex said:
Abaddon:ruby-1.9.1-p0 alex$ export CFLAGS="-O3 -g -isysroot
/Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc
-mmacosx-version-min=10.4"
Abaddon:ruby-1.9.1-p0 alex$ export LDFLAGS="-arch i386 -arch ppc"
Abaddon:ruby-1.9.1-p0 alex$ ./configure --prefix=~/bleed

However, the resultant ruby isn't marked as universal:

Abaddon:ruby-1.9.1-p0 alex$ ~/bleed/bin/ruby -v
ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-darwin9.6.0]
^^^^^^^^^^^^^^^^
Unlike the standard 10.5 install of ruby 1.8.6:

Abaddon:~ alex$ ruby -v
ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0]
^^^^^^^^^^^^^^^^^^^
Can anyone offer any advice here please?

alex

More importantly, what's the output of these commands?
$ file ~/bleed/bin/ruby
$ file ~/bleed/lib/libruby.1.9.1.dylib
 
A

Alex Fenton

Adam said:
More importantly, what's the output of these commands?
$ file ~/bleed/bin/ruby
$ file ~/bleed/lib/libruby.1.9.1.dylib

Abaddon:ruby-1.9.1-p0 alex$ file ~/bleed/bin/ruby
/Users/alex/bleed/bin/ruby: Mach-O universal binary with 2 architectures
/Users/alex/bleed/bin/ruby (for architecture i386): Mach-O executable i386
/Users/alex/bleed/bin/ruby (for architecture ppc): Mach-O executable ppc
Abaddon:ruby-1.9.1-p0 alex$ file ~/bleed/lib/libruby-static.a
/Users/alex/bleed/lib/libruby-static.a: Mach-O universal binary with 2
architectures
/Users/alex/bleed/lib/libruby-static.a (for architecture i386): current
ar archive random library
/Users/alex/bleed/lib/libruby-static.a (for architecture ppc): current
ar archive random library

alex
 
N

Nobuyoshi Nakada

Hi,

At Fri, 6 Feb 2009 05:34:27 +0900,
Alex Fenton wrote in [ruby-talk:327034]:
I'd like to build the recently released Ruby 1.9.1 as a universal binary
on OS X. I'm on an Intel 10.5, but want the ruby to be runnable on 10.4
or 10.5, Intel or PPC.

Universal binary support was very incomplete and has been dropped.
Not only it'd confused autoconf and fallen into disaster, x86 and ppc
platforms behave differently in some points.
Following this tech note and advice:
http://developer.apple.com/technotes/tn2005/tn2137.html
http://lists.apple.com/archives/Xcode-users/2007/Oct/msg00686.html

I did:

Abaddon:ruby-1.9.1-p0 alex$ export CFLAGS="-O3 -g -isysroot
/Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc
-mmacosx-version-min=10.4"
Abaddon:ruby-1.9.1-p0 alex$ export LDFLAGS="-arch i386 -arch ppc"
Abaddon:ruby-1.9.1-p0 alex$ ./configure --prefix=~/bleed

Do NOT use -arch option multiple times.

Instead, build for each archs and bind them with lipo command.
 
A

Adam Gardner

Alex said:
Abaddon:ruby-1.9.1-p0 alex$ file ~/bleed/bin/ruby
/Users/alex/bleed/bin/ruby: Mach-O universal binary with 2 architectures
/Users/alex/bleed/bin/ruby (for architecture i386): Mach-O executable
i386
/Users/alex/bleed/bin/ruby (for architecture ppc): Mach-O executable
ppc
Abaddon:ruby-1.9.1-p0 alex$ file ~/bleed/lib/libruby-static.a
/Users/alex/bleed/lib/libruby-static.a: Mach-O universal binary with 2
architectures
/Users/alex/bleed/lib/libruby-static.a (for architecture i386): current
ar archive random library
/Users/alex/bleed/lib/libruby-static.a (for architecture ppc): current
ar archive random library

alex

Sorry, it took me so long to respond to this. If the 'file' command
reports that it's a Mach-O universal binary with 2 architectures, then
you *did* build ruby as universal. Whether it works or not is an open
question, but it's a universal binary either way. The ruby version
string (in particular, the 'i386-darwin9.0' bit) is just an
informational text string stored in rbconfig.rb, generated at some point
during the build process. You could open rbconfig.rb and change the
platform string to 'my-little-pony' and it probably wouldn't change a
thing (until you try to run a script that checks that value to determine
what platform-specific code to run, I guess).

- Adam
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,576
Members
45,054
Latest member
LucyCarper

Latest Threads

Top