• Stars
    star
    85,122
  • Rank 68 (Top 0.01 %)
  • Language
    Rust
  • License
    Other
  • Created over 14 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Empowering everyone to build reliable and efficient software.

The Rust Programming Language

Rust Community

This is the main source code repository for Rust. It contains the compiler, standard library, and documentation.

Note: this README is for users rather than contributors. If you wish to contribute to the compiler, you should read CONTRIBUTING.md instead.

Quick Start

Read "Installation" from The Book.

Installing from Source

The Rust build system uses a Python script called x.py to build the compiler, which manages the bootstrapping process. It lives at the root of the project. It also uses a file named config.toml to determine various configuration settings for the build. You can see a full list of options in config.example.toml.

The x.py command can be run directly on most Unix systems in the following format:

./x.py <subcommand> [flags]

This is how the documentation and examples assume you are running x.py. Some alternative ways are:

# On a Unix shell if you don't have the necessary `python3` command
./x <subcommand> [flags]

# On the Windows Command Prompt (if .py files are configured to run Python)
x.py <subcommand> [flags]

# You can also run Python yourself, e.g.:
python x.py <subcommand> [flags]

More information about x.py can be found by running it with the --help flag or reading the rustc dev guide.

Dependencies

Make sure you have installed the dependencies:

  • python 3 or 2.7
  • git
  • A C compiler (when building for the host, cc is enough; cross-compiling may need additional compilers)
  • curl (not needed on Windows)
  • pkg-config if you are compiling on Linux and targeting Linux
  • libiconv (already included with glibc on Debian-based distros)

To build Cargo, you'll also need OpenSSL (libssl-dev or openssl-devel on most Unix distros).

If building LLVM from source, you'll need additional tools:

  • g++, clang++, or MSVC with versions listed on LLVM's documentation
  • ninja, or GNU make 3.81 or later (Ninja is recommended, especially on Windows)
  • cmake 3.13.4 or later
  • libstdc++-static may be required on some Linux distributions such as Fedora and Ubuntu

On tier 1 or tier 2 with host tools platforms, you can also choose to download LLVM by setting llvm.download-ci-llvm = true. Otherwise, you'll need LLVM installed and llvm-config in your path. See the rustc-dev-guide for more info.

Building on a Unix-like system

Build steps

  1. Clone the source with git:

    git clone https://github.com/rust-lang/rust.git
    cd rust
  1. Configure the build settings:

    ./configure

    If you plan to use x.py install to create an installation, it is recommended that you set the prefix value in the [install] section to a directory: ./configure --set install.prefix=<path>

  2. Build and install:

    ./x.py build && ./x.py install

    When complete, ./x.py install will place several programs into $PREFIX/bin: rustc, the Rust compiler, and rustdoc, the API-documentation tool. By default, it will also include Cargo, Rust's package manager. You can disable this behavior by passing --set build.extended=false to ./configure.

Configure and Make

This project provides a configure script and makefile (the latter of which just invokes x.py). ./configure is the recommended way to programatically generate a config.toml. make is not recommended (we suggest using x.py directly), but it is supported and we try not to break it unnecessarily.

./configure
make && sudo make install

configure generates a config.toml which can also be used with normal x.py invocations.

Building on Windows

On Windows, we suggest using winget to install dependencies by running the following in a terminal:

winget install -e Python.Python.3
winget install -e Kitware.CMake
winget install -e Git.Git

Then edit your system's PATH variable and add: C:\Program Files\CMake\bin. See this guide on editing the system PATH from the Java documentation.

There are two prominent ABIs in use on Windows: the native (MSVC) ABI used by Visual Studio and the GNU ABI used by the GCC toolchain. Which version of Rust you need depends largely on what C/C++ libraries you want to interoperate with. Use the MSVC build of Rust to interop with software produced by Visual Studio and the GNU build to interop with GNU software built using the MinGW/MSYS2 toolchain.

MinGW

