Notes |
|
(0004652)
|
Bill Hoffman
|
2006-08-15 20:21
|
|
The ppc and i386 are not hard-coded. You should be able to just set CMAKE_OSX_ARCHITECTURES and it should work.
|
|
|
(0004816)
|
Sean McBride
|
2006-08-30 16:43
|
|
|
|
(0005403)
|
Bill Hoffman
|
2006-10-16 10:34
|
|
OK, I tracked this down a bit... If CMAKE_OSX_ARCHITECTURES has only one arch in it, it is ignored. So if you set the CMAKE_OSX_ARCHITECTURES to ppc;ppc64 then it would do something. If you set it to just ppc64 then it will just be ignored. The idea being that this was for use for universal binaray creation and not just cross compiling. If there is only one entry it is assumed to be a local build.
I guess I could have it check to see if it matches the local machine? What do you think?
|
|
|
(0005455)
|
Sean McBride
|
2006-10-18 13:05
|
|
Bill, thanks for tracking this down! Well, as you probably know, the G5 is 64 bit, and so natively can run both 'ppc' and 'ppc64'. So it's not really cross compilation per say, but rather specifiying the exact type of compilation desired. I would very much like to see all of the following work from any machine:
CMAKE_OSX_ARCHITECTURES:STRING=ppc
CMAKE_OSX_ARCHITECTURES:STRING=ppc64
CMAKE_OSX_ARCHITECTURES:STRING=ppc;ppc64
CMAKE_OSX_ARCHITECTURES:STRING=ppc;ppc64;i386
etc.
Also, keep in mind that the Universal Binary concept does not merely refer to 32bit ppc and 32bit 386. Eventually, I hope to be able to build vtk as a 4-way universal binary containing ppc, pcc64, i386, and x86_64.
I think changing CMake to do this should not be a big deal, as all CMake does (as I understand it) it change the -arch flag it passes to gcc (or icc I suppose).
So, to answer your question, I would not even check against the local machine, just use CMAKE_OSX_ARCHITECTURES to set the -arch flag. For example, I may want to build an x86_64-only build from my ppc.
What do you think?
Thanks. |
|
|
(0005467)
|
Bill Hoffman
|
2006-10-18 23:59
|
|
Any of the ones you listed with more than one arch should work in cmake today. I am not sure what the affect always having -arch would be. Would it hurt? |
|
|
(0005473)
|
Sean McBride
|
2006-10-19 11:14
|
|
No, it would not hurt. I have confirmed this by looking at the actual arguments Xcode.app passes to gcc. -arch is always there, even in non-fat builds.
|
|
|
(0006229)
|
Sean McBride
|
2007-01-22 11:44
|
|
Just to elaborate a little bit... I would like to set up a dashboard to test a 64bit build of cmake. If I specify CMAKE_OSX_ARCHITECTURES:STRING=ppc;ppc64 then all the dashboard tests will run in 32bit mode, because it is preferred over 64bit. That's why I'd like to be able to specify CMAKE_OSX_ARCHITECTURES:STRING=ppc64 (just the one) so that everything is built as 64 bit only, and I can then be sure that all tests are running in 64 bit. This isn't cross compilation. ppc64 is just as native for the G5 as ppc32. |
|
|
(0007624)
|
Sean McBride
|
2007-05-10 18:13
|
|
I have updated the summary/title of this bug to better describe the real problem.
Also, I believe this can be fixed by changing _one character_ in the CMake source. :)
cmLocalGenerator::AddLanguageFlags() has the line:
if(archs.size() > 1)
Just change it to
if(archs.size() > 0)
And I think the problem is fixed.
Again, the reason I want -arch passed all the time is because -arch is not only for making Universal Binaries. I may want to build 64-bit only (-arch ppc64) or G4+ only (-arch ppc7400).
This is not cross compilation. ppc, ppc7400, and ppc64 are all native on the G5. |
|
|
(0008796)
|
Sean McBride
|
2007-08-31 15:36
|
|
New patch attached. I tested, and it works for me. |
|
|
(0009432)
|
Bill Hoffman
|
2007-10-12 10:59
|
|
$ cvs commit -m "BUG: fix for bug 0003618 , allow one arch in OSX_ARCHS to work" cmLocalGenerator.cxx
Checking for path: /cvsroot/CMake/CMake/Source
Unrestricted user: hoffman
/cvsroot/CMake/CMake/Source/cmLocalGenerator.cxx,v <-- cmLocalGenerator.cxx
new revision: 1.237; previous revision: 1.236 |
|