64-bit versions of some ports

Emil Lundberg Emil.Lundberg at bmc.uu.se
Tue Feb 12 01:17:09 PST 2008


11 feb 2008 kl. 22.39 skrev Ryan Schmidt:

>
> On Feb 11, 2008, at 06:23, Emil Lundberg wrote:
>
>>>> From the previous discussion, I remember that we (or rather mww)
>>>> started by changing the +universal variant to build all 4  
>>>> versions (2
>>>> architectures each of 32-bit and 64-bit) but this was problematic
>>>> because many ports failed to build out of the box as 64-bit, and  
>>>> there
>>>> was no clear upgrade path for those who already had 2-architecture
>>>> universal variants installed, and it was said that 64-bit  
>>>> versions of
>>>> most ports don't make sense anyway (aren't faster, or possibly are
>>>> even slower). But it seems like we want to be able to do this for
>>>> selected ports.
>>>
>>> Most of the ports that failed were using Carbon, or otherwise old...
>>> (old Carbon GUI does not support 64-bit, only Cocoa GUI does that)
>>
>> Thanks for revisiting this. There is a real need to be able to  
>> compile, by default, for the native architecture of your machine.  
>> There is also a real need to preseve backwards compatibility. A  
>> modest proposal (based on posts and discussions old and new) that  
>> might please everyone:
>>
>> * Keep the "universal" variant for building architecture-fat  
>> binaries (only).
>> * Add a new "fat" variant for building bit-fat binaries (only).
>> * Activate the "fat" variant by default on all library-class ports.
>
> What are "library-class ports"? What I mean is: what criteria would  
> you use (what portfile variables, for example) to classify a port  
> as a library-class port?

A good question indeed; I was hoping you guys could answer that! :-)

I think it would need to be determined by the maintainer of the  
individual port. Many ports are both applications in themselves but  
also libraries (R, mysql, openssl), so the line is not so clear-cut.  
My view is that _any_ port that builds shared libraries should  
(ultimately) compile as bit-fat by default on 64-bit (at least on  
intel, ppc folks may beg to differ). Perhaps a category ("library",  
"64bit") could be added to signify this? Or a platform, but that just  
sounds wrong.

But, to get things going, how about simply adding a standard variant  
"64bit" that, just like "universal", is always available (right?).  
The daring could then add it to variants.conf, and those who (like  
myself) take an active interest in 64-bit could try ports out, file  
bug reports etc. afb had a suggestion on how to handle this in a  
decently port-neutral I believe.

Those on 32-bit machines, etc, would obviously not bother using it  
unless they wanted to build fat binaries for some reason.

Downside is that a variant that might not be tested appears as an  
option. So how is universal handled? Is it always expected to work if  
it is available? Can it be disabled for the ports that for some  
reason don't support it? Can one specify "-universal" for a single  
port at build time?


>> * Add an config option to set the default bit-ness ("always 32- 
>> bit" or "native") for all builds.
>>
>> Some of it may well be in there already; I haven't been able to  
>> locate it in the docs though, e.g. where does "universal_archs"  
>> apply...?
>>
>>
>>> I reverted +universal back to meaning "10.4u SDK for ppc/i386 arch",
>>> and then made them into parameters for overriding locally if  
>>> desired.
>>
>> So is it possible, using the current MacPorts 1.6.0, to build bit- 
>> fat/quad-fat binaries, and if so, how is this accomplished (feel  
>> free to bring this onto the users-list)?
>
> That comment applied to trunk only. 1.6.0 does not have the  
> universal_archs variable, and has always built only the two 32-bit  
> architectures. MacPorts in trunk has universal_archs, which was for  
> a time set to all 4 architectures, but that didn't work well and  
> then was changed to use only the 2 again. Someone using MacPorts  
> trunk could set universal_archs to a different set of architectures  
> to include in a universal build, but I would not expect any  
> portfile author to have tested with anything other than the default  
> "ppc i386" architecture set.

Right. I do feel, however, that architecture and bit-ness need to be  
handled separately. Architechture-fat binaries, I presume, are built  
to increase usability on several machines (for binary distribution in  
some form), while bit-fat binaries are commonly built for use on the  
_same_ machine, e.g. to provide both 32- and 64-bit version of  
libraries.

I can try trunk on a demo setup, using universal_arch="ppc ppc64".  
How, exactly, do I use this variable?


/Emil


More information about the macports-dev mailing list