[Distutils] [setuptools] setuptools and fat binaries
Ronald Oussoren
ronaldoussoren at mac.com
Wed Jan 4 23:04:04 CET 2006
On 4-jan-2006, at 22:48, Bob Ippolito wrote:
>
> On Jan 4, 2006, at 1:38 PM, Ronald Oussoren wrote:
>
>>
>> On 4-jan-2006, at 22:26, Bob Ippolito wrote:
>>
>>> On Jan 4, 2006, at 12:51 PM, Ronald Oussoren wrote:
>>>
>>>> Apple supports fat binaries on Mac OS X (they call them universal
>>>> binaries), that is binaries that contain executable code for
>>>> multiple
>>>> architectures. In released version of the os this can be used to
>>>> build binaries and libraries that support both PPC and PPC64
>>>> architectures, which isn't used very much, and in the future this
>>>> will be the mechanism to support both the current PPC based systems
>>>> and the to-be-introduced intel systems with a single binary.
>>>>
>>>> I'm currently playing around with Python on an Intel developer
>>>> system
>>>> (my goal is a patch that will make it easy to build a fat/universal
>>>> build of Python on Mac OS X), and I wondering how setuptools (and
>>>> specifically eggs) can support universal binaries. The reason I ask
>>>> is because of eggs that contain extensions, whose name contains the
>>>> architecture, such as aem-0.10.0-py2.4-macosx-10.4-ppc.egg. Just
>>>> using two eggs, one for each architecture, would work but seems
>>>> wasteful and would make it harder to create self fat application
>>>> bundles.
>>>
>>> Using two or three eggs doesn't really make it any harder to
>>> create an application bundle, py2app needs to change to support
>>> eggs anyway and having a separate arch egg would work fine. It
>>> might be better that way because it's easy to see which packages
>>> support which architectures and it's easy for someone who has the
>>> relevant platform to built, test, and upload.
>>
>> Someone, somewhere has to do the work, either setuptools or
>> py2app. I'd like to see fat eggs to avoid duplication of all non-
>> executable stuff (python files and data files).
>
> Work has to be done in both places, either way.
>
>> I'd guess that in most cases just using '-arch i386 -arch ppc' in
>> the extra_compile_args and extra_link_args would enable you to
>> build a fat version of an extension. Building a fat egg that works
>> on OSX 10.3 and forward might be harder, but even there the simple
>> solution might work most of the time (I haven't put much thought
>> into that yet).
>
> Aren't there still pyconfig.h issues with doing a fat build like
> that? What about getting ppc64 support in a fat build?
My current hack is to include macosx-config.h at the end of
pyconfig.h and to redefine all processor specific defines in that
file. That seems to allow me to build a fat framework using 'OPT=-
arch i386 -arch ppc LDFLAGS=-arch i386 -arch ppc'. Well, actually
that and a patch to Makefile.pre.in to call libtool in the right way.
But, I haven't tested the result on a PPC box yet, I'm hunting down
i386 specific bugs first (probably byte-order related).
Adding ppc64 support would require 3 seperate builds + a merge
because not all extensions build on the ppc64 flavor, the entire
Carbon package cannot be build for ppc64. I don't have a G5 box, and
probably would work on this even if I had. Making it possible to
build a 10.3 capable python binary on 10.4 is more useful.
>
>>>
>>> py2app could even merge arch eggs together to make them fat at
>>> build time.
>>
>> If it would do that setuptools would still require some support
>> for fat eggs, or do you mean that py2app would merge the two
>> variants and then have a symlink from one architecture variant to
>> the other?
>
> There are lots of ways it could work. It doesn't really need any
> support of fat eggs, it could just remove the platform spec.
>
> -bob
>
P.S. the ruckus(sp?) about a compiler warning getpath.c over on
python-dev is quite funny given the amount of warnings I'm getting in
other parts of the build, although most of those are in Carbon package.
More information about the Distutils-SIG
mailing list