mardi 20 mars 2007

Comment créer un "Universal Binary" sous Mac OS X

Comme la gamme Apple est depuis 2006 "en transition" entre l'architecture PowerPC et l'architecture Intel, on peut se demander si tout ceci ne cause pas de problèmes.

En fait, grâce à l'architecture et aux outils de Mac OS X, cela se passe très bien.
Actuellement, un grand nombre de programmes sont distribués en "Universal Binaries", c'est à dire en bref qu'ils contiennent des exécutables PowerPC et Intel.
Quoiqu'il en soit, sur un Mac Intel sous Mac OS X, si vous essayez de lancer un exécutable PowerPC, il tournera de toutes façons gràce à Rosetta, le composant de Mac OS X qui traduit directement le code PowerPC en code Intel.

Il est intéressant de constater que sous Mac OS X, il est possible de créer un seul fichier exécutable qui contient les binaires pour les deux architectures PowerPC et Intel. Il s'agit en fait de "fat binaries" (qui sont appelées par Apple de l'euphémisme "universal binaries"...). Le concept de "fat binaries" est en fait relativement ancien, puisqu'il vient de NextStep, qui est un peu l'aïeul de Mac OS X. En fait dans le cas de Mac OS X les "fat binaries" sont une des fonctionnalités des exécutables Mach-O.

Regardez:
(Vous devez avoir installé XCode pour que ceci fonctionne)
Pour créer un "fat binary":
[pierre@ibook] /Users/pierre> gcc -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk hello.c

Observons le résultat:
[pierre@ibook] /Users/pierre> file a.out
a.out: Mach-O fat file with 2 architectures
a.out (for architecture i386): Mach-O executable i386
a.out (for architecture ppc): Mach-O executable ppc


(Ceci a été effectué sur Mac OS X Tiger sur une machine PowerPC)

Le seul inconvénient de la migration de PowerPC vers Intel est que les applications "Classic" (c'est à dire, développées pour Mac OS 7.x, 8.x, 9.x) sont pour la poubelle. Enfin, c'est peut-être le bon endroit :).