MSYS2 can be used to easily build Rust on Windows:

  1. Download the latest MSYS2 installer and go through the installer.

  2. Run mingw32_shell.bat or mingw64_shell.bat from the MSYS2 installation directory (e.g. C:\msys64), depending on whether you want 32-bit or 64-bit Rust. (As of the latest version of MSYS2 you have to run msys2_shell.cmd -mingw32 or msys2_shell.cmd -mingw64 from the command line instead.)

  3. From this terminal, install the required tools:

    # Update package mirrors (may be needed if you have a fresh install of MSYS2)
    pacman -Sy pacman-mirrors
    
    # Install build tools needed for Rust. If you're building a 32-bit compiler,
    # then replace "x86_64" below with "i686". If you've already got Git, Python,
    # or CMake installed and in PATH you can remove them from this list.
    # Note that it is important that you do **not** use the 'python2', 'cmake',
    # and 'ninja' packages from the 'msys2' subsystem.
    # The build has historically been known to fail with these packages.
    pacman -S git \
                make \
                diffutils \
                tar \
                mingw-w64-x86_64-python \
                mingw-w64-x86_64-cmake \
                mingw-w64-x86_64-gcc \
                mingw-w64-x86_64-ninja
  4. Navigate to Rust's source code (or clone it), then build it:

    python x.py setup user && python x.py build && python x.py install

MSVC

MSVC builds of Rust additionally require an installation of Visual Studio 2017 (or later) so rustc can use its linker. The simplest way is to get Visual Studio, check the "C++ build tools" and "Windows 10 SDK" workload.

(If you're installing CMake yourself, be careful that "C++ CMake tools for Windows" doesn't get included under "Individual components".)

With these dependencies installed, you can build the compiler in a cmd.exe shell with:

python x.py setup user
python x.py build

Right now, building Rust only works with some known versions of Visual Studio. If you have a more recent version installed and the build system doesn't understand, you may need to force rustbuild to use an older version. This can be done by manually calling the appropriate vcvars file before running the bootstrap.

CALL "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
python x.py build

Specifying an ABI

Each specific ABI can also be used from either environment (for example, using the GNU ABI in PowerShell) by using an explicit build triple. The available Windows build triples are:

  • GNU ABI (using GCC)
    • i686-pc-windows-gnu
    • x86_64-pc-windows-gnu
  • The MSVC ABI
    • i686-pc-windows-msvc
    • x86_64-pc-windows-msvc

The build triple can be specified by either specifying --build=<triple> when invoking x.py commands, or by creating a config.toml file (as described in Building on a Unix-like system), and passing --set build.build=<triple> to ./configure.

Building Documentation

If you'd like to build the documentation, it's almost the same:

./x.py doc

The generated documentation will appear under doc in the build directory for the ABI used. That is, if the ABI was x86_64-pc-windows-msvc, the directory will be build\x86_64-pc-windows-msvc\doc.

Notes

Since the Rust compiler is written in Rust, it must be built by a precompiled "snapshot" version of itself (made in an earlier stage of development). As such, source builds require an Internet connection to fetch snapshots, and an OS that can execute the available snapshot binaries.

See https://doc.rust-lang.org/nightly/rustc/platform-support.html for a list of supported platforms. Only "host tools" platforms have a pre-compiled snapshot binary available; to compile for a platform without host tools you must cross-compile.

You may find that other platforms work, but these are our officially supported build environments that are most likely to work.

Getting Help

See https://www.rust-lang.org/community for a list of chat platforms and forums.

Contributing

See CONTRIBUTING.md.

License

Rust is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0), with portions covered by various BSD-like licenses.

See LICENSE-APACHE, LICENSE-MIT, and COPYRIGHT for details.

Trademark

The Rust Foundation owns and protects the Rust and Cargo trademarks and logos (the "Rust Trademarks").

If you want to use these names or brands, please read the media guide.

Third-party logos may be subject to third-party copyrights and trademarks. See Licenses for details.

More Repositories

1

rustlings

🦀 Small exercises to get you used to reading and writing Rust code!
Rust
47,148
star
2

mdBook

Create book from markdown files. Like Gitbook but implemented in Rust
Rust
15,892
star
3

book

The Rust Programming Language
Rust
13,981
star
4

rust-analyzer

A Rust compiler front-end for IDEs
Rust
13,571
star
5

