Dann Luciano

A lifelong student of the art of programming computers!

Compilando GCC 4.7 No Mac OS X Lion

| Comments

Atualização: 03 de agosto de 2012

Post atualizado explicando como instalar a versão mais nova. Instalando GCC 4.7.1 no Mac OS X Mountain Lion


Infelizmente por problemas políticos (acredito eu) a Apple deixou de distribuir o GCC (deste a versão 4.2 do Xcode), e passou a adotar como compilador padrão o Clang mais o llvm-gcc (desde a verão 4.1 do Xcode) que é uma interface entre o GCC e o LLVM.

Em muitos cenários isso não causaria nenhum problema, mas a interface do llvm-gcc usa a versão 4.2 do GCC. Atualmente a versão corrente do GCC é a 4.7 (estável) e 4.8 (desenvolvimento) e em se tratando de GCC uma pequena mudança de versão (minor) incluem muitas modificações/correções/novas funcionalidades. Outro problema existente é que infelizmente muitas bibliotecas e binários úteis no dia a dia dos programadores, possuem uma forte dependência com o GCC. Depois de encontrar o post do Solarian Programmmer resolvi instalar a versão mais nova do GCC.

Aproveitando a instalação criei um script em bash para baixar, extrair, compilar e instalar todos as bibliotecas necessárias bem como o próprio GCC. Eu fiz umas pequenas modificações na hora de executar o ../configure, onde altero o prefix da instalação de /usr/local para /usr/local/gcc e adiciono um sufixo ao nome final do binário do GCC que passara a se chamar gcc-4.7 ao invés de gcc.

(build_gcc.bash) download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#! /bin/bash

PREFIX=/usr/local/gcc
BUILD_FOLDER=gcc_build

if [ $UID -ne 0 ] ; then
    echo "Root Please"
    exit 1
fi

mkdir -p $BUILD_FOLDER

cd $BUILD_FOLDER

echo "Download need files"

wget ftp://ftp.gmplib.org/pub/gmp-5.0.4/gmp-5.0.4.tar.bz2 -c
wget http://www.mpfr.org/mpfr-current/mpfr-3.1.1.tar.bz2 -c
wget http://www.multiprecision.org/mpc/download/mpc-0.9.tar.gz -c
wget ftp://gcc.gnu.org/pub/gcc/snapshots/4.7.0-RC-20120302/gcc-4.7.0-RC-20120302.tar.bz2 -c

echo "Compiling gmp"

tar xfz gmp-5.0.4.tar.bz2
cd gmp*
mkdir build
cd build

../configure --prefix=$PREFIX
make
make check
make install

cd ../../

echo "Compiling mpfr"

tar xfz mpfr-3.1.0.tar.bz2
cd mpfr*
mkdir build
cd build

../configure --prefix=$PREFIX --with-gmp=$PREFIX
make
make install

cd ../../

echo "Compiling mpc"

tar xfz mpc-0.9.tar.gz

cd mpc*
mkdir build
cd build
../configure --prefix=$PREFIX --with-gmp=$PREFIX --with-mpfr=$PREFIX
make
make install

cd ../../

echo "Compiling GCC"

tar xfz gcc-4.7.0-RC-20120302.tar.bz2

cd gcc*
mkdir build
cd build
../configure --prefix=$PREFIX --enable-checking=release --with-gmp=$PREFIX --with-mpfr=$PREFIX --with-mpc=$PREFIX --program-suffix=-4.7
make -j 2
make install


echo "GCC Build Complete in " $PREFIX

cd ../../../

read -p "Erase your build directories (y/n)?"
[ "$REPLY" == "y" ] || rm -rf $BUILD_FOLDER

Para testar o novo GCC bastar adicionar a pasta /usr/local/gcc/bin no PATH do seu Terminal e digitar: $ gcc-4.7 -v

A saída deve se parecer com isso:

1
2
3
4
5
6
7
  $ gcc-4.7 -v
  Using built-in specs.  COLLECT_GCC=gcc-4.7
  COLLECT_LTO_WRAPPER=/usr/local/gcc/libexec/gcc/x86_64-apple-darwin11.3.0/4.7.0/lto-wrapper
  Target: x86_64-apple-darwin11.3.0
  Configured with: ../configure --prefix=/usr/local/gcc --enable-checking=release --with-gmp=/usr/local/gcc --with-mpfr=/usr/local/gcc --with-mpc=/usr/local/gcc --program-suffix=-4.7
  Thread model: posix
  gcc version 4.7.0 20120302 (prerelease) (GCC)

Dica, como o processo de compilação leva algumas horas vale a pena testar os pacotes distribuídos no High Performance Computing for Mac OS X. A instalação dele é super simples mas é por sua conta e risco =P.

Então é isso, qualquer problema, critica ou sugestão é só comentar ou enviar um email para dannluciano at gmail dot com.

Comments