Differences
This shows you the differences between two versions of the page.
compilingwithclang [2013/06/03 16:30] sanel More formatting |
compilingwithclang [2015/10/03 14:54] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Compiling With Clang ====== | ||
- | |||
- | ===== Introduction ===== | ||
- | |||
- | In this short tutorial are described details about compiling edelib and | ||
- | EDE with [[http://clang.llvm.org/|Clang]] compiler. It is assumed you | ||
- | already have installed Clang version with needed libraries. | ||
- | |||
- | :!: This tutorial is assuming you have read InstallationHowTo and | ||
- | have prepared 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 latest stable FLTK version as package | ||
- | with your distribution package management system, feel free to do so. | ||
- | |||
- | However, if you would like to compile FLTK with Clang, first download | ||
- | FLTK source code, unpack it and run the following commands in terminal: | ||
- | |||
- | <code> | ||
- | $ cd fltk-<version> | ||
- | $ export CC=clang | ||
- | $ export CXX=clang++ | ||
- | $ ./configure && make | ||
- | </code> | ||
- | |||
- | or if you would like FLTK location on different place (default is | ||
- | ///usr/local//, use //prefix//) parameter, like: | ||
- | |||
- | <code> | ||
- | $ ./configure --prefix=/usr && make | ||
- | </code> | ||
- | |||
- | and as superuser, run: | ||
- | |||
- | <code> | ||
- | $ make install | ||
- | </code> | ||
- | |||
- | ===== Compiling edelib ===== | ||
- | |||
- | edelib should be compiled without much of problems and compilation | ||
- | commands are pretty much the same as for compiling FLTK (except you are | ||
- | using //jam// as build tool). Here are they in the order: | ||
- | |||
- | <code> | ||
- | $ cd edelib-<version> | ||
- | $ export CC=clang | ||
- | $ export CXX=clang++ | ||
- | $ ./configure && jam | ||
- | </code> | ||
- | |||
- | You can use //prefix// parameter for desired location. As superuser, | ||
- | running: | ||
- | |||
- | <code> | ||
- | $ jam install | ||
- | </code> | ||
- | |||
- | will install edelib on desired location. | ||
- | |||
- | ===== Compiling EDE ===== | ||
- | |||
- | edelib compilation commands applies here too. However, if you are | ||
- | starting to get strange errors like: | ||
- | |||
- | <code> | ||
- | 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); } | ||
- | ^ | ||
- | </code> | ||
- | |||
- | you are probably running latest gcc version with little bit older Clang | ||
- | version. If your distribution does not provide updated Clang package, | ||
- | you can apply a small hack. | ||
- | |||
- | :!: **Please note how 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 gcc version (like 4.7.2) and //PLATFORM-DISTRO// is | ||
- | distribution specific folder, like //i686-redhat-linux//. Locate the | ||
- | line: | ||
- | |||
- | <code cpp> | ||
- | #define _GLIBCXX_ATOMIC_BUILTINS 1 | ||
- | </code> | ||
- | |||
- | and comment it out, like: | ||
- | |||
- | <code cpp> | ||
- | // #define _GLIBCXX_ATOMIC_BUILTINS 1 | ||
- | </code> | ||
- | |||
- | which will disable gcc builtin atomic access functions. Recompile EDE | ||
- | and install it, uncommenting above line. | ||