cargo

The Rust package manager
Rust
11,293
star
6

rust-clippy

A bunch of lints to catch common mistakes and improve your Rust code. Book: https://doc.rust-lang.org/clippy/
Rust
9,860
star
7

rust-by-example

Learn Rust with examples (Live code editor included)
6,109
star
8

rustup

The Rust toolchain installer
Rust
5,558
star
9

rustfmt

Format Rust code
Rust
5,524
star
10

rfcs

RFCs for changes to Rust
Markdown
5,390
star
11

futures-rs

Zero-cost asynchronous programming in Rust
Rust
5,119
star
12

rust-bindgen

Automatically generates Rust FFI bindings to C (and some C++) libraries.
Rust
3,830
star
13

rust.vim

Vim configuration for Rust.
Vim Script
3,628
star
14

miri

An interpreter for Rust's mid-level intermediate representation
Rust
3,581
star
15

rls

Repository for the Rust Language Server (aka RLS)
Rust
3,513
star
16

regex

An implementation of regular expressions for Rust. This implementation uses finite automata and guarantees linear time matching on all inputs.
Rust
3,083
star
17

crates.io

The Rust package registry
Rust
2,554
star
18

hashbrown

Rust port of Google's SwissTable hash map
Rust
2,266
star
19

log

Logging implementation for Rust
Rust
2,180
star
20

this-week-in-rust

Data for this-week-in-rust.org
HTML
1,826
star
21

libc

Raw bindings to platform APIs for Rust
Rust
1,786
star
22

chalk

An implementation and definition of the Rust trait system using a PROLOG-like logic solver
Rust
1,713
star
23

async-book

Asynchronous Programming in Rust
Shell
1,699
star
24

nomicon

The Dark Arts of Advanced and Unsafe Rust Programming
CSS
1,698
star
25

rustc-dev-guide

A guide to how rustc works and how to contribute to it.
HTML
1,580
star
26

rustc_codegen_cranelift

Cranelift based backend for rustc
Rust
1,538
star
27

git2-rs

libgit2 bindings for Rust
Rust
1,520
star
28

cc-rs

Rust library for build scripts to compile C/C++ code into a Rust library
Rust
1,491
star
29

vscode-rust

Rust extension for Visual Studio Code
TypeScript
1,386
star
30

polonius

Defines the Rust borrow checker.
Rust
1,255
star
31

api-guidelines

Rust API guidelines
1,202
star
32

reference

The Rust Reference
Rust
1,140
star
33

rust-playground

The Rust Playground
Rust
1,076
star
34

rust-mode

Emacs configuration for Rust
Emacs Lisp
1,009
star
35

docs.rs

crates.io documentation generator
Rust
891
star
36

rustc_codegen_gcc

libgccjit AOT codegen for rustc
Rust
875
star
37

rustfix

Automatically apply the suggestions made by rustc
Rust
853
star
38

portable-simd

The testing ground for the future of portable SIMD in Rust
Rust
816
star
39

datafrog

A lightweight Datalog engine in Rust
Rust
783
star
40

flate2-rs

DEFLATE, gzip, and zlib bindings for Rust
Rust
730
star
41

socket2

Advanced configuration options for sockets.
Rust
681
star
42

unsafe-code-guidelines

Forum for discussion about what unsafe code can and can't do
641
star
43

rust-semverver

Automatic checking for semantic versioning in library crates
Rust
639
star
44

stdarch

Rust's standard library vendor-specific APIs and run-time feature detection
Rust
597
star
45

crater

Run experiments across parts of the Rust ecosystem!
Rust
588
star
46

packed_simd

Portable Packed SIMD Vectors for Rust standard library
Rust
575
star
47

rustc-perf

Website for graphing performance of rustc
Rust
539
star
48

libm

A port of MUSL's libm to Rust.
Rust
499
star
49

cfg-if

A if/elif-like macro for Rust #[cfg] statements
Rust
479
star
50

crates.io-index

Registry index for crates.io
476
star
51

backtrace-rs

Backtraces in Rust
Rust
473
star
52

style-team

Home of the Rust style team
Rust
438
star
53

docker-rust

