gfortran Install: My View
GCC Install Including gfortran
June 2014, Includes Some Documentation Review and Comments
I was looking for ways of installing gfortran, but everything seems to indicate that installing gcc and g++ along with gfortran is a good idea too, since almost every example, nightly build, etc. includes the three compilers: gcc, g++, and gfortran... Actually, according to https://gcc.gnu.org/ ("GCC, the GNU Compiler Collection") there is a compiler collection, including gfortran, which is referred to as GCC (I think it's too close to gcc, the GNU C compiler, but...). The home page of gfortran is at https://gcc.gnu.org/fortran/ where, near the beginning, the section "The Wiki and Getting the Compiler" points to the gfortran wiki, and makes clear the two general ways of obtaining the compiler: "The GNU Project is about providing source code for its programs. For convenience, a number of people regularly build binaries for different platforms." i.e. either in source code or platform-specific binaries. The gfortran wiki, at https://gcc.gnu.org/wiki/GFortran has a "Quick links" section, which includes a "Download" title with three options: a) "Binaries for Windows, Linux, MacOS and much more!" b) "Vendor-provided packages for common OS distributions" c) "Source c". I'm usually not the system manager of the platforms I use (those used in production environments), so option b) is rarely useful for me. Also, from a more conceptual point of view, I think option b) is a flavor of option a): just "another" binary form. 1.- Install gfortran using binaries ------------------------------- The gfortran wiki refers to the web page "Binaries available for gfortran" at https://gcc.gnu.org/wiki/GFortranBinaries (from the "Quick links" section at https://gcc.gnu.org/wiki/GFortran) And the installation using binaries should be simple if you find the corresponding "unofficial gfortran binary package" as explained in the web page. Since every computer where I use gfortran is Linux, the "GNU/Linux" section is the most useful for me. The step-by-step installation of gfortran in a 64-bit Linux is relatively simple: a) Download binaries: the last ones I downloaded gcc-4.10.tar.xz gcc-4.8-infrastructure.tar.xz b) I installed in $HOME/gnu-compilers % GNUINSTDIR=$HOME/gnu-compilers % cp gcc-4.10.tar.xz $GNUINSTDIR % cp gcc-4.8-infrastructure.tar.xz $GNUINSTDIR % cd $GNUINSTDIR % tar -xvf gcc-4.10.tar.xz % cp gcc-4.8-infrastructure.tar.xz gcc-4.10 % cd gcc-4.10 % tar -xvf gcc-4.8-infrastructure.tar.xz c) Set environment vars. % export LD_LIBRARY_PATH=$GNUINSTDIR/gcc-4.10/lib64:$LD_LIBRARY_PATH % export PATH=$GNUINSTDIR/gcc-4.10/bin:$PATH Take into account that gcc-4.8-infrastructure.tar.xz is necessary for GCC version 4.8 and later, and it has to be unpacked in $GNUINSTDIR/gcc-4.10 according to the documentation in the web page. Step c) is needed for using the compiler, which is installed in steps a) and b). 2.- Install gfortran using source code ---------------------------------- You should install from source code if either no binary form fits your platform/ environment or you want to contribute to or change the actual source code of the compiler/s, which is also referred to as a) being a "Distributor" at https://gcc.gnu.org/install/configure.html b) "for modifying GCC" at https://gcc.gnu.org/install/prerequisites.html As you may note, at this point there is almost no reference to gfortran (of gcc, by the way) at all, just GCC. The gfortran wiki refers to the web page "Download gfortran source code" at https://gcc.gnu.org/wiki/GFortranSource (from the "Quick links" section at https://gcc.gnu.org/wiki/GFortran, "Download"...) There are several options (well... basically, two options) from here, which I think would depend on what you want to do with GCC sources: a) "just" install, b) modify/ contribute. I'll make a subsection for each of them, since I think the step-by-step procedure would be different from the very first step, which is downloading the sources... 2.1) Install gfortran from source code: simple steps, not necessarily complete for modifying and/or contributing to the GCC or gfortran in particular Initially, there seems to be several pages where the installation from source code is described: a) A brief section, "Configuration and compiling", at https://gcc.gnu.org/wiki/GFortranSource which refers to "compiler build instructions", at https://gcc.gnu.org/install/ b) A brief section, "Building from Source", at https://gcc.gnu.org/wiki/GFortranBinaries which also refers to two different web pages, which also contain diferent data and/or incomplete and/or confusing: c) "Installing GCC" https://gcc.gnu.org/wiki/InstallingGCC https://gcc.gnu.org/install/ The most conceptually clear is the latter, which also has the text: "The latest version of this document is always available at http://gcc.gnu.org/install/" so it seems reasonable to start in this document, at least until something inconsistent or out of date appears, if any. I initially agree in the description of the installation given in the document: " The installation procedure itself is broken into five steps. 1. Prerequisites 2. Downloading the source 3. Configuration 4. Building 5. Testing (optional) 6. Final install " However, from the point of view of step-by-step installation it could be simplified given that the own code takes care of some steps (maybe that slight change in the code was made after the document was written). Steps 1. and 2. could be considered only one, divided in 2 substeps. Also, I will skip step 5 for two reasons: a) the documentation itself is biased to skip the optional step: " ... is broken into five steps.", and b) unless some compiling/linking errors appear, the GCC would be ready to be successfully used. The latter would be not the case for the next section, 2.2), which will be intended for those modifying sources. Furthermore, I'll use letters for the step-by-step section in order to avoid "extra-confusion"... with numbering in the original GCC install documentation. STEP A: Download all the sources: GCC + GCC prerrequisites A.1: Download GCC sources From page https://gcc.gnu.org/wiki/GFortranSource, you end up in a long list of GCC packages, all starting with "gcc", look for the last version and download. I downloaded gcc-4.9.0.tar.gz Side note: sources version for this install would be "one less" than the binary version you can download (as shown in the previous section). Actually, the "current" source development version would be that of the last binary version you can download. Given that this subsection is not intended to change sources, I prefer to download the "current stable" source version instead of the "current development" source version. Side note on the side note: "current stable" and "current development" versions are not expressions used in the GCC documentation. A.2: Download GCC prerequisites The "Prerequisites" explanation in the GCC documentation is complete as far as I've (not very thoroughly) checked. However, the GCC source .tar.gz includes code to download the prerequired software packages most likely not available or not available in the proper versions. I'll use it. A.3: Create the directories for building the compiler and to install the binaries The compiler should be built in a directory independent from the one in which the sources are. The directory in which the binaries will be installed can be (automatically) created later, but I usually install in a <base_directory> (e.g. $HOME/gnu-comps) as <base_directory>/<src> <base_directory>/<obj> <base_directory>/<inst> Summary for downloading GCC sources, including GCC prerequisites (and a few dirs.): ------------------------------------------------------------------------ # base directory: src, obj (build), and install % GNUCOMPS=$HOME/gnu-compilers # version, there should be a .tar.gz or .bz2 or similar containing the src in # $GNUCOMPS having this version number % GCCVERSION=4.9.0 % GNUSRCDIR=$GNUCOMPS/gcc-$GCCVERSION % GNUOBJDIR=$GNUCOMPS/$GCCVERSION-objdir % GNUINSTDIR=$GNUCOMPS/$GCCVERSION-instdir % cd $GNUCOMPS % mkdir $GNUOBJDIR % mkdir $GNUINSTDIR % tar -xvf gcc-$GCCVERSION.tar.gz % cd $GNUSRCDIR % ./contrib/download_prerequisites % cd .. ------------------------------------------------------------------------ Thus, the directory structure is <base_directory>/<src> --> $HOME/gnu-compilers/gcc-$GCCVERSION <base_directory>/<obj> --> $HOME/gnu-compilers/$GCCVERSION-objdir <base_directory>/<inst> --> $HOME/gnu-compilers/$GCCVERSION-instdir Sometimes, the computers are not directly connected to the Internet (e.g. those in production environments) so the script contrib/download_prerequisites will fail and you should download the prerequired packages "by hand". It is not a hard work, though, just follow the script contrib/download_prerequisites and you'll be ready to compile and install from sources. In the specific case of the gcc-4.9.0.tar.gz, the prerequired packages (those in contrib/download_prerequisites) for this GCC version are: cloog-0.18.1.tar.gz gmp-4.3.2.tar.bz2 isl-0.12.2.tar.bz2 mpc-0.8.1.tar.gz mpfr-2.4.2.tar.bz2 STEP B: Configure the GCC Complete configuration details can be found at https://gcc.gnu.org/install/configure.html and, also, some information can be obtained issuing <base_directory>/<src>/configure -h However, the information is not always the same (and I didn't check looking for details). Having downloaded the sources as indicated in STEP A, several details are already defined, i.e. it is not necessary to define many options at configuration. More specifically: --with-gmp* --with-mpfr* --with-mpc* --with-isl* --with-cloog* are not necessary, since the five packages are found in the sources directory and, thus, automatically built. The most useful configuration options I've found are: --prefix: where to put installation binaries --enable-languages: what specific compilers to build (including gfortran) --disable-multilib: avoid to build, for example, 64- and 32-bit binaries in a 64-bit computer/environment. Thus, having defined the previous environment variables (those in STEP A), the configuration step is "reduced to": ------------------------------------------------------------------------ % cd $GNUOBJDIR # Env. vars. % export PWDCMD=`which pwd` % $GNUSRCDIR/configure \ --prefix=$GNUINSTDIR \ --enable-languages=c,c++,fortran \ --disable-multilib \ > CONFIG.OUT 2>&1 ------------------------------------------------------------------------ where the PWDCMD environment variable is set following the advice given in the configuration page (https://gcc.gnu.org/install/configure.html), because many times my $HOME dir. is mounted via NFS. STEP C: Build the GCC Complete building details can be found at https://gcc.gnu.org/install/build.html Many "short" instructions indicate just issuing make. However, I've found several problems via environments variables which interfere in this particular step. More specifically, the environment variables should be those needed *only* by the tools (compiler and linker, mostly) used/needed to build the GCC. Thus, my steps to build the GCC are (again, take into account the previously defined environment variables): ------------------------------------------------------------------------ # Just to avoid some trouble at make % unset LIBRARY_PATH CPATH C_INCLUDE_PATH INCLUDE CPLUS_INCLUDE_PATH PKG_CONFIG_PATH % cd $GNUOBJDIR % make ------------------------------------------------------------------------ Note 1: the variables listed in the previous unset command are not used by the tools used to build the GCC in any of the platforms I've used. Note 2: I use the -j make option when more than one core and/or processor is used. Note 3: I use the at command in order to avoid having a console with scrolling text while the GCC is being built. In single processor computers I use: % at -f make now +2 minutes In a multiprocessor computer, dual quad-Xeon, I use % at -f make -j 6 now +2 minutes Build time is rather long: About 4 hours in a P4 @ 2.4 GHz About 3 hours in a Xeon E5405 @ 2.00 GHz (runing in a single core, just make) About 1 hour in a dual-Xeon E5405 @ 2.00 GHz (8 cores in total, using make -j 6) STEP D: Final install and set environment variables Complete final installation details can be found at https://gcc.gnu.org/install/finalinstall.html Just a few steps (again, take into account the previously defined environment variables): ------------------------------------------------------------------------ % cd $GNUOBJDIR % make install % cd $GNUOBJDIR # Set env. vars. % export PATH=$GNUINSTDIR:$PATH % export LD_LIBRARY_PATH=$GNUINSTDIR/<system_specific_lib>:$LD_LIBRARY_PATH ------------------------------------------------------------------------ where <system_specific_lib> could be: lib in a 32 bit environment lib64 in a 64 bit environment 2.2) Install gfortran from source code for modifying and/or contributing to the GCC or gfortran in particular TBD
Error Report /comments: ftinetti @ gmail . com (delete whitespaces), with subject "gfortran - GCC - install"