[Numpy-discussion] Questions about cross-compiling extensions for mac-ppc and mac-intel
Zachary Pincus
zpincus at stanford.edu
Sat Feb 24 15:24:25 EST 2007
Hi folks,
I've been doing a lot of web-reading on the subject, but have not
been completely able to synthesize all of the disparate bits of
advice about 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.
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.)
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?
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.
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?
To address the latter, I think I need to have the PIL extensions
dynamically link against '/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/
libz.dylib' which is the fat-binary version of the library, using the
headers from '/Developer/SDKs/MacOSX10.4u.sdk/usr/include/zlib.h
'. Right now, PIL is using system_info from numpy.distutils to find
the valid library paths on which libz and its headers might live.
This is nice and more or less platform-neutral, which I like. How
best should I convince/configure numpy.distutils.system_info to put '/
Developer/SDKs/MacOSX10.4u.sdk/usr/{lib,include}' on the output to
get_include_dirs() and get_lib_dirs()?
Thanks for any advice or counsel,
Zach Pincus
Program in Biomedical Informatics and Department of Biochemistry
Stanford University School of Medicine
More information about the NumPy-Discussion
mailing list