gcc

Z funus.net

Buduję sobie gcc 4.6.1 na Linuksie.

Spis treści

[edytuj] Środowisko

Ponieważ chcę to zainstalować "z boku", a konkretnie w katalogu ~/opt, więc robię skrypt env.sh ustawiający odpowiednie zmienne środowiska:

export prefix=$HOME/opt
export destdir=$HOME/opt/stow
export PATH=$prefix/bin:$PATH
export LD_LIBRARY_PATH=$prefix/lib:$prefix/lib64${LD_LIBRARY_PATH+:}$LD_LIBRARY_PATH
export LIBRARY_PATH=$prefix/lib:$prefix/lib64${LIBRARY_PATH+:}$LIBRARY_PATH
export C_INCLUDE_PATH=$prefix/include${C_INCLUDE_PATH+:}$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=$prefix/include${CPLUS_INCLUDE_PATH+:}$CPLUS_INCLUDE_PATH

($prefix/lib64 dopisałem już po zbudowaniu całości, okazało się niezbędne, by poszło "make check" w jednej z bibliotek, których wymagał gcc.)

Skrypt ten należy wciągnąć do bieżącego basha (. env.sh) przez przystąpieniem do budowania kompilatora oraz bibliotek, od których zależy, a potem, po zbudowaniu, prawdopodobnie też będzie trzeba ustawiać te zmienne by móc nowego kompilatora używać.

[edytuj] Wymagania

Wymagania opisane w pliku INSTALL/prerequisites.html [1], znajdującym się w paczce ze źródłami gcc.

  • gmp-4.3.2
./configure --prefix=$prefix --enable-cxx && make && make install
  • mpfr-2.4.2 lub nowszy (użyłęm 3.1.0)
./configure --prefix=$prefix --with-gmp=$prefix && make && make install
  • mpc-0.8.1 lub nowszy (użyłem 0.9)
./configure --prefix=$prefix --with-gmp=$prefix --with-mpfr=$prefix && make && make install
  • ppl-0.11 (uzyłem 0.11.2)
./configure --prefix=$prefix --with-gmp-prefix=$prefix && make && make install
  • cloog-ppl 0.15 (użyłem 0.15.11; dopuszczalne jest też 0.16 ale z dodatkowymi opcjami)
./configure --prefix=$prefix --with-ppl=$prefix --with-gmp=$prefix && make && make install

Oczywiście po zbudowaniu każdego z tych pakietów warto zapuścić testy modułowe (make check), aby się upewnić, że wszystko działa, jak należy.

[edytuj] Kompilacja kompilatora

mkdir gcc-objdir
cd gcc-objdir
$gcc_srcdir/configure --prefix=$prefix --with-gmp=$prefix --with-mpfr=$prefix --with-mpc=$prefix \
                      --with-ppl=$prefix --with-cloog=$prefix --without-local-prefix

[edytuj] make check

Po zbudowaniu i zainstalowaniu, zabrałem się za wykonywanie testów modułowych. O ile poprzednia instalacja (bardzo zbliżona, o ile nie identyczna) na maszynie 32-bitowej przetestowała się bez zastrzeżeń, to tarez, na moim 64-bitowym Debianie pojawiły się pewne błędy:

  • gmp-4.3.2
rootrem.c:338: GNU MP assertion failed: bn >= qn
/bin/sh: line 4: 32613 Przerwane               ${dir}$tst
FAIL: reuse
rootrem.c:338: GNU MP assertion failed: bn >= qn
/bin/sh: line 4: 32638 Przerwane               ${dir}$tst
FAIL: t-root

  • gcc-4.6.1 - samego kompilatora nie przetestowałem, bo nie chciało mi się już ściągać i składać kolejnych paczek.[2]