1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 2 "http://www.w3.org/TR/html4/strict.dtd"> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 6 <link rel="stylesheet" href="llvm.css" type="text/css" media="screen"> 7 <title>Building the LLVM GCC Front-End</title> 8 </head> 9 <body> 10 11 <h1> 12 Building the LLVM GCC Front-End 13 </h1> 14 15 <ol> 16 <li><a href="#instructions">Building llvm-gcc from Source</a></li> 17 <li><a href="#ada">Building the Ada front-end</a></li> 18 <li><a href="#fortran">Building the Fortran front-end</a></li> 19 <li><a href="#license">License Information</a></li> 20 </ol> 21 22 <div class="doc_author"> 23 <p>Written by the LLVM Team</p> 24 </div> 25 26 <!-- *********************************************************************** --> 27 <h2><a name="instructions">Building llvm-gcc from Source</a></h2> 28 <!-- *********************************************************************** --> 29 30 <div> 31 32 <p>This section describes how to acquire and build llvm-gcc 4.2, which is based 33 on the GCC 4.2.1 front-end. Supported languages are Ada, C, C++, Fortran, 34 Objective-C and Objective-C++. Note that the instructions for building these 35 front-ends are completely different (and much easier!) than those for building 36 llvm-gcc3 in the past.</p> 37 38 <ol> 39 <li><p>Retrieve the appropriate llvm-gcc-4.2-<i>version</i>.source.tar.gz 40 archive from the <a href="http://llvm.org/releases/">LLVM web 41 site</a>.</p> 42 43 <p>It is also possible to download the sources of the llvm-gcc front end 44 from a read-only mirror using subversion. To check out the 4.2 code 45 for first time use:</p> 46 47 <div class="doc_code"> 48 <pre> 49 svn co http://llvm.org/svn/llvm-project/llvm-gcc-4.2/trunk <i>dst-directory</i> 50 </pre> 51 </div> 52 53 <p>After that, the code can be be updated in the destination directory 54 using:</p> 55 56 <div class="doc_code"> 57 <pre>svn update</pre> 58 </div> 59 60 <p>The mirror is brought up to date every evening.</p></li> 61 62 <li>Follow the directions in the top-level <tt>README.LLVM</tt> file for 63 up-to-date instructions on how to build llvm-gcc. See below for building 64 with support for Ada or Fortran. 65 </ol> 66 67 </div> 68 69 <!-- *********************************************************************** --> 70 <h2><a name="ada">Building the Ada front-end</a></h2> 71 <!-- *********************************************************************** --> 72 73 <div> 74 <p>Building with support for Ada amounts to following the directions in the 75 top-level <tt>README.LLVM</tt> file, adding ",ada" to EXTRALANGS, for example: 76 <tt>EXTRALANGS=,ada</tt></p> 77 78 <p>There are some complications however:</p> 79 80 <ol> 81 <li><p>The only platform for which the Ada front-end is known to build is 82 32 bit intel x86 running linux. It is unlikely to build for other 83 systems without some work.</p></li> 84 <li><p>The build requires having a compiler that supports Ada, C and C++. 85 The Ada front-end is written in Ada so an Ada compiler is needed to 86 build it. Compilers known to work with the 87 <a href="http://llvm.org/releases/download.html">LLVM 2.7 release</a> 88 are <a href="http://gcc.gnu.org/releases.html">gcc-4.2</a> and the 89 2005, 2006 and 2007 versions of the 90 <a href="http://libre.adacore.com/">GNAT GPL Edition</a>. 91 <b>GNAT GPL 2008, gcc-4.3 and later will not work</b>. 92 The LLVM parts of llvm-gcc are written in C++ so a C++ compiler is 93 needed to build them. The rest of gcc is written in C. 94 Some linux distributions provide a version of gcc that supports all 95 three languages (the Ada part often comes as an add-on package to 96 the rest of gcc). Otherwise it is possible to combine two versions 97 of gcc, one that supports Ada and C (such as the 98 <a href="http://libre.adacore.com/">2007 GNAT GPL Edition</a>) 99 and another which supports C++, see below.</p></li> 100 <li><p>Because the Ada front-end is experimental, it is wise to build the 101 compiler with checking enabled. This causes it to run much slower, but 102 helps catch mistakes in the compiler (please report any problems using 103 <a href="http://llvm.org/bugs/">LLVM bugzilla</a>).</p></li> 104 <li><p>The Ada front-end <a href="http://llvm.org/PR2007">fails to 105 bootstrap</a>, due to lack of LLVM support for 106 <tt>setjmp</tt>/<tt>longjmp</tt> style exception handling (used 107 internally by the compiler), so you must specify 108 <tt>--disable-bootstrap</tt>.</p></li> 109 </ol> 110 111 <p>Supposing appropriate compilers are available, llvm-gcc with Ada support can 112 be built on an x86-32 linux box using the following recipe:</p> 113 114 <ol> 115 <li><p>Download the <a href="http://llvm.org/releases/download.html">LLVM source</a> 116 and unpack it:</p> 117 118 <pre class="doc_code"> 119 wget http://llvm.org/releases/2.7/llvm-2.7.tgz 120 tar xzf llvm-2.7.tgz 121 mv llvm-2.7 llvm 122 </pre> 123 124 <p>or <a href="GettingStarted.html#checkout">check out the 125 latest version from subversion</a>:</p> 126 127 <pre class="doc_code">svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm</pre> 128 129 </li> 130 131 <li><p>Download the 132 <a href="http://llvm.org/releases/download.html">llvm-gcc-4.2 source</a> 133 and unpack it:</p> 134 135 <pre class="doc_code"> 136 wget http://llvm.org/releases/2.7/llvm-gcc-4.2-2.7.source.tgz 137 tar xzf llvm-gcc-4.2-2.7.source.tgz 138 mv llvm-gcc-4.2-2.7.source llvm-gcc-4.2 139 </pre> 140 141 <p>or <a href="GettingStarted.html#checkout">check out the 142 latest version from subversion</a>:</p> 143 144 <pre class="doc_code"> 145 svn co http://llvm.org/svn/llvm-project/llvm-gcc-4.2/trunk llvm-gcc-4.2 146 </pre> 147 </li> 148 149 <li><p>Make a build directory <tt>llvm-objects</tt> for llvm and make it the 150 current directory:</p> 151 152 <pre class="doc_code"> 153 mkdir llvm-objects 154 cd llvm-objects 155 </pre> 156 </li> 157 158 <li><p>Configure LLVM (here it is configured to install into <tt>/usr/local</tt>):</p> 159 160 <pre class="doc_code"> 161 ../llvm/configure --prefix=<b>/usr/local</b> --enable-optimized --enable-assertions 162 </pre> 163 164 <p>If you have a multi-compiler setup and the C++ compiler is not the 165 default, then you can configure like this:</p> 166 167 <pre class="doc_code"> 168 CXX=<b>PATH_TO_C++_COMPILER</b> ../llvm/configure --prefix=<b>/usr/local</b> --enable-optimized --enable-assertions 169 </pre> 170 171 <p>To compile without checking (not recommended), replace 172 <tt>--enable-assertions</tt> with <tt>--disable-assertions</tt>.</p> 173 174 </li> 175 176 <li><p>Build LLVM:</p> 177 178 <pre class="doc_code"> 179 make 180 </pre> 181 </li> 182 183 <li><p>Install LLVM (optional):</p> 184 185 <pre class="doc_code"> 186 make install 187 </pre> 188 </li> 189 190 <li><p>Make a build directory <tt>llvm-gcc-4.2-objects</tt> for llvm-gcc and make it the 191 current directory:</p> 192 193 <pre class="doc_code"> 194 cd .. 195 mkdir llvm-gcc-4.2-objects 196 cd llvm-gcc-4.2-objects 197 </pre> 198 </li> 199 200 <li><p>Configure llvm-gcc (here it is configured to install into <tt>/usr/local</tt>). 201 The <tt>--enable-checking</tt> flag turns on sanity checks inside the compiler. 202 To turn off these checks (not recommended), replace <tt>--enable-checking</tt> 203 with <tt>--disable-checking</tt>. 204 Additional languages can be appended to the <tt>--enable-languages</tt> switch, 205 for example <tt>--enable-languages=ada,c,c++</tt>.</p> 206 207 <pre class="doc_code"> 208 ../llvm-gcc-4.2/configure --prefix=<b>/usr/local</b> --enable-languages=ada,c \ 209 --enable-checking --enable-llvm=$PWD/../llvm-objects \ 210 --disable-bootstrap --disable-multilib 211 </pre> 212 213 <p>If you have a multi-compiler setup, then you can configure like this:</p> 214 215 <pre class="doc_code"> 216 export CC=<b>PATH_TO_C_AND_ADA_COMPILER</b> 217 export CXX=<b>PATH_TO_C++_COMPILER</b> 218 ../llvm-gcc-4.2/configure --prefix=<b>/usr/local</b> --enable-languages=ada,c \ 219 --enable-checking --enable-llvm=$PWD/../llvm-objects \ 220 --disable-bootstrap --disable-multilib 221 </pre> 222 </li> 223 224 <li><p>Build and install the compiler:</p> 225 226 <pre class="doc_code"> 227 make 228 make install 229 </pre> 230 </li> 231 </ol> 232 233 </div> 234 235 <!-- *********************************************************************** --> 236 <h2><a name="fortran">Building the Fortran front-end</a></h2> 237 <!-- *********************************************************************** --> 238 239 <div> 240 <p>To build with support for Fortran, follow the directions in the top-level 241 <tt>README.LLVM</tt> file, adding ",fortran" to EXTRALANGS, for example:</p> 242 243 <pre class="doc_code"> 244 EXTRALANGS=,fortran 245 </pre> 246 247 </div> 248 249 <!-- *********************************************************************** --> 250 <h2><a name="license">License Information</a></h2> 251 <!-- *********************************************************************** --> 252 253 <div> 254 <p> 255 The LLVM GCC frontend is licensed to you under the GNU General Public License 256 and the GNU Lesser General Public License. Please see the files COPYING and 257 COPYING.LIB for more details. 258 </p> 259 260 <p> 261 More information is <a href="FAQ.html#license">available in the FAQ</a>. 262 </p> 263 </div> 264 265 <!-- *********************************************************************** --> 266 267 <hr> 268 <address> 269 <a href="http://jigsaw.w3.org/css-validator/check/referer"><img 270 src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a> 271 <a href="http://validator.w3.org/check/referer"><img 272 src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a> 273 274 <a href="http://llvm.org/">LLVM Compiler Infrastructure</a><br> 275 Last modified: $Date$ 276 </address> 277 278 </body> 279 </html> 280