É possível compilar um sistema Linux completo com o compilador da Intel em vez do GCC?

26

Talvez haja alguns problemas de compatibilidade?

Tenho a impressão de que, para sistemas baseados em Intel, o compilador Intel poderia fazer um trabalho melhor que o GCC. Talvez já exista uma distro que tenha tentado isso?

Eu acho que isso pode ser bastante simples usando o Gentoo.

barrymac
fonte
4
Algumas boas informações aqui, que eu deveria ter encontrado antes! gentoo-wiki.info/HOWTO_ICC_and_Portage
barrymac
5
Eu tenho que pensar sobre sua premissa: como você avalia qual compilador "faz um trabalho melhor"? Execução mais rápida do código? Binários menores? Tempo de compilação mais rápido?
Eli Heady
11
Eu o avaliaria em código mais rápido primeiro, binários menores em segundo, mas não me importaria muito com tamanho binário, a menos que fosse bastante dramático. Talvez outra preocupação poderia ser a eficiência energética
barrymac

Respostas:

29

Você não poderá compilar tudo com o icc. Muitos programas por aí usam extensões GCC para o idioma C. No entanto, a Intel fez um grande esforço para suportar a maioria dessas extensões; por exemplo, versões recentes do icc podem compilar o kernel do Linux.

O Gentoo é de fato sua melhor aposta se você gosta de recompilar seu software de uma maneira incomum. A página icc no wiki do Gentoo descreve os principais obstáculos.

Primeiro faça uma instalação básica do Gentoo, e emerge icc. Não remova o icc mais tarde, desde que você tenha qualquer binário compilado com o icc no seu sistema. Observe que o icc está instalado no /opt; se isso não estiver em sua partição raiz, você precisará copiar as bibliotecas icc para sua partição raiz se algum dos programas usados ​​no momento da inicialização for compilado com o icc.

Configure /etc/portage/bashrce declare suas opções de compilação favoritas; veja o wiki do Gentoo para um script mais completo que suporta a construção de pacotes diferentes com diferentes compiladores (isso é necessário porque o icc quebra alguns pacotes).

export OCC="icc" CFLAGS="-O2 -gcc"
export OCXX="icpc" CXXFLAGS="$CFLAGS"
export CC_FOR_BUILD="${OCC}"
Gilles 'SO- parar de ser mau'
fonte
13

Certamente seria uma experiência interessante. No entanto, recompilar uma distribuição Linux inteira usando um compilador alternativo não seria realmente simples. Muitos pacotes essenciais dependem do GCC e de outros utilitários da cadeia de ferramentas GNU.

Seria viável usar um compilador alternativo para os pacotes que não exigem que o GCC crie um híbrido. Pode ser possível substituir pacotes dependentes do GCC por outros que seriam criados com seu compilador, mas na maioria dos casos não há muitas alternativas. Onde houver, você precisará determinar se essas alternativas serão tão funcionais para o uso pretendido.

A verdadeira questão é: valeria a pena? Se você estiver tentando criar um sistema incorporado, um compilador alternativo poderá produzir binários menores. Se você estiver criando um cluster de computação, poderá obter uma execução mais rápida do código. Se você estiver criando uma área de trabalho, terá uma ótima experiência de aprendizado.

Eu acho que, no final (assumindo que você está construindo um desktop), você descobrirá o que muitos usuários de distribuição de origem decidem: a quantidade de tempo gasto otimizando, construindo e reconstruindo supera em muito o tempo economizado pela execução mais rápida do código. Isso não quer dizer que não deva ser feito - pode ser bem divertido. Se você fizer isso, este site seria um ótimo lugar para encontrar respostas e documentar seus esforços.

Eli Heady
fonte