Table of Contents
Compiling With Clang
Introduction
This short tutorial describes the details of compiling edelib and EDE with the Clang compiler. It is assumed you
already have installed a Clang version with the needed libraries.
Note: This tutorial also assumes you have read InstallationHowTo and have prepared the needed libraries and tools.
Compiling FLTK
First we are going to compile FLTK. Clang can use libraries compiled with GCC, so if you can install the latest stable version of FLTK with your distribution's package management system, feel free to do so.
However, if you prefer to compile FLTK with Clang as well, first download FLTK's source code, unpack it and run the following commands in terminal:
$ cd fltk-<version> $ export CC=clang $ export CXX=clang++ $ ./configure && make
or in case you would like FLTK to be installed on different place (default is
/usr/local, use the prefix) parameter, like:
$ ./configure --prefix=/usr && make
and as superuser, run:
$ make install
Compiling edelib
Normally edelib should compile without problems and compilation
commands are pretty much the same as for compiling FLTK (except you are
using JAM as build tool). The commands in the right order are:
$ cd edelib-<version> $ export CC=clang $ export CXX=clang++ $ ./configure && jam
You can use the prefix parameter to set the desired location. As superuser, running:
$ jam install
will install edelib to the desired location.
Compiling EDE
The commands to build edelib apply here, too. However, if you get strange errors like:
In file included from ActionMenu.cc:14:
In file included from /usr/bin/../lib/gcc/i686-redhat-linux/4.7.2/../../../../include/c++/4.7.2/iostream:39:
In file included from /usr/bin/../lib/gcc/i686-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ostream:39:
In file included from /usr/bin/../lib/gcc/i686-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ios:42:
In file included from /usr/bin/../lib/gcc/i686-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/ios_base.h:40:
/usr/bin/../lib/gcc/i686-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ext/atomicity.h:48:45: error: use of undeclared identifier '__ATOMIC_ACQ_REL'
{ return __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); }
^
/usr/bin/../lib/gcc/i686-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ext/atomicity.h:52:38: error: use of undeclared identifier '__ATOMIC_ACQ_REL'
{ __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); }
^
you are probably running a recent GCC version with a Clang version a bit older. If your distribution does not provide an updated Clang package,
you can apply a small hack.
Please note that this hack can change how gcc works, so after you change the given file, recompile EDE and revert those changes!
As superuser, open the file /usr/include/c++/VERSION/PLATFORM-DISTRO/bits/c++config.h, where VERSION is the GCC version (like 4.7.2) and PLATFORM-DISTRO is distribution specific folder, like i686-redhat-linux. Find the line:
#define _GLIBCXX_ATOMIC_BUILTINS 1
and comment it out, like:
// #define _GLIBCXX_ATOMIC_BUILTINS 1
which will disable GCC builtin atomic access functions. Recompile EDE and install it, uncommenting above line afterwards.