8 votes

Est-il possible de compiler un programme en ligne de commande UNIX pour l'architecture Apple Silicon sur un Mac basé sur Intel ?

J'ai une interface graphique d'un programme de ligne de commande UNIX. J'ai remarqué qu'Apple a annoncé Apple Silicon Mac. Tôt ou tard, je dois construire le binaire universel de mon wrapper GUI. Mais d'abord, je dois construire un programme de ligne de commande UNIX pour Apple Silicon. Actuellement, je n'ai qu'un Mac basé sur Intel. Est-il possible de compiler un programme de ligne de commande UNIX pour l'architecture Apple Silicon sur un Mac basé sur Intel ?

Note : Je sais qu'Apple fournit le Silicon Mac mini pour $500, mais je n'ai pas l'argent maintenant.

6voto

benwiggy Points 21125

L'intérêt des binaires universels est que vous pouvez compiler le même code pour deux architectures, dont l'une (par nécessité) n'est pas le matériel que vous utilisez.

Jusqu'à présent, il était possible de compiler des binaires universels pour PPC et Intel, ou 32 bits et 64 bits, quel que soit le matériel utilisé pour la compilation.

La documentation d'Apple sur le portage vers Apple Silicon (AS) est ici : https://developer.apple.com/documentation/xcode/porting_your_macos_apps_to_apple_silicon

Notez le diagramme qui comporte les mots "Tout ordinateur Mac".

enter image description here

L'Apple Silicon Mac mini est destiné aux développeurs pour tester que leur code AS (et celui d'Apple) fonctionne bien. Il n'y a pas de Mac AS disponible à l'achat pour les non-développeurs (au 14 octobre).

Apple a déclaré que les binaires Intel fonctionneront sur l'Apple Silicon en utilisant l'émulation Rosetta 2. Vous aurez donc au moins la durée de vie de Big Sur avant de devoir créer un binaire universel.

Je dirais que vous n'avez pas besoin de vous inquiéter de ça avant :

a) Les AS Macs sont sortis,
b) les personnes qui ont acheté des AS Macs sont intéressées par votre outil ;
c) Xcode 12 est officiellement publié (ainsi que Big Sur)

à ce moment-là, la compilation d'un binaire universel pour un outil en ligne de commande devrait être assez simple, en changeant simplement quelques options.

5voto

Jcubed Points 2972

Le processus de construction d'un binaire pour une architecture différente de celle que vous exécutez est appelé compilation croisée .

Comme l'ont souligné les autres réponses, il s'agit d'un phénomène relativement courant, notamment dans l'histoire d'Apple qui est passé des processeurs 68K aux Power PC, puis à Intel, et maintenant à ARM.

Il faut savoir que toute personne qui crée une application pour iPhone ou iPad sur son Mac a effectué une compilation croisée, car ces applications utilisent déjà l'architecture ARM alors que leur Mac utilise actuellement l'architecture Intel. Il est même courant de créer des applications iOS multi-architecture, car les différentes versions de CPU utilisent en fait différentes variantes de l'architecture ARM (armv7, armv8...).

De même, il est courant de construire des variantes i386 (Intel 32 bits) et amd64/x64 (Intel 64 bits), soit indépendamment, soit en tant que binaires grossiers/universels.

Le processus de compilation croisée et de construction de binaires lourds/universels dépend beaucoup de l'environnement et de la chaîne d'outils que vous utilisez. Si vous utilisez Xcode, il s'agira de modifier les paramètres du projet et d'utiliser les outils suivants voilà ! c'est fait.

Si vous utilisez des outils de type Unix (principalement en ligne de commande), y compris make ou variants, gcc ou clang, etc., alors il peut être nécessaire de modifier plus ou moins votre processus de construction pour réaliser tout cela, avec un certain nombre d'options à modifier (architecture, mais aussi emplacement des fichiers d'en-tête et des bibliothèques), ainsi que l'ajout de l'étape qui combine les multiples binaires dépendant de l'architecture en un seul binaire lourd/universel.

Tout dépend donc de votre processus de construction actuel et des outils que vous utilisez. Mais c'est tout à fait possible.

Bien sûr, tout ceci est basé sur le fait que le code à compiler est réellement portable, c'est-à-dire qu'il ne fait pas d'hypothèses sur des choses (comme les tailles des entiers ou des pointeurs) et ne nécessite pas de code assembleur. C'était un gros problème dans le passé (surtout avec du code C pur), mais aujourd'hui, avec le nombre d'architectures pour lesquelles les logiciels sont construits, il est beaucoup moins fréquent de rencontrer des problèmes de ce type.

3voto

Douglas Points 10417

Est-il possible de compiler un programme en ligne de commande UNIX pour l'architecture Apple Silicon sur un Mac basé sur Intel ?

Oui, c'est vrai.

Il s'agit d'une réponse générale et, en fonction de vos spécificités, vous devrez modifier/adapter votre code si nécessaire.

Comment le savons-nous ? L'histoire est notre guide et elle ne se limite pas à Apple.

  • OS X a été compilé sur PowerPC puis a migré vers Intel.
  • OS X est dérivé de NeXTStep, qui fonctionnait à l'origine sur Motorola 6000, puis sur Intel, Sparc et RISC-PA.
  • Les systèmes d'exploitation Open Source comme FreeBSD sont (re)compilés pour différentes plateformes, notamment i386, AMD64, IA64, Sparc64 et ARM.
  • A titre personnel, j'ai compilé XOrg (FreeBSD) pour qu'il fonctionne sur un XServe G4.

Le changement d'architecture n'est pas aussi décourageant qu'il n'y paraît. Apple mettra les outils (XCode) et le matériel de développement à disposition (comme vous l'avez déjà mentionné). D'un point de vue purement commercial, ils doivent le faire. Proposer un nouveau système d'exploitation et commencer littéralement avec un marché d'applications pratiquement nul serait le moyen le plus sûr de tuer votre gamme de produits.

Vous disposerez des outils - que ce soit ceux d'Apple (XCode) ou ceux de la communauté Open Source. Le matériel deviendra plus disponible, ce qui réduira finalement le coût et, en fonction de votre stratégie de marché, vous n'aurez peut-être pas à vous en préoccuper avant quelques années. après L'Apple Silicon a été officiellement libéré en raison du taux d'adoption par le marché.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X