On Feb 25, 2007, at 04:06, Cédric Luthi wrote:
On 2/25/07, Ryan Schmidt wrote:
http://trac.macports.org/projects/macports/changeset/22269
Why are -O and -g being used in the universal variant?
Probably because the author copy-pasted the Technical Note TN2137 <http://developer.apple.com/technotes/tn2005/tn2137.html> example ;-)
Thanks for noticing that; that sounds likely. I have submitted feedback to Apple to clarify the use of those options. However, they have not acted upon other feedback I sent them months ago about that same article, so I don't expect them to act on this either. My understanding is that -g turns on some kind of debugging code, and -O is an optimization level. Neither of those seem to me to have any bearing on a universal binary. That is: if -g or -O are useful, then they would be useful for all ports at all times, and not just in the +universal variants of some ports. Therefore, I believe -g and -O should be removed from the +universal variants, where they occur. I have built universal binaries myself outside of MacPorts, and I did not use the -g or -O options like that.
By the way, this technical note also says: "Note: On an Intel-based Macintosh system the libraries are already universal, and support the Intel and PowerPC architectures, and you may specify only the -arch i386 -arch ppc options for CFLAGS; on a PowerPC-based Macintosh, you must use the MacOSX10.4u SDK"
If I remember correctly from the tests I did some time ago, "you may specify only" should read "you must specify only". Specifying the isysroot on Intel Macs would fail the compilation!
I don't see why that would be so. The universal 10.4 SDK is there to provide you with universal versions of system libraries regardless of what platform you're building on. It should always be safe and correct to use the universal SDK.
So this command: env CFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc" LDFLAGS="-arch i386 -arch ppc" ./configure ...
would work on PPC Macs but would fail on Intel Macs.
As I'm not on an Intel Mac right now, I can't test. Can anyone confirm this ?
I do not believe your assessment is correct here either. I believe using... env CFLAGS="-arch i386 -arch ppc" LDFLAGS="-arch i386 -arch ppc" ./ configure ...would produce a universal binary on an Intel Mac, because on an Intel Mac, the system libraries are universal, but on a PowerPC Mac, the system libraries are PPC only, so this would not produce a universal binary. It would probably produce error messages when trying to build the -arch i386 part. I think I heard somewhere that in 10.5 the system libraries will be universal on both architectures. But I see no reason why you shouldn't always specify the universal SDK using -isysroot.