[Numpy-discussion] Questions about cross-compiling extensions for mac-ppc and mac-intel

Christopher Barker Chris.Barker@noaa....
Mon Feb 26 13:05:11 CST 2007


Zachary Pincus wrote:
> building python extensions as Mac-PPC and Mac-Intel fat  
> binaries, so I'm turning to the wisdom of this list for a few questions.

I'd try the pythonmac list too -- there are folks there that actually 
understand all this!

> My general goal is to make a double-clickable Mac installer of a set  
> of tools built around numpy, numpy's distutils, a very hacked-up  
> version of PIL, and some fortran code too. To this end, I need to  
> figure out how to get the numpy distutils to cross-compile,  
> generating PPC code and Intel code in separate builds -- and/or  
> generating a universal binary all in one go. (I'd like to distribute  
> a universal version of numpy, but I think that my own code needs to  
> be built/distributed separately for each architecture due to endian- 
> ness issues.)

hmm -- maybe you'd be better off dealing with the endian issues in your 
code -- i.e. dealing with it at runtime, rather than compile time.

> Is there explicit support in distutils for this, or is it a matter of  
> setting the proper environment variables to entice gcc and gfortran  
> to generate code for a specific architecture?

I'm no expert, but the glory of distutils is that it will, by default 
build extensions the same way as python itself was built. So if you use 
a PPC python, you'll get PPC extensions, same with Intel, and if you use 
  a Universal Python, you'll get a Universal extension.

The trick is that while you can build Universal on either platform, you 
can't use this trick to build Intel extensions on a PPC mac, as the 
Python would have to be intel, and a PPC mac won't run an Intel Python. 
It may be possible to run a PPC Python on an Intel Mac with Rosettta, 
though.

In any case, Universal is probably the best bet except for your Fortran 
code - non one has made a Fortan compiler that can do Universal. You may 
be able to build the two part independently an use Lipo to put them 
together, however.

Googling this list and the pythonmac one should get you some discussion 
of this, but AFAIK, no one has done it yet.

If you do need to have your Fortran stuff separate, you can still make 
the rest of it Universal

> One problem is that PIL is a tricky beast, even in the neutered form  
> that I'm using it. It does a compile-time check for the endian-ness  
> of the system, and a compile-time search for the zlib to use, both of  
> which are problematic.

Well, I know it's possible to build Universal. There are binaries on 
pythonmac.org/packages. The folks on the pythonmac list should be able 
to tell you how. ( zlib is included with OS-X, so that shouldn't be an 
issue)

> To address the former, I'd like to be able to (say) include something  
> like 'config_endian --big' on the 'python setup.py' command-line, and  
> have that information trickle down to the PIL config script (a few  
> subpackages deep). Is this easy or possible?

I doubt it, but there has got to be a way to tie endianess to platform. 
You'd want the Intel code built one way, and the PPC code another. I 
think distutils may take care of this for you.

Good luck! And if you find a way to build a universal Fortran extension 
-- be sure to let us know!

-Chris

-- 
Christopher Barker, Ph.D.
Oceanographer

Emergency Response Division
NOAA/NOS/OR&R            (206) 526-6959   voice
7600 Sand Point Way NE   (206) 526-6329   fax
Seattle, WA  98115       (206) 526-6317   main reception

Chris.Barker@noaa.gov


More information about the Numpy-discussion mailing list