Multiplatform binary generation

Mike Stump mrs@apple.com
Fri May 14 19:19:00 GMT 2004


On Friday, May 14, 2004, at 06:25  AM, deploy.kde wrote:
I am working on research project to implement executable binary for 
all major linux desktop platforms.
Great, you've just reinvented FAT executables.  I'd suggest reading up 
on the NeXT legacy.

Check out the apple-ppc-branch and the `driver driver' and the -arch 
flag.  lipo is the program the glues together multiple output files (.o 
and executable files) for multiple arches.

On darwin, the kernel (exec code) will select and load the right part 
of the file for the CPU, as well as the dynamic loaders based upon the 
current CPU setting.

We can do things like rebuild software multiple times for different 
chips of the same general family and make them FAT, so if you run on 
chip X, you can get code for chip X, as well as totally different CPU 
architectures.

An example:

	gcc -arch ppc -arch ppc970 -arch 386 -arch 686 foo.c -c -o foo.o
or
	gcc -arch ppc -arch ppc970 -arch 386 -arch 686 foo.c -o foo
would create one foo.o (or foo) that has 4 parts, internally, the 
driver driver runs the real gcc 4 times, with 4 different output files, 
then at the end, it glues them all together.

Most normal software you can build this way:

CFLAGS='-arch ...' configure && make && make install

gcc, being special, we build specially, see build_gcc in the branch for 
details.

However, having said all that, I think you should just use traditional 
techniques and not intermingle contents.

I would like to hear any your sugestions or comments before I spent 
months developing it.
Don't.




More information about the Gcc mailing list