Est-il possible de compiler un système Linux complet avec le compilateur d'Intel au lieu de GCC?

26

Peut-être qu'il y a des problèmes de compatibilité?

J'ai l'impression que pour les systèmes basés sur Intel, le compilateur Intel ferait potentiellement un meilleur travail que GCC. Peut-être qu'il y a déjà une distribution qui a tenté cela?

Je pense que cela pourrait être assez simple en utilisant Gentoo.

barrymac
la source
4
Quelques bonnes infos ici, que j'aurais dû trouver avant! gentoo-wiki.info/HOWTO_ICC_and_Portage
barrymac
5
Je dois me poser des questions sur votre prémisse: comment jugez-vous quel compilateur fait "un meilleur travail"? Exécution de code plus rapide? Des binaires plus petits? Temps de compilation plus rapide?
Eli Heady
1
Je le mesurerais d'abord sur du code plus rapide, puis sur des binaires plus petits, mais je ne me soucierais pas vraiment de la taille binaire à moins que ce ne soit assez dramatique. Une autre préoccupation pourrait peut-être être l'efficacité énergétique
barrymac

Réponses:

29

Vous ne pourrez pas tout compiler avec icc. De nombreux programmes utilisent des extensions GCC au langage C. Cependant, Intel a fait beaucoup d'efforts pour prendre en charge la plupart de ces extensions; par exemple, les versions récentes d'icc peuvent compiler le noyau Linux.

Gentoo est en effet votre meilleur pari si vous aimez recompiler votre logiciel de manière inhabituelle. La page icc sur le wiki Gentoo décrit les principaux obstacles.

Effectuez d'abord une installation de base de Gentoo, et emerge icc. Ne supprimez pas icc plus tard tant que vous avez un binaire compilé avec icc sur votre système. Notez que icc est installé dans /opt; si ce n'est pas sur votre partition racine, vous devrez copier les bibliothèques icc sur votre partition racine si l'un des programmes utilisés au démarrage est compilé avec icc.

Configurez /etc/portage/bashrcet déclarez vos options de compilation préférées; voir le wiki Gentoo pour un script plus complet qui prend en charge la construction de différents packages avec différents compilateurs (cela est nécessaire car icc casse certains packages).

export OCC="icc" CFLAGS="-O2 -gcc"
export OCXX="icpc" CXXFLAGS="$CFLAGS"
export CC_FOR_BUILD="${OCC}"
Gilles 'SO- arrête d'être méchant'
la source
13

Ce serait certainement une expérience intéressante. Recompiler une distribution Linux entière en utilisant un compilateur alternatif ne serait cependant pas vraiment simple. De nombreux packages essentiels dépendent de GCC et d'autres utilitaires de chaîne d'outils GNU.

Il serait possible d'utiliser un compilateur alternatif pour les packages qui ne nécessitent pas GCC pour créer un hybride. Il pourrait être possible de remplacer les paquets dépendants de GCC par d'autres qui seraient construits avec votre compilateur, mais dans la plupart des cas, il n'y a pas trop d'alternatives. Là où il y en a, vous devrez déterminer si ces alternatives seront aussi fonctionnelles pour votre utilisation prévue.

La vraie question est cependant: cela en vaudrait-il la peine? Si vous essayez de construire un système embarqué, un autre compilateur peut produire des binaires plus petits. Si vous construisez un cluster de calcul, vous pouvez obtenir une exécution de code plus rapide. Si vous créez un bureau, vous obtiendrez une excellente expérience d'apprentissage.

Je pense qu'en fin de compte (en supposant que vous construisez un bureau), vous constaterez que ce que de nombreux utilisateurs de distribution de sources décident finalement: le temps consacré à l'optimisation, à la construction et à la reconstruction dépasse de loin le temps gagné par une exécution plus rapide du code. Cela ne veut pas dire que cela ne devrait pas être fait - cela pourrait être assez amusant. Si vous le faites, ce site serait un excellent endroit pour trouver des réponses et documenter vos efforts.

Eli Heady
la source