]> git.proxmox.com Git - rustc.git/blame - README.md
Update d/copyright
[rustc.git] / README.md
CommitLineData
223e47cc
LB
1# The Rust Programming Language
2
3157f602
XL
3This is the main source code repository for [Rust]. It contains the compiler,
4standard library, and documentation.
62682a34 5
92a42be0 6[Rust]: https://www.rust-lang.org
223e47cc 7
1a4d82fc 8## Quick Start
ea8adc8c 9[quick-start]: #quick-start
223e47cc 10
041b39d2 11Read ["Installation"] from [The Book].
223e47cc 12
0731742a 13["Installation"]: https://doc.rust-lang.org/book/ch01-01-installation.html
e9174d1e 14[The Book]: https://doc.rust-lang.org/book/index.html
223e47cc 15
9fa01778 16## Installing from Source
ea8adc8c 17[building-from-source]: #building-from-source
223e47cc 18
9fa01778
XL
19_Note: If you wish to contribute to the compiler, you should read
20[this chapter](https://rust-lang.github.io/rustc-guide/how-to-build-and-run.html)
21of the rustc-guide instead._
22
abe05a73 23### Building on *nix
1a4d82fc 241. Make sure you have installed the dependencies:
c34b1796 25
cc61c64b 26 * `g++` 4.7 or later or `clang++` 3.x or later
7453a54e 27 * `python` 2.7 (but not 3.x)
c34b1796 28 * GNU `make` 3.81 or later
9e0c209e 29 * `cmake` 3.4.3 or later
c34b1796
AL
30 * `curl`
31 * `git`
1a4d82fc 32
85aaf69f 332. Clone the [source] with `git`:
1a4d82fc 34
c34b1796
AL
35 ```sh
36 $ git clone https://github.com/rust-lang/rust.git
37 $ cd rust
38 ```
1a4d82fc 39
85aaf69f
SL
40[source]: https://github.com/rust-lang/rust
41
423. Build and install:
223e47cc 43
c34b1796 44 ```sh
7cac9316 45 $ ./x.py build && sudo ./x.py install
c34b1796 46 ```
223e47cc 47
532ac7d7
XL
48 If after running `sudo ./x.py install` you see an error message like
49
50 ```
51 error: failed to load source for a dependency on 'cc'
52 ```
53
54 then run these two commands and then try `sudo ./x.py install` again:
55
56 ```
57 $ cargo install cargo-vendor
58 ```
59
60 ```
61 $ cargo vendor
62 ```
63
8bb4bdeb 64 > ***Note:*** Install locations can be adjusted by copying the config file
3b2f2976 65 > from `./config.toml.example` to `./config.toml`, and
041b39d2
XL
66 > adjusting the `prefix` option under `[install]`. Various other options, such
67 > as enabling debug information, are also supported, and are documented in
68 > the config file.
223e47cc 69
7cac9316 70 When complete, `sudo ./x.py install` will place several programs into
1a4d82fc 71 `/usr/local/bin`: `rustc`, the Rust compiler, and `rustdoc`, the
85aaf69f
SL
72 API-documentation tool. This install does not include [Cargo],
73 Rust's package manager, which you may also want to build.
74
75[Cargo]: https://github.com/rust-lang/cargo
223e47cc 76
1a4d82fc 77### Building on Windows
ea8adc8c 78[building-on-windows]: #building-on-windows
223e47cc 79
9cc50fc6
SL
80There are two prominent ABIs in use on Windows: the native (MSVC) ABI used by
81Visual Studio, and the GNU ABI used by the GCC toolchain. Which version of Rust
82you need depends largely on what C/C++ libraries you want to interoperate with:
83for interop with software produced by Visual Studio use the MSVC build of Rust;
84for interop with GNU software built using the MinGW/MSYS2 toolchain use the GNU
85build.
86
9cc50fc6 87#### MinGW
ea8adc8c 88[windows-mingw]: #windows-mingw
9cc50fc6 89
3157f602 90[MSYS2][msys2] can be used to easily build Rust on Windows:
223e47cc 91
5bcae85e 92[msys2]: https://msys2.github.io/
223e47cc 93
3157f602
XL
941. Grab the latest [MSYS2 installer][msys2] and go through the installer.
95
962. Run `mingw32_shell.bat` or `mingw64_shell.bat` from wherever you installed
97 MSYS2 (i.e. `C:\msys64`), depending on whether you want 32-bit or 64-bit
98 Rust. (As of the latest version of MSYS2 you have to run `msys2_shell.cmd
99 -mingw32` or `msys2_shell.cmd -mingw64` from the command line instead)
100
1013. From this terminal, install the required tools:
c34b1796
AL
102
103 ```sh
e9174d1e
SL
104 # Update package mirrors (may be needed if you have a fresh install of MSYS2)
105 $ pacman -Sy pacman-mirrors
b039eaaf 106
3157f602
XL
107 # Install build tools needed for Rust. If you're building a 32-bit compiler,
108 # then replace "x86_64" below with "i686". If you've already got git, python,
109 # or CMake installed and in PATH you can remove them from this list. Note
32a655c1
SL
110 # that it is important that you do **not** use the 'python2' and 'cmake'
111 # packages from the 'msys2' subsystem. The build has historically been known
112 # to fail with these packages.
3157f602
XL
113 $ pacman -S git \
114 make \
115 diffutils \
c30ab7b3 116 tar \
3157f602
XL
117 mingw-w64-x86_64-python2 \
118 mingw-w64-x86_64-cmake \
119 mingw-w64-x86_64-gcc
c34b1796 120 ```
223e47cc 121
8bb4bdeb 1224. Navigate to Rust's source code (or clone it), then build it:
1a4d82fc 123
c34b1796 124 ```sh
7cac9316 125 $ ./x.py build && ./x.py install
c34b1796 126 ```
b039eaaf 127
9cc50fc6 128#### MSVC
ea8adc8c 129[windows-msvc]: #windows-msvc
9cc50fc6 130
48663c56
XL
131MSVC builds of Rust additionally require an installation of Visual Studio 2017
132(or later) so `rustc` can use its linker. The simplest way is to get the
dc9dc135 133[Visual Studio], check the “C++ build tools” and “Windows 10 SDK” workload.
48663c56 134
dc9dc135 135[Visual Studio]: https://visualstudio.microsoft.com/downloads/
48663c56 136
dc9dc135
XL
137(If you're installing cmake yourself, be careful that “C++ CMake tools for
138Windows” doesn't get included under “Individual components”.)
9cc50fc6 139
476ff2be
SL
140With these dependencies installed, you can build the compiler in a `cmd.exe`
141shell with:
9cc50fc6
SL
142
143```sh
476ff2be 144> python x.py build
9cc50fc6 145```
1a4d82fc 146
94b46f34 147Currently, building Rust only works with some known versions of Visual Studio. If
476ff2be 148you have a more recent version installed the build system doesn't understand
5bcae85e
SL
149then you may need to force rustbuild to use an older version. This can be done
150by manually calling the appropriate vcvars file before running the bootstrap.
151
b7449926 152```batch
dc9dc135 153> CALL "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
b7449926 154> python x.py build
3157f602
XL
155```
156
8bb4bdeb 157#### Specifying an ABI
ea8adc8c 158[specifying-an-abi]: #specifying-an-abi
8bb4bdeb
XL
159
160Each specific ABI can also be used from either environment (for example, using
94b46f34 161the GNU ABI in PowerShell) by using an explicit build triple. The available
8bb4bdeb
XL
162Windows build triples are:
163- GNU ABI (using GCC)
164 - `i686-pc-windows-gnu`
165 - `x86_64-pc-windows-gnu`
166- The MSVC ABI
167 - `i686-pc-windows-msvc`
168 - `x86_64-pc-windows-msvc`
169
3b2f2976 170The build triple can be specified by either specifying `--build=<triple>` when
8bb4bdeb
XL
171invoking `x.py` commands, or by copying the `config.toml` file (as described
172in Building From Source), and modifying the `build` option under the `[build]`
173section.
174
175### Configure and Make
ea8adc8c 176[configure-and-make]: #configure-and-make
8bb4bdeb
XL
177
178While it's not the recommended build system, this project also provides a
179configure script and makefile (the latter of which just invokes `x.py`).
180
181```sh
182$ ./configure
183$ make && sudo make install
184```
185
186When using the configure script, the generated `config.mk` file may override the
187`config.toml` file. To go back to the `config.toml` file, delete the generated
188`config.mk` file.
189
e9174d1e 190## Building Documentation
ea8adc8c 191[building-documentation]: #building-documentation
e9174d1e
SL
192
193If you’d like to build the documentation, it’s almost the same:
194
195```sh
8bb4bdeb 196$ ./x.py doc
e9174d1e
SL
197```
198
cc61c64b
XL
199The generated documentation will appear under `doc` in the `build` directory for
200the ABI used. I.e., if the ABI was `x86_64-pc-windows-msvc`, the directory will be
201`build\x86_64-pc-windows-msvc\doc`.
e9174d1e 202
1a4d82fc 203## Notes
ea8adc8c 204[notes]: #notes
1a4d82fc
JJ
205
206Since the Rust compiler is written in Rust, it must be built by a
94b46f34 207precompiled "snapshot" version of itself (made in an earlier stage of
1a4d82fc
JJ
208development). As such, source builds require a connection to the Internet, to
209fetch snapshots, and an OS that can execute the available snapshot binaries.
210
211Snapshot binaries are currently built and tested on several platforms:
223e47cc 212
0731742a
XL
213| Platform / Architecture | x86 | x86_64 |
214|--------------------------|-----|--------|
215| Windows (7, 8, 10, ...) | ✓ | ✓ |
216| Linux (2.6.18 or later) | ✓ | ✓ |
217| OSX (10.7 Lion or later) | ✓ | ✓ |
1a4d82fc
JJ
218
219You may find that other platforms work, but these are our officially
220supported build environments that are most likely to work.
221
85aaf69f 222There is more advice about hacking on Rust in [CONTRIBUTING.md].
1a4d82fc 223
85aaf69f 224[CONTRIBUTING.md]: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md
1a4d82fc 225
c34b1796 226## Getting Help
ea8adc8c 227[getting-help]: #getting-help
1a4d82fc
JJ
228
229The Rust community congregates in a few places:
230
c34b1796
AL
231* [Stack Overflow] - Direct questions about using the language.
232* [users.rust-lang.org] - General discussion and broader questions.
85aaf69f 233* [/r/rust] - News and general discussion.
1a4d82fc 234
cc61c64b
XL
235[Stack Overflow]: https://stackoverflow.com/questions/tagged/rust
236[/r/rust]: https://reddit.com/r/rust
e9174d1e 237[users.rust-lang.org]: https://users.rust-lang.org/
85aaf69f
SL
238
239## Contributing
ea8adc8c 240[contributing]: #contributing
85aaf69f 241
c34b1796 242To contribute to Rust, please see [CONTRIBUTING](CONTRIBUTING.md).
85aaf69f
SL
243
244Rust has an [IRC] culture and most real-time collaboration happens in a
245variety of channels on Mozilla's IRC network, irc.mozilla.org. The
246most popular channel is [#rust], a venue for general discussion about
54a0048b 247Rust. And a good place to ask for help would be [#rust-beginners].
85aaf69f 248
8faf50e0
XL
249The [rustc guide] might be a good place to start if you want to find out how
250various parts of the compiler work.
251
252Also, you may find the [rustdocs for the compiler itself][rustdocs] useful.
0531ce1d 253
85aaf69f
SL
254[IRC]: https://en.wikipedia.org/wiki/Internet_Relay_Chat
255[#rust]: irc://irc.mozilla.org/rust
54a0048b 256[#rust-beginners]: irc://irc.mozilla.org/rust-beginners
a1dfa0c6 257[rustc guide]: https://rust-lang.github.io/rustc-guide/about-this-guide.html
8faf50e0 258[rustdocs]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc/
223e47cc
LB
259
260## License
ea8adc8c 261[license]: #license
223e47cc
LB
262
263Rust is primarily distributed under the terms of both the MIT license
264and the Apache License (Version 2.0), with portions covered by various
265BSD-like licenses.
266
3157f602
XL
267See [LICENSE-APACHE](LICENSE-APACHE), [LICENSE-MIT](LICENSE-MIT), and
268[COPYRIGHT](COPYRIGHT) for details.
48663c56
XL
269
270## Trademark
271[trademark]: #trademark
272
273The Rust programming language is an open source, community project governed
274by a core team. It is also sponsored by the Mozilla Foundation (“Mozilla”),
275which owns and protects the Rust and Cargo trademarks and logos
276(the “Rust Trademarks”).
277
278If you want to use these names or brands, please read the [media guide][media-guide].
279
280Third-party logos may be subject to third-party copyrights and trademarks. See
281[Licenses][policies-licenses] for details.
282
283[media-guide]: https://www.rust-lang.org/policies/media-guide
284[policies-licenses]: https://www.rust-lang.org/policies/licenses