Dapper em um AMD64-X2 - Compiladores Intel
Hoje vou instalar os compiladores C e FORTRAN da Intel. Até o lançamento do gfortran, o ifc da Intel era o único compilador de FORTRAN 90 disponível para Linux. Para aqueles que acham que FORTRAN é linguagem morta, eu sugiro que vejam as comparações em Computer Language Shootout. FORTRAN só perde para C. Vejam FORTRAN contra Perl, por exemplo. É praticamente imbatível em cálculo numérico (nossos programas aqui rodam por dias e até meses).
Vamos ao que interessa: vá à pagina da Intel de compiladores linux e preencha os formulários para uso não comercial. Você vai receber uma licença por email e instruções para baixar os pacotes. Descompacte o arquivo tar.gz (l_cc_c_9.0.030.tar.gz, no meu caso). Vá para o diretório criado e rode o alien (apt-get install alien) para converter os rpms (i386 ou em64t, dependendo da sua arquitetura). Rode o comando abaixo, em apenas uma linha:
$ fakeroot alien -d intel-icce9-9.0-030.em64t.rpm intel-isubhe9-9.0-030.em64t.rpm intel-iidbe9-9.0-035.em64t.rpm intel-icce9-9.0-030.em64t.rpm
O processo demora um pouco.. Infelizmente o alien não faz todo o trabalho. Vamos ajeitar os pacotes:
$ mkdir tmp
$ dpkg-deb -e intel-icce9_9.0-31_amd64.deb tmp/DEBIAN
$ dpkg-deb -x intel-icce9_9.0-31_amd64.deb tmp
O -e extrai os arquivos de controle e o -x extrai os arquivos do pacote. O DINSTALL é para mudar o diretório de instalação (vai ficar no /opt/intel) . Procurando o INSTALLDIR que está erradamente setado nos scripts:
$ grep \<INSTALLDIR\> tmp/opt/intel/cce/9.0/bin/*
Vemos que a expressão aparece nos arquivos, icc, icpc, iccvars.sh e iccvars.csh. Vamos ao sed (pode usar o vi, se preferir)
$ sed -i 's/<INSTALLDIR>/\/opt\/intel\/cce\/9.0/g' tmp/opt/intel/cce/9.0/bin/icc
$ sed -i 's/<INSTALLDIR>/\/opt\/intel\/cce\/9.0/g' tmp/opt/intel/cce/9.0/bin/icc*sh
$ sed -i 's/<INSTALLDIR>/\/opt\/intel\/cce\/9.0/g' tmp/opt/intel/cce/9.0/bin/icpc
Quase lá. Agora você tem duas opções: ou faz um pacote para distribuir ou um só para você. A diferença é se você quer incluir a licença que recebeu no email no pacote, ou não. Se preferir distribuir basta
$ dpkg -b tmp icc_9.0.30_1.amd64.deb
ou outro nome que queira dar ao pacote -- eu mudei para icc, pois foi o nome que dei na versão anterior: poderia mudar o Provides no DEBIAN/control. Se preferir copie o arquivo de licença para tmp/opt/intel/cce/9.0/licenses, antes de reconstruir o pacote. O pacote com os headers também tem um bugzinho: tem o uninstall que existe no pacote do icc. Assim, vamos fazer
$ dpkg -e intel-isubhe9_9.0-31_amd64.deb tmp/DEBIAN
$ dpkg -x intel-isubhe9_9.0-31_amd64.deb tmp
$ rm tmp/opt/intel/cce/9.0/bin/uninstall.sh
$ dpkg -b tmp intel-isubhe9_9.0-31_amd64.deb
Instalando os pacotes
$ sudo dpkg -i icc_9.0.30_1.amd64.deb
$ sudo dpkg -i intel-iidbe9_9.0-36_amd64.deb
$ sudo dpkg -i intel-isubhe9_9.0-31_amd64.deb
O procedimento para a criação do pacote FORTRAN é idêntico e fica como exercício para o leitor ;)
Para executar o compilador é necessário atualizar as variáveis de ambiente, rodando
$ source /opt/intel/cce/9.0/bin/iccvars.sh
Esta linha pode ser adicionada ao seu .bashrc.
Problemas:
icc: error: could not find linux directory based on g++
Solução: export LC_ALL=C
Como o Renato apontou nos comentários, o g++ é dependência dos pacotes, embora não relatado pelo alien. Se quiser fazer o serviço bem limpo, inclua build-essential e g++ no Depends: do arquivo tmp/DEBIAN/control antes de reconstruir o pacote.