My programming ramblings

Compiling GCC 7 on macOS

Posted on May 21, 2017 by Sol

In this tutorial, I will show you how to compile from source and install the current stable version of GCC with Graphite loop optimizations on your macOS computer. The instructions from this tutorial were tested with Xcode 8 and Sierra (macOS 10.12).

Clang, the default compiler for macOS, supports only C, C++, Objective-C and Objective-C++. If you are interested in a modern Fortran compiler, e.g. you will need gfortran that comes with GCC. Another reason to have the latest stable version of GCC on your macOS is that it provides you with an alternative C and C++ compiler. Testing your code with two different compilers is always a good idea.

In order to compile GCC from sources you will need a working C++ compiler. In the remaining of this article I will assume that you have installed the Command Line Tools for Xcode. At the time of this writing Apple’s Command Line Tools maps the gcc and g++ to clang and clang++. If you don’t have the Command Line Tools installed, open a Terminal and write:

1 xcode-select --install

which will guide through the installation process.

Let’s start by downloading the last stable version of GCC from the GNU website, so go to: http://gcc.gnu.org/mirrors.html and download gcc-7.1.0.tar.bz2. I’ve saved the archive in my Downloads folder.

We will also need three other libraries for a successful build of gcc: mpc, mpfr and gmp. Use the above links and download the last versions for all of them: gmp-6.1.2.tar.bz2, mpc-1.0.3.tar.gz and mpfr-3.1.5.tar.bz2, also save them in your Downloads folder.

Extract the above five archives in your Downloads folder and open a Terminal window.

We will start by compiling the gmp library:

1 cd ~2 cd Downloads3 cd gmp*

Create a new folder named build in which the compiler will save the compiled library:

1 mkdir build && cd build

And now the fun part … write in your Terminal:

1 ../configure --prefix=/usr/local/gcc-7.1 --enable-cxx

If you see no error message we can actually compile the gmp library:

1 make -j 4

In a few minutes you will have a compiled gmp library. If you see no error message … congratulations, we are ready to install the library in the /usr/local/gcc-7.1 folder (you will need the administrator password for this):

We are ready to compile GCC now. Be prepared that this could take more than one hour on some machines … Since I’m interested only in the C, C++ and Fortran compilers, this is the configure command I’ve used on my machine:

The above command instructs the configure app where we have installed gmp, mpfr, mpc and isl; also it tells to add a prefix to all the resulting executable programs, so for example if you will invoke GCC 7.1.0 you will write gcc-7.1, the gcc command will invoke Apple’s version of clang.

If you are interested in building more compilers available in the GCC collection modify the –enable-languages configure option.

And now, the final touches:

1 make -j 4

Grab a coffee, maybe a book, and wait … this should take approximately, depending on your computer configuration, an hour … or more … and about 5.24GB of your disk space for the build folder.

Install the compiled gcc in /usr/local/gcc-7.1:

1 sudo make install

Now, you can keep the new compiler completely isolated from your Apple’s gcc compiler and, when you need to use it, just modify your path by writing in Terminal:

1 export PATH=/usr/local/gcc-7.1/bin:$PATH

If you want to avoid writing the above command each time you open a Terminal, save the above command in the file .bash_profile from your Home folder.

You should be able to invoke any of the newly compiled compilers C, C++, Fortran …, invoking g++ is as simple as writing in your Terminal:

1 g++-7.1 test.cpp -o test

Remember to erase your build directories from Downloads if you want to recover some space.

Next, I’ll show you how to check if the compiler was properly installed by compiling and running a few examples. GCC 7 uses by default the C++14 standard and C11 for the C coders, you should be able to compile any valid C++14 code directly. In your favorite text editor, copy and save this test program (I’ll assume you will save the file in your Home directory):

Disclaimer:All data and information provided on this site is for informational purposes only. solarianprogrammer.com makes no representations as to accuracy, completeness, currentness, suitability, or validity of any information on this site and will not be liable for any errors, omissions, or delays in this information or any losses, injuries, or damages arising from its display or use. All information is provided on an as-is basis. solarianprogrammer.com does not collect any personal information about its visitors except that which they provide voluntarily when leaving comments. This information will never be disclosed to any third party for any purpose. Some of the links contained within this site have my referral id, which provides me with a small commission for each sale. Thank you for understanding.