Ho sviluppato versioni più recenti di gcc per rhel6 per diverse versioni (da 4.7.xa 5.3.1).
Il processo è abbastanza semplice grazie alle build di Fedora gcc di Redhat Jakub Jelinek trovate su koji
Basta prendere l'ultimo rpm src per qualsiasi versione richiesta (es. 5.3.1 ).
Fondamentalmente inizieresti determinando i requisiti di build emettendo la rpm -qpR src.rpm
ricerca di eventuali requisiti di versione:
rpm -qpR gcc-5.3.1-4.fc23.src.rpm | grep -E '= [[:digit:]]'
binutils >= 2.24
doxygen >= 1.7.1
elfutils-devel >= 0.147
elfutils-libelf-devel >= 0.147
gcc-gnat >= 3.1
glibc-devel >= 2.4.90-13
gmp-devel >= 4.1.2-8
isl = 0.14
isl-devel = 0.14
libgnat >= 3.1
libmpc-devel >= 0.8.1
mpfr-devel >= 2.2.1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
systemtap-sdt-devel >= 1.3
Ora arriva la parte noiosa: qualsiasi pacchetto che ha una versione superiore a quella fornita da yum per la tua distribuzione deve essere scaricato da Koji e ripetere in modo ricorsivo il processo fino a quando tutti i requisiti di dipendenza sono soddisfatti.
Io baro, tra l'altro.
Di solito riconfezionamento rpm per contenere un albero di compilazione corretto utilizzando la funzione gnu per utilizzare i requisiti correttamente posizionati e denominati, quindi gmp / mpc / mpfr / isl (non è più richiesto il cloog) e scaricato nel percorso corretto, e il nuovo (gonfio) tar viene ricostruito in un nuovo rpm src (con piccole modifiche al file spec) senza alcuna dipendenza dalle loro versioni pacchettizzate (rpm). Dato che non conosco nessuno che usi ADA, rimuovo semplicemente le porzioni relative a moscerino dallo specfile, semplificando ulteriormente il processo di compilazione, lasciandomi solo con binutils di cui preoccuparmi.
Gcc può effettivamente compilare con binutils più vecchi, quindi se hai fretta, modifica ulteriormente il file specfile per richiedere la versione binutils già presente sul tuo sistema. Ciò si tradurrà in un gcc leggermente paralizzato, ma soprattutto funzionerà abbastanza bene.
Questo funziona abbastanza bene per lo più.
AGGIORNAMENTO 1
Il metodo più semplice per aprire un rpm src è probabilmente yum installa rpm e accedi a tutto sotto ~ / rpmbuild, ma preferisco
mkdir gcc-5.3.1-4.fc23
cd gcc-5.3.1-4.fc23
rpm2cpio ../gcc-5.3.1-4.fc23.src.rpm | cpio -id
tar xf gcc-5.3.1-20160212.tar.bz2
cd gcc-5.3.1-20160212
contrib/download_prerequisites
cd ..
tar caf gcc-5.3.1-20160212.tar.bz2 gcc-5.3.1-20160212
rm -rf gcc-5.3.1-20160212
# remove gnat
sed -i '/%global build_ada 1/ s/1/0/' gcc.spec
sed -i '/%if !%{build_ada}/,/%endif/ s/^/#/' gcc.spec
# remove gmp/mpfr/mpc dependencies
sed -i '/BuildRequires: gmp-devel >= 4.1.2-8, mpfr-devel >= 2.2.1, libmpc-devel >= 0.8.1/ s/.*//' gcc.spec
# remove isl dependency
sed -i '/BuildRequires: isl = %{isl_version}/,/Requires: isl-devel = %{isl_version}/ s/^/#/' gcc.spec
# Either build binutils as I do, or lower requirements
sed -i '/Requires: binutils/ s/2.24/2.20/' gcc.spec
# Make sure you don't break on gcc-java
sed -i '/gcc-java/ s/^/#/' gcc.spec
Hai anche la possibilità di impostare il prefisso in modo che questo rpm si installi fianco a fianco senza interrompere la distribuzione rpm (ma richiede la modifica del nome e alcune modifiche ai nomi dei pacchetti interni). Di solito aggiungo un modulo ambiente in modo da poter caricare e scaricare questo gcc come richiesto (simile a come funzionano le raccolte) come parte del rpm (quindi aggiungo una nuova dipendenza).
Infine, crea l'albero rpmbuild e posiziona i file dove dovrebbero andare e costruisci:
yum install rpmdevtools rpm-build
rpmdev-setuptree
cp * ~/rpmbuild/SOURCES/
mv ~/rpmbuild/{SOURCES,SPECS}/gcc.spec
rpmbuild -ba ~/rpmbuild/SPECS/gcc.spec
AGGIORNAMENTO 2
Normalmente non si dovrebbe usare un sistema operativo "server" per lo sviluppo - ecco perché hai fedora che è già dotato dell'ultimo gcc. Ho alcuni requisiti particolari, ma dovresti davvero prendere in considerazione l'uso dello strumento giusto per l'attività: rhel / centos per eseguire app di produzione, fedora per sviluppare quelle app ecc.