The official Docker images for Rust
Dockerfile
414
star
54

glob

Support for matching file paths against Unix shell style patterns.
Rust
381
star
55

rust-forge

Information useful to people contributing to Rust
Rust
380
star
56

compiler-team

A home for compiler team planning documents, meeting minutes, and other such things.
HTML
380
star
57

wg-async

Working group dedicated to improving the foundations of Async I/O in Rust
Rust
365
star
58

www.rust-lang.org

The home of the Rust website
Fluent
358
star
59

compiler-builtins

Porting `compiler-rt` intrinsics to Rust
Rust
328
star
60

measureme

Support crate for rustc's self-profiling feature
Rust
324
star
61

rustc-hash

Custom hash algorithm used by rustc (plus hashmap/set aliases): fast, deterministic, not secure
Rust
312
star
62

blog.rust-lang.org

The Rust Programming Language Blog
HTML
302
star
63

team

Rust teams structure
Rust
293
star
64

glacier

A big 'ol pile of ICE.
Rust
289
star
65

project-error-handling

Error handling project group
264
star
66

atom-ide-rust

Rust IDE support for Atom, powered by the Rust Analyzer or Rust Language Server
JavaScript
259
star
67

stacker

Manual segmented stacks for Rust
Rust
252
star
68

a-mir-formality

a model of MIR and the Rust type/trait system
Rust
245
star
69

cmake-rs

Rust build dependency for running cmake
Rust
241
star
70

edition-guide

A guide to changes between various editions of Rust
238
star
71

getopts

The getopts repo maintained by the rust-lang project
Rust
229
star
72

annotate-snippets-rs

Library for snippet annotations
Rust
223
star
73

rust-roadmap-2017

Tracking Rust's roadmap
215
star
74

areweasyncyet.rs

Are we async yet?
Rust
211
star
75

rust-playpen

A web interface for running Rust code
Rust
208
star
76

wg-allocators

Home of the Allocators working group: Paving a path for a standard set of allocator traits to be used in collections!
199
star
77

rustc-demangle

Rust symbol demangling
Rust
196
star
78

lang-team

Home of the Rust lang team
JavaScript
191
star
79

highfive

Github hooks to provide an encouraging atmosphere for new contributors
Python
185
star
80

ferris-says

A Rust flavored implementation of `cowsay`
Rust
182
star
81

rust-guidelines

This repository has moved
179
star
82

cargo-bisect-rustc

Bisects rustc, either nightlies or CI artifacts
Rust
177
star
83

rustwide

Execute your code on the Rust ecosystem.
Rust
177
star
84

homu

A bot that integrates with GitHub and your favorite continuous integration service
Python
174
star
85

triagebot

Automation/tooling for Rust spaces
Rust
162
star
86

rfcbot-rs

Coordinates asynchronous decision making on Rust repositories. Status of tracked issues and PRs can be viewed at https://rfcbot.rs.
Rust
157
star
87

prev.rust-lang.org

The previous Rust website. The current website's code is at https://github.com/rust-lang/www.rust-lang.org.
HTML
153
star
88

pkg-config-rs

Build library for invoking pkg-config for Rust
Rust
147
star
89

thanks

Celebrate Rust contributors.
Rust
146
star
90

rustc-reading-club

Rust Code Reading Clubs
141
star
91

simpleinfra

Rust Infrastructure automation
HCL
140
star
92

gll

GLL parsing framework.
Rust
137
star
93

ena

An implementation of union-find / congruence-closure in Rust. Extracted from rustc for independent experimentation.
Rust
131
star
94

wg-cargo-std-aware

Repo for working on "std aware cargo"
130
star
95

rust-memory-model

Collecting examples and information to help design a memory model for Rust.
Python
125
star
96

rust-artwork

Official artwork for the Rust project.
122
star
97

libs-team

The home of the library team
Rust
107
star
98

google-summer-of-code

Rust project ideas for Google Summer of Code
105
star
99

rustup-components-history

Rustup package status history
Rust
102
star
100

wg-grammar

Where the work of WG-grammar, aiming to provide a canonical grammar for Rust, resides
Rust
101
star