====== Installing or Building Compilers ======
\\
This page regroups the commands to build GCC or related to other compilers. If you get an error using these instructions, do not hesitate to mail me.
Few notes before we start :
* To know detailed information on your current GCC, and how it was built :
echo | gcc -v -x c -E -
* The equivalent of -lgfortran for intel compiler: -lifcore.
\\
===== Building GCC =====
\\
To build GCC, you need another GCC and 3 libraries: GMP, MPFR, and MPC.\\
Note that all instructions are provided here : http://gcc.gnu.org/install/index.html\\
I strongly recommend referring to these instructions if you encounter any problem. Note that the documentation to build Graphite GCC is not complete.\\
I suggest starting with the default libraries furnished by the GCC team, available at : ftp://gcc.gnu.org/pub/gcc/infrastructure/\\
If you are on a console, here are the exact files locations :\\
ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2\\
ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2\\
ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz\\
If you want using new versions of these libraries, the web sites are :\\
http://gmplib.org/\\
http://www.mpfr.org/\\
http://www.multiprecision.org/\\
Now, download your GCC from ftp://gcc.gnu.org/pub/gcc/releases/\\
We will use here the GCC 4.6.3: ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.6.3/gcc-4.6.3.tar.bz2\\
There are now two ways to do it, with pro and cons :\\
* Let GCC compile GMP, MPFR and MPC itself, and include them in its own directories. The easy way. Only if you do not plan to use GMP, MPFR and MPC in the futur.
* Compile GMP, MPFR and MPC separately, and link them to GCC. The more complicated way (but not very difficult). If you plan to use GMP, MPFR and MPC in the future.
For information, my GCC and Kernel version used to build here are :
$ gcc --version
gcc (GCC) 4.4.6 20110731 (Red Hat 4.4.6-3)
$ uname -a
Linux Gorky 2.6.32-220.el6.x86_64 GNU/Linux
\\
==== Simple Build ====
\\
First method consist in extracting GCC and then extracting all of the 3 libraries inside the GCC source directory and rename them as gmp, mpfr and mpc :
mkdir $HOME/GCC-BUILD
cd $HOME/GCC-BUILD
wget ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.6.3/gcc-4.6.3.tar.bz2
tar jxvf gcc-4.6.3.tar.bz2
cd gcc-4.6.3
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
tar jxvf gmp-4.3.2.tar.bz2
mv gmp-4.3.2 gmp
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
tar jxvf mpfr-2.4.2.tar.bz2
mv mpfr-2.4.2 mpfr
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
tar jxvf mpc-0.8.1.tar.gz
mv mpc-0.8.1 mpc
Then, GCC should __**never**__ be built inside its source directory, configure and build in another directory :
mkdir ../build
cd ../build
We suppose you want to install GCC in /soft/gcc-4.6.3, and that you want C, C++ and FORTRAN. I voluntary disabled multilib, because I suppose you are on a x64 (64bits) system and already have a GCC installed and glibc with it. No need to add support for x86 (32bits) for this new GCC.
Note also that if you want to know how your previous GCC was build, you can use :
echo | gcc -v -x c -E -
Now, configure :
../gcc-4.6.3/./configure --prefix=/soft/gcc-4.6.3 --enable-languages=c,c++,objc,obj-c++,fortran --disable-multilib
After this, if everything is OK, launch the compilation, using: make\\
or if you want to use all of your CPU cores :
export NUM_CORES=`cat /proc/cpuinfo | grep processor | wc -l`
make -j $NUM_CORES
This step is long, because for its safety, GCC will compile himself once, and then compile itself twice to confirm its integrity. 3 steps then.\\
After, check that your GCC is correct, using :
make -k check
And to finish, if the check ran without errors, install it :
make install
Now, to use your new GCC, you simply need to export few environment variables :
export GCCHOME=/soft/gcc-4.6.3
export PATH=/soft/gcc-4.6.3/bin:$PATH
export MANPATH=/soft/gcc-4.6.3/share/man:$MANPATH
export LD_LIBRARY_PATH=/soft/gcc-4.6.3/lib64:$LD_LIBRARY_PATH
export COMPILER=gcc
export COMPILER_VER=4.6.3
export CC=gcc
export CXX=g++
export F77=gfortran
export F90=gfortran
export FC=gfortran
Check if everything is correct :
which gcc; gcc --version
Note that these variables will last until you close your terminal session. You can add them in your shell init file (for bash: .bashrc, for csh: .cshrc, etc) to make it permanent.
\\
==== Standard Build ====
\\
Second method is recommended for HPC users: building everything separately, in a certain order.
cd $HOME
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
tar jxvf gmp-4.3.2.tar.bz2
cd gmp-4.3.2
./configure --prefix=/soft/gmp/4.3.2 --enable-cxx
make -j 8
make check
make install
cd ..
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
tar jxvf mpfr-2.4.2.tar.bz2
cd mpfr-2.4.2
./configure --prefix=/soft/mpfr/2.4.2 --with-gmp=/soft/gmp/4.3.2
make -j 8
make check
make install
cd ..
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
tar jxvf mpc-0.8.1.tar.gz
cd mpc-0.8.1
./configure --prefix=/soft/mpc/0.8.1 --with-gmp=/soft/gmp/4.3.2 --with-mpfr=/soft/mpfr/2.4.2
make -j 8
make check
make install
cd ..
Add libs to environment variable, do not forget this step :
export LD_LIBRARY_PATH=/soft/gmp/4.3.2/lib:/soft/mpfr/2.4.2/lib:/soft/mpc/0.8.1/lib:$LD_LIBRARY_PATH
wget ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.6.3/gcc-4.6.3.tar.bz2
tar jxvf gcc-4.6.3.tar.bz2
cd gcc-4.6.3
../gcc-4.6.3/./configure --prefix=/soft/gcc-4.6.3 --enable-languages=c,c++,objc,obj-c++,fortran --disable-multilib --with-gmp=/soft/gmp/4.3.2 --with-mpfr=/soft/mpfr/2.4.2 --with-mpc=/soft/mpc/0.8.1
make -j 8
make -k check
make install
Again, to use this GCC, just add it to environment variables :
export GCCHOME=/soft/gcc-4.6.3
export PATH=/soft/gcc-4.6.3/bin:$PATH
export MANPATH=/soft/gcc-4.6.3/share/man:$MANPATH
export LD_LIBRARY_PATH=/soft/gcc-4.6.3/lib64:$LD_LIBRARY_PATH
export COMPILER=gcc
export COMPILER_VER=4.6.3
export CC=gcc
export CXX=g++
export F77=gfortran
export F90=gfortran
export FC=gfortran
\\
==== Graphite Build ====
\\
Last way to build GCC is to build a Graphite GCC. BEWARE ! This GCC is experimental, and tricky to build, use it only if needed.
The following documentation can be found on GCC web site : http://gcc.gnu.org/wiki/Graphite_Build. However, it lacks some important parts.
To build Graphite GCC, you need to use the second method, with 2 additional libraries: PPL and Cloog For PPL.\\
http://www.cloog.org/\\
http://bugseng.com/products/ppl/
I strongly recommend using the ones provided by GCC, they do not seems to be compatible at first use, but they are, trust me.
Here we go, restart from scratch, and follow these steps without omitting anything (the enable-cxx is a pre-requite for PPL).
cd $HOME
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
tar jxvf gmp-4.3.2.tar.bz2
cd gmp-4.3.2
./configure --prefix=/soft/gmp/4.3.2 --enable-cxx
make -j 8
make check
make install
cd ..
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/ppl-0.11.tar.gz
tar xvzf ppl-0.11.tar.gz
cd ppl-0.11
./configure --prefix=/soft/ppl/0.11 --with-gmp-prefix=/soft/gmp/4.3.2 LDFLAGS="-L/soft/gmp/4.3.2/lib" CPPFLAGS="-I/soft/gmp/4.3.2/include" --enable-optimization=speed
make -j 8
make check
make install
cd ..
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/cloog-ppl-0.15.11.tar.gz
tar xvzf cloog-ppl-0.15.11.tar.gz
cd cloog-ppl-0.15.11
./configure --prefix=/soft/cloog-ppl/0.15.11 --with-gmp=/soft/gmp/4.3.2 --with-ppl=/soft/ppl/0.11
make -j 8
make check
make install
cd ..
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
tar jxvf mpfr-2.4.2.tar.bz2
cd mpfr-2.4.2
./configure --prefix=/soft/mpfr/2.4.2 --with-gmp=/soft/gmp/4.3.2
make -j 8
make check
make install
cd ..
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
tar jxvf mpc-0.8.1.tar.gz
cd mpc-0.8.1
./configure --prefix=/soft/mpc/0.8.1 --with-gmp=/soft/gmp/4.3.2 --with-mpfr=/soft/mpfr/2.4.2
make -j 8
make check
make install
cd ..
export LD_LIBRARY_PATH=/soft/gmp/4.3.2/lib:/soft/mpfr/2.4.2/lib:/soft/mpc/0.8.1/lib:/soft/ppl/0.11/lib:/soft/cloog-ppl/0.15.11/lib:$LD_LIBRARY_PATH
wget ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.6.3/gcc-4.6.3.tar.bz2
tar jxvf gcc-4.6.3.tar.bz2
cd gcc-4.6.3
../gcc-4.6.3/./configure --prefix=/soft/gcc-4.6.3 --enable-languages=c,c++,objc,obj-c++,fortran --disable-multilib --with-gmp=/soft/gmp/4.3.2 --with-mpfr=/soft/mpfr/2.4.2 --with-mpc=/soft/mpc/0.8.1
make -j 8
Before you go any further, note that the test will not work (you will get errors like "make[2]: autogen: Command not found"). However, if the build (make -j 8) made it without errors, you can suppose it is sufficient to ignore the check and go directly to install. Do not forget that GCC Graphit is experimental.
make -k check
make install
Again, to use this GCC, just add it to environment variables :
export GCCHOME=/soft/gcc-4.6.3
export PATH=/soft/gcc-4.6.3/bin:$PATH
export MANPATH=/soft/gcc-4.6.3/share/man:$MANPATH
export LD_LIBRARY_PATH=/soft/gcc-4.6.3/lib64:$LD_LIBRARY_PATH
export COMPILER=gcc
export COMPILER_VER=4.6.3
export CC=gcc
export CXX=g++
export F77=gfortran
export F90=gfortran
export FC=gfortran
You should be able to add new compiling options like -floop-interchange -floop-strip-mine -floop-block
Here are a list of errors you could encounter :
checking for the GMP library version 4.1.3 or above... no
configure: error: Cannot find GMP version 4.1.3 or higher.
GMP is the GNU Multi-Precision library:
see http://www.swox.com/gmp/ for more information.
When compiling the GMP library, do not forget to enable the C++ interface:
add --enable-cxx to the configuration options.
Means first of all that you forgot to compile GMP with the --enable-cxx flag. Then, even with this flag, the configure cannot find GMP.
Take a lok at the config.log :
configure:11105: checking for the GMP library version 4.1.3 or above
configure:11194: g++ -o conftest -g -O2 -frounding-math conftest.cpp -lgmpxx -lgmp >&5
conftest.cpp:83:19: error: gmpxx.h: No such file or directory
The configure cannot find gmpxx.h... Note that you indicated it the GMP directory. There is a BUG. You can use --with-gmp-prefix or --with-gmp, it does not use it. The trick is to add the includes and the libraries in the compiler flags : LDFLAGS="-L/soft/gmp/4.3.2/lib" CPPFLAGS="-I/soft/gmp/4.3.2/include"
And then...
checking for the GMP library version 4.1.3 or above... yes
- if you still encounter this error, upgrade to gmp-5.0.5.
checking for suffix of object files... configure: error: in `/home/manu/gcc/gcc/i686-pc-linux-gnu/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
make[2]: *** [configure-stage1-target-libgcc] Error 1
make[2]: Leaving directory `/home/manu/gcc/gcc'
See here : http://gcc.gnu.org/wiki/FAQ#configure_suffix
You simply forgot to add GMP, MPFR and MPC into your LD_LIBRARY_PATH. Example :
export LD_LIBRARY_PATH=/soft/gmp/4.3.2/lib:/soft/mpfr/2.4.2/lib:/soft/mpc/0.8.1/lib:$LD_LIBRARY_PATH
You can find a lot of additional information in this topic : http://gcc.gnu.org/ml/gcc-help/2012-07/msg00129.html.
\\
===== Building R =====
\\
Version : 2.15.2\\
Compiler : intel icc 12.1.3\\
./configure --prefix=/soft/R/2.15.2 --enable-R-shlib --enable-R-static-lib --enable-static --enable-shared CC=icc CFLAGS="-g -O3 -wd188 -ip -mp" F77=ifort FLAGS="-g -O3 -mp" CXX=icpc CXXFLAGS="-g -O3 -mp" FC=ifort FCFLAGS="-g -O3 -mp"
make
make check
make install
Then, to add packages, simply download them (url, replace mypackage by the name of the package : http://cran.r-project.org/web/packages/mypackage/index.html).
Then, use the auto-install tool (example) :
wget http://cran.r-project.org/src/contrib/Rcpp_0.10.2.tar.gz
tar xvzf Rcpp_0.10.2.tar.gz
R CMD INSTALL Rcpp
If you get dependency issues, download the packages required. You barely need 2 or 3 additional packages to resolve dependency issues.
\\
===== Installing Intel 13.3 =====
\\
Version: Intel 13, update 3, parallel studio x86_64
OS: Ubuntu 12.04 Amd64, CentOS 6.4, SLES 11 SP3. (Be careful, the intel 13 installer do not know Ubuntu 13.04 for now, and will not install properly: works, but always need to specify system include directories and libs).
Install pre-requite :
On ubuntu :
sudo apt-get install build-essential openjdk-7-jre gcc-multilib libstdc++6
On CentOS Amd64, you need to link kernel source to make the installer detect them.
yum -y install java7 gcc-c++-4.4.7-3.el6.x86_64 libstdc++-4.4.7-3.el6.i686 yum -y install kernel-devel kernel-source
Then creat a link (depending on your kernel of course) :
ln -s /usr/src/kernels/2.6.32-358.11.1.el6.x86_64 /usr/src/linux-2.6.32-358.6.2.el6.x86_64
Then launch the install :
sudo ./install.sh
The installer is simple to use. Skip optional pre-requite step if the only pre-requite is potrace protection is active, we will deal with it after.
After the installation, the installer will give you this :
To get started using Intel(R) VTune(TM) Amplifier XE 2013 Update 5:
- To set your environment variables: source /soft/compiler/intel-13.3/vtune_amplifier_xe_2013/amplxe-vars.sh
- To start the graphical user interface: amplxe-gui
- To use the command-line interface: amplxe-cl
- For more getting started resources: /soft/compiler/intel-13.3/vtune_amplifier_xe_2013/documentation/en/welcomepage/get_started.html.
To get started using Intel(R) Inspector XE 2013 Update 5:
- To set your environment variables: source /soft/compiler/intel-13.3/inspector_xe_2013/inspxe-vars.sh
- To start the graphical user interface: inspxe-gui
- To use the command-line interface: inspxe-cl
- For more getting started resources: /soft/compiler/intel-13.3/inspector_xe_2013/documentation/en/welcomepage/get_started.html.
To get started using Intel(R) Advisor XE 2013 Update 2:
- To set your environment variables: source /soft/compiler/intel-13.3/advisor_xe_2013/advixe-vars.sh
- To start the graphical user interface: advixe-gui
- To use the command-line interface: advixe-cl
- For more getting started resources: /soft/compiler/intel-13.3/advisor_xe_2013/documentation/en/welcomepage/get_started.html.
To get started using Intel(R) Composer XE 2013 Update 3 for Linux*:
- Set the environment variables for a terminal window using one of the
following (replace "intel64" with "ia32" if you are using a 32-bit
platform).
For csh/tcsh:
$ source /soft/compiler/intel-13.3/bin/compilervars.csh intel64
For bash:
$ source /soft/compiler/intel-13.3/bin/compilervars.sh intel64
To invoke the installed compilers:
For C++: icpc
For C: icc
For Fortran: ifort
To get help, append the -help option or precede with the man command.
- For more getting started resources:
/soft/compiler/intel-13.3/composer_xe_2013/Documentation/en_US/get_started_lc.htm.
/soft/compiler/intel-13.3/composer_xe_2013/Documentation/en_US/get_started_lf.htm.
Keep that somewhere, you will need it. To simply use the compilers, launch them using the given script above :
source /soft/compiler/intel-13.3/bin/compilervars.sh intel64
If you want to use the Amplifier, use :
source /soft/compiler/intel-13.3/vtune_amplifier_xe_2013/amplxe-vars.sh
Not that the amplifier will not work properly because of potrace protection on Ubuntu system. However, deactivating potrace is a security leak. I suggest you do not use the next command on a server, but only on a workstation. Note that this command effect will not stay at next reboot.
To deactivate potrace, login as root and use :
sudo su
echo 0 > /proc/sys/kernel/yama/ptrace_scope
exit