2011-10-24
Building Rust
Update 2011-11-08 - The steps to build Rust have changed since I wrote this post, there's now no need to build LLVM - it's included as a submodule in the Rust git repository and will automatically be cloned and built.
A while ago I wrote a quick look at Rust post, describing how to build it and run some simple examples. Since that post the bootstrap compiler has gone away and the rustc
compiler, written in Rust, is the compiler to use.
The instructions for building Rust in the wiki are good but I'll briefly go through how I installed things on 64-bit Linux. The first step is to build the required version of LLVM
from the LLVM source repository. I use a git mirror and install to a local directory so as not to clash with other programs that use older LLVM
versions.
$ git clone git://github.com/earl/llvm-mirror.git
$ cd llvm-mirror
$ git reset --hard 9af578
$ CXX='g++ -m32' CC='gcc -m32' CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 ./configure \
--{build,host,target}=i686-unknown-linux-gnu \
--enable-targets=x86,x86_64,cbe --enable-optimized --prefix=/home/chris/rust
$ make && make install
Note the use of prefix
to ensure this custom LLVM
build is a local install. I also do a git reset
to go to the commit for SVN revision 142082 which is the current version that works with Rust according to the wiki. After installation add the install bin
to the PATH
and lib
to LD_LIBRARY_PATH
:
$ export PATH=~/rust/bin:$PATH
$ export LD_LIBRARY_PATH=~/rust/lib:$LD_LIBRARY_PATH
Next step, clone and build Rust:
$ git clone git://github.com/graydon/rust
$ mkdir build
$ cd build
$ ../rust/configure
$ make
The build process downloads an existing build for your platform to bootstrap from. It uses this to build a stage1
version of the compiler. This stage1
is used to build a stage2
, and that is then used to build a stage3
. All the built compilers should work exactly the same if things are working correctly. The compiler can be run within the build
directory, or outside it if you put the stage3/bin
directory in the path:
$ export PATH=~/path/to/build/stage3/bin:$PATH
$ rustc
error: No input filename given.
Test with a simple 'hello world' program:
$ cat hello.rs
use std;
import std::io::print;
fn main () {
print ("hello\n");
}
$ rustc hello.rs
$ ./hello
hello