source: general/prog/rust.xml@ ac4cf9a

trunk
Last change on this file since ac4cf9a was ed84c580, checked in by Xi Ruoyao <xry111@…>, 3 weeks ago

rust: Adapt for LLVM 19

  • Property mode set to 100644
File size: 30.0 KB
RevLine 
[ab4fdfc]1<?xml version="1.0" encoding="UTF-8"?>
[03d537cd]2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../../general.ent">
5 %general-entities;
6
[8d0270d1]7 <!ENTITY rust-download-http "https://static.rust-lang.org/dist/rustc-&rust-version;-src.tar.xz">
[d9bcc5f]8 <!ENTITY rust-download-ftp " ">
[3e232f89]9 <!ENTITY rust-md5sum "4f202568150660f369de3afbfb410970">
10 <!ENTITY rust-size "207 MB">
[d71f68c9]11 <!ENTITY rust-buildsize "8.9 GB (298 MB installed); add 6.4 GB if running the tests">
[1fd7593]12 <!ENTITY rust-time "6.7 SBU (including download time; add 6.2 SBU for tests, both using parallelism=8)">
[03d537cd]13]>
14
15<sect1 id="rust" xreflabel="rustc-&rust-version;">
16 <?dbhtml filename="rust.html"?>
17
18
19 <title>Rustc-&rust-version;</title>
20
21 <indexterm zone="rust">
22 <primary sortas="a-rust">Rust</primary>
23 </indexterm>
24
25 <sect2 role="package">
26 <title>Introduction to Rust</title>
27 <para>
28 The <application>Rust</application> programming language is designed
29 to be a safe, concurrent, practical language.
30 </para>
31
[25997c4a]32 <para>
33 This package is updated on a six-weekly release cycle. Because it is
[ec2353a]34 such a large and slow package to build, is at the moment only required
35 by a few packages in this book, and particularly because newer versions
36 tend to break older mozilla packages, the BLFS editors take the view that
37 it should only be updated when that is necessary (either to fix problems,
38 or to allow a new version of a package to build).
[25997c4a]39 </para>
40
[03d537cd]41 <para>
42 As with many other programming languages, rustc (the rust compiler)
[97e7219]43 needs a binary from which to bootstrap. It will download a stage0
44 binary at the start of the build, so you cannot compile it without an
45 Internet connection.
[25997c4a]46 </para>
47
48 <note>
49 <para>
[d396c65]50 Although BLFS usually installs in <filename
51 class="directory">/usr</filename>, when you later upgrade to a newer
52 version of <application>rust</application> the old libraries in <filename
53 class="directory">/usr/lib/rustlib</filename> will remain, with various
54 hashes in their names, but will not be usable and will waste space. The
55 editors recommend placing the files in the <filename
56 class="directory">/opt</filename> directory. In particular, if you
57 have reason to rebuild with a modified configuration (e.g. using the
[e7c8506a]58 shipped LLVM after building with shared LLVM, perhaps to compile crates
[ca97a2a]59 for architectures which the BLFS LLVM build does not support)
[e7c8506a]60 it is possible for the install to leave a broken
[d396c65]61 <command>cargo</command> program. In such a situation, either remove
62 the existing installation first, or use a different prefix such as
63 /opt/rustc-&rust-version;-build2.
[25997c4a]64 </para>
[b05ea0b]65
66 <para>
[d396c65]67 If you prefer, you can of course change the prefix to <filename
[97e7219]68 class="directory">/usr</filename>.
[b05ea0b]69 </para>
[25997c4a]70 </note>
71
[03d537cd]72 <para>
73 The current <application>rustbuild</application> build-system will use
[bf5fb94]74 all processors, although it does not scale well and often falls
[03d537cd]75 back to just using one core while waiting for a library to compile.
[5ce1bdb]76 However it can be mostly limited to a specified number of processors by
77 a combination of adding the switch <literal>--jobs &lt;N&gt;</literal>
78 (e.g. '--jobs 4' to limit to 4 processors) on each invocation of
[808aeec]79 <command>python3 x.py</command> <emphasis>and</emphasis> using an
[5ce1bdb]80 environment variable <envar>CARGO_BUILD_JOBS=&lt;N&gt;</envar>. At the
81 moment this is not effective when some of the rustc tests are run.
[03d537cd]82 </para>
83
[bf5fb94]84 <para>
85 The current version of rust's num_cpus crate now recognizes that cgroups
86 can be used to restrict which processors it is allowed to use. So if your
[3d516cf]87 machine lacks DRAM (typically, less than 2 GB DRAM per core) that might be
[bf5fb94]88 an alternative to taking CPUs offline.
[b6d54494]89 Read <xref linkend='build-in-cgroup'/> for how to use a cgroup.
[bf5fb94]90 </para>
91
[03d537cd]92 <para>
93 At the moment <application>Rust</application> does not provide any
[4c6edac]94 guarantees of a stable ABI.
[03d537cd]95 </para>
96
[326f830]97 <note>
[7d259126]98 <para>
99 Rustc defaults to building for ALL supported architectures, using a
[4f8ca94]100 shipped copy of LLVM. In BLFS the build is only for the X86
[925dbb2a]101 architecture.
[d396c65]102 If you intend to develop rust crates, this build may not be good
[b05ea0b]103 enough for your purposes.
[7d259126]104 </para>
[326f830]105 <para>
[4f9e45d9]106 The build times of this version when repeated on the same machine are
107 often reasonably consistent, but as with all compilations using
108 <command>rustc</command> there can be some very slow outliers.
[326f830]109 </para>
110 </note>
111
[d4dc5bae]112 &lfs122_checked;
[03d537cd]113
114 <bridgehead renderas="sect3">Package Information</bridgehead>
115 <itemizedlist spacing="compact">
116 <listitem>
117 <para>
118 Download (HTTP): <ulink url="&rust-download-http;"/>
119 </para>
120 </listitem>
121 <listitem>
122 <para>
123 Download (FTP): <ulink url="&rust-download-ftp;"/>
124 </para>
125 </listitem>
126 <listitem>
127 <para>
128 Download MD5 sum: &rust-md5sum;
129 </para>
130 </listitem>
131 <listitem>
132 <para>
133 Download size: &rust-size;
134 </para>
135 </listitem>
136 <listitem>
137 <para>
138 Estimated disk space required: &rust-buildsize;
139 </para>
140 </listitem>
141 <listitem>
142 <para>
143 Estimated build time: &rust-time;
144 </para>
145 </listitem>
146 </itemizedlist>
[e1fe4a2]147 <!-- only keep this here for reuse in case we need a patch
[948ffd7b]148 <bridgehead renderas="sect3">Additional Downloads</bridgehead>
[d7e8f67]149 <itemizedlist spacing="compact">
150 <listitem>
151 <para>
[948ffd7b]152 Optional patch (recommended if running the test suite):
153 <ulink url="&patch-root;/rustc-&rust-version;-testsuite_fix-1.patch"/>
[d7e8f67]154 </para>
155 </listitem>
[948ffd7b]156 </itemizedlist>
[e1fe4a2]157 -->
[03d537cd]158 <bridgehead renderas="sect3">Rust Dependencies</bridgehead>
159
160 <bridgehead renderas="sect4">Required</bridgehead>
161 <para role="required">
[e59834d]162 <xref linkend="cmake"/> and
163 <!-- Required for downloading stage 0 binaries.
164 Otherwise it's recommended (if not installed, a vendored copy
165 will be built). -->
166 <xref linkend="curl"/>
[03d537cd]167 </para>
168
[afb71d0a]169 &build-use-internet;
170
[69d1a8e]171 <bridgehead renderas="sect4">Recommended</bridgehead>
[a7b1bddc]172 <para role="recommended">
[45b2abd3]173 <xref linkend="libssh2"/>,
[0daaefc8]174 <xref linkend="llvm"/>
[cbfa153]175 (built with -D LLVM_LINK_LLVM_DYLIB=ON so that rust can link to
[45b2abd3]176 system LLVM instead of building its shipped version), and
177 <xref linkend="sqlite"/>
[69d1a8e]178 </para>
[a7b1bddc]179
[f2ae6ba8]180 <note>
181 <para>
182 If a recommended dependency is not installed, a shipped copy in the
183 Rustc source tarball will be built and used.
184 </para>
185 </note>
186
[03d537cd]187 <bridgehead renderas="sect4">Optional</bridgehead>
188 <para role="optional">
[08b315d]189 <xref linkend="gdb"/> (used by the test suite if it is present),
[948ffd7b]190 <xref linkend="git"/> (required by the test suite),
191 <ulink url="https://github.com/bytecodealliance/wasmtime/tree/main/cranelift">cranelift</ulink>,
192 <ulink url="https://jemalloc.net/">jemalloc</ulink>,
193 libgccjit (read command explanation in
194 <xref role="nodep" linkend="gcc"/>), and
[13d9cb6a]195 <ulink url='https://libgit2.org/'>libgit2</ulink>
[03d537cd]196 </para>
197
198 <para condition="html" role="usernotes">
[42ddc30]199 Editor Notes: <ulink url="&blfs-wiki;/rust"/>
[03d537cd]200 </para>
201 </sect2>
202
203 <sect2 role="installation">
204 <title>Installation of Rust</title>
205
206 <para>
[d396c65]207 To install into the
[7baeffe]208 <filename class="directory">/opt</filename> directory, remove any
209 existing <filename>/opt/rustc</filename> symlink
[d396c65]210 and create a new directory (i.e. with a different name if trying a
[7baeffe]211 modified build of the same version).
[4f9e45d9]212 As the <systemitem class="username">root</systemitem>
[b05ea0b]213 user:
214 </para>
215
[29c8a42]216<screen role="root"><userinput>mkdir -pv /opt/rustc-&rust-version; &amp;&amp;
[0bc808c]217ln -svfn rustc-&rust-version; /opt/rustc</userinput></screen>
[b05ea0b]218
219 <note>
220 <para>
221 If multiple versions of <application>Rust</application> are installed
222 in <filename class="directory">/opt</filename>, changing to another
223 version only requires changing the <filename> /opt/rustc</filename>
224 symbolic link and then running <command>ldconfig</command>.
225 </para>
226 </note>
227
228 <para>
229 Create a suitable <filename>config.toml</filename> file which will
[4f9e45d9]230 configure the build.
[4c6edac]231 </para>
232
[272f28b]233<screen><userinput>cat &lt;&lt; EOF &gt; config.toml
[51dfb3e]234<literal># see config.toml.example for more possible options
[7baeffe]235# See the 8.4 book for an old example using shipped LLVM
236# e.g. if not installing clang, or using a version before 13.0
237
[948ffd7b]238# Tell x.py the editors have reviewed the content of this file
239# and updated it to follow the major changes of the building system,
240# so x.py will not warn us to do such a review.
[3e232f89]241change-id = 127866
[7baeffe]242
[4c6edac]243[llvm]
[4f9e45d9]244# by default, rust will build for a myriad of architectures
[25997c4a]245targets = "X86"
[4f9e45d9]246
[7f057ac]247# When using system llvm prefer shared libraries
248link-shared = true
249
[4c6edac]250[build]
[4f9e45d9]251# omit docs to save time and space (default is to build them)
[25997c4a]252docs = false
253
[7baeffe]254# install extended tools: cargo, clippy, etc
[4c6edac]255extended = true
256
[97e7219]257# Do not query new versions of dependencies online.
258locked-deps = true
259
[7baeffe]260# Specify which extended tools (those from the default install).
[24ecd679]261tools = ["cargo", "clippy", "rustdoc", "rustfmt"]
[7baeffe]262
[97e7219]263# Use the source code shipped in the tarball for the dependencies.
264# The combination of this and the "locked-deps" entry avoids downloading
265# many crates from Internet, and makes the Rustc build more stable.
266vendor = true
267
[4c6edac]268[install]
[ff803c4]269prefix = "/opt/rustc-&rust-version;"
270docdir = "share/doc/rustc-&rust-version;"
[326f830]271
272[rust]
[4c6edac]273channel = "stable"
[97e7219]274description = "for BLFS &version;"
[a7b1bddc]275
[948ffd7b]276# Enable the same optimizations as the official upstream build.
277lto = "thin"
278codegen-units = 1
279
[0f7f7c9]280[target.x86_64-unknown-linux-gnu]
281# NB the output of llvm-config (i.e. help options) may be
282# dumped to the screen when config.toml is parsed.
283llvm-config = "/usr/bin/llvm-config"
284
285[target.i686-unknown-linux-gnu]
286# NB the output of llvm-config (i.e. help options) may be
287# dumped to the screen when config.toml is parsed.
[808aeec]288llvm-config = "/usr/bin/llvm-config"</literal>
[4c6edac]289EOF</userinput></screen>
[3e232f89]290<!-- It seems gone in 1.81.0 but not confirmed upstream
[948ffd7b]291 <note>
292 <para>
293 The <command>python3 x.py</command> commands may output a warning
[af2b317]294 message complaining <computeroutput>no codegen-backends
[948ffd7b]295 config matched the requested path to build a codegen
[af2b317]296 backend</computeroutput>. And the provided
[948ffd7b]297 <quote>suggestion</quote> (<computeroutput>add backend to
298 codegen-backends in config.toml</computeroutput>) will not silence
299 it. This warning is <ulink
300 url='https://github.com/rust-lang/rust/issues/110692'>bogus</ulink>
301 and it should be ignored.
302 </para>
303 </note>
[3e232f89]304-->
305 <!-- https://github.com/rust-lang/rust/issues/128493
306 https://github.com/rust-lang/rust/issues/130018
307 https://github.com/rust-lang/rust/pull/130034 -->
308 <para>
309 Now remove some tests triggering a full rebuild of the Rust standard
310 library and compiler, remove a special case for supporting the
311 <command>cargo</command> test suite (that we don't run because it's
[e668eb1]312 expected to be running in a Rustc git repository) but triggering a rebuild
[3e232f89]313 of <command>cargo</command> when running
314 <command>python3 x.py install</command>, and prevent building one
315 component useless for BLFS:
316 </para>
317
[ece9683]318 <screen><userinput>sed '/MirOpt/d' -i src/bootstrap/src/core/builder.rs &amp;&amp;
319
320sed 's/!path.ends_with("cargo")/true/' \
321 -i src/bootstrap/src/core/build_steps/tool.rs &amp;&amp;
322
323sed 's/^.*build_wasm.*$/#[allow(unreachable_code)]&amp;return false;/' \
324 -i src/bootstrap/src/lib.rs</userinput></screen>
[948ffd7b]325
[ed84c580]326 <para>
327 Disable one experimental feature which fails to build with LLVM
328 19.1 or newer, and remove the tests for it:
329 </para>
330
331 <screen><userinput>sed '/CondBitmap/,/^}/s/LLVM_VERSION.*/&amp; \&amp;\&amp; LLVM_VERSION_LT(19, 0)/' \
332 -i compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp &amp;&amp;
333
334rm -v tests/coverage/mcdc/{cond*,if,inline*,nest*,non_*}.rs</userinput></screen>
335
[4c6edac]336 <para>
[ec2353a]337 Compile <application>Rust</application> by running the following
[03d537cd]338 commands:
339 </para>
340
[ca97a2a]341<!-- fixed in 1.58.0, retain as a reminder that fixed crates can be used
[e7c8506a]342<screen><userinput>sed -i -e '/^curl /s/0.4.38/0.4.40/' \
343 -e '/^curl-sys /s/0.4.48/0.4.50/' \
[ca97a2a]344 src/tools/cargo/Cargo.toml &amp;&amp; -->
[e7c8506a]345
[ece9683]346<screen><userinput>[ ! -e /usr/include/libssh2.h ] || export LIBSSH2_SYS_USE_PKG_CONFIG=1
347[ ! -e /usr/include/sqlite3.h ] || export LIBSQLITE3_SYS_USE_PKG_CONFIG=1
[808aeec]348python3 x.py build</userinput></screen>
[a7b1bddc]349
[6bcd464]350 <note>
[a7b1bddc]351 <para>
[48771ae]352 The test suite will generate some messages in the
[a7b1bddc]353 <phrase revision="sysv">system log</phrase>
354 <phrase revision="systemd">systemd journal</phrase>
[6bcd464]355 for traps on invalid opcodes, and for segmentation faults.
[25997c4a]356 In themselves these are nothing to worry about, just a way for the
[4f9e45d9]357 test to be terminated.
[a7b1bddc]358 </para>
[6bcd464]359 </note>
[a7b1bddc]360
[03d537cd]361 <para>
[7baeffe]362 To run the tests (again using all available CPUs) issue:
[03d537cd]363 </para>
[f15d31df]364
[3e232f89]365<screen remap="test"><userinput>python3 x.py test --verbose --no-fail-fast | tee rustc-testlog</userinput></screen>
[0c1c573]366
[d6b169d]367 <para>
[3e232f89]368 Four tests in the
369 <filename class='directory'>tests/run-make</filename> directory are
[e9200d8]370 known to fail because they need targets not enabled
371 in the BLFS <xref linkend='llvm'/> configuration (nor the
372 <literal>llvm.targets</literal> in <filename>config.toml</filename>,
[ed84c580]373 in case building with the shipped LLVM). One test named
[3e232f89]374 <literal>core::config::tests::download_ci_llvm</literal> is known to
[ed84c580]375 fail. And, one test named <filename>121444.rs</filename> is known
376 to fail with LLVM 19.1 or newer because a crash is fixed with the new
377 LLVM but the Rustc test harness does not have the concept of
378 unexpected passes.
[35cfc2e]379 </para>
[ebffd4b]380
[32a3136]381<!-- Let's just comment this out. Nobody has tested on a system w/o
382 FileCheck for a long time.
[03d537cd]383 <para>
[7baeffe]384 If <command>FileCheck</command> from <application>LLVM</application> has
385 not been installed, all 47 tests from the <quote>assembly</quote> suite
386 will fail.
[925dbb2a]387 </para>
[32a3136]388-->
[925dbb2a]389 <para>
[ebffd4b]390 As with all large test suites, some tests might fail on some machines -
[320d985]391 if the number of additional failures is low,
[ca97a2a]392 check the log for 'failures:' and review lines above that, particularly the
[4f9e45d9]393 'stderr:' lines. Any mention of
[4cc77fbd]394 SIGSEGV or signal 11 in a failing test is a cause for concern.
[25997c4a]395 </para>
396
[b6ff745e]397 <para>
[69d1a8e]398 If you get any <emphasis>other</emphasis> failing test which reports an
399 issue number then you should search for that issue. For example, when
[bf5fb94]400 rustc &gt;= 1.41.1 was built with a version of sysllvm before 10.0 the test
[925dbb2a]401 for issue 69225 failed <ulink
[69d1a8e]402 url="https://github.com/rust-lang/rust/issues/69225"/> and that should be
[0f7f7c9]403 regarded as a critical failure (they released 1.41.1 because of it).
[69d1a8e]404 Most other failures will not be critical.
405 </para>
406
407 <para>
[bf5fb94]408 Therefore, you should determine the number of failures.
[7baeffe]409 The number of tests which passed and failed can be found by running:
[03d537cd]410 </para>
411
[7baeffe]412<!-- split into two lines for narrower screen windows -->
413<screen remap="test"><userinput>grep '^test result:' rustc-testlog |
414 awk '{sum1 += $4; sum2 += $6} END { print sum1 " passed; " sum2 " failed" }'</userinput></screen>
[03d537cd]415
[4c6edac]416 <para>
[7baeffe]417 The other available fields are $8 for those which were ignored
418 (i.e. skipped), $10 for 'measured' and $12 for 'filtered out' but both
419 those last two are probably zero.
[4c6edac]420 </para>
421
422 <para>
[97e7219]423 Now, as the &root; user, install the package:
[4c6edac]424 </para>
425
[642fdb7]426 <note>
427 <para>
428 If <command>sudo</command> or <command>su</command> is invoked for
429 switching to the &root; user, ensure
[45b2abd3]430 <envar>LIBSSH2_SYS_USE_PKG_CONFIG</envar> and
431 <envar>LIBSQLITE3_SYS_USE_PKG_CONFIG</envar> are correctly passed or
432 the following command may rebuild <command>cargo</command> with
433 shipped copies of libssh2 and sqlite. For <command>sudo</command>,
434 use the
435 <option>--preserve-env=LIB{SSH2,SQLITE3}_SYS_USE_PKG_CONFIG</option>
436 option. For <command>su</command>, do <emphasis>not</emphasis> use
437 the <option>-</option> or <option>--login</option> options.
[642fdb7]438 </para>
439 </note>
440
[c1325868]441<screen role='root'><userinput>python3 x.py install rustc std &amp;&amp;
[3e232f89]442python3 x.py install --stage=1 cargo clippy rustfmt</userinput></screen>
[a7b1bddc]443
[00e0c9cc]444 <para>
[b45106a]445 Still as the &root; user, fix the installation of documentation,
446 symlink a <application>Zsh</application>
447 completion file into the correct location, and move a
448 <application>Bash</application> completion file into the location
449 recommended by the <application>Bash</application> completion
450 maintainers:
[c407a61f]451 </para>
452
[e1fe4a2]453 <screen role='root'><userinput>rm -fv /opt/rustc-&rust-version;/share/doc/rustc-&rust-version;/*.old &amp;&amp;
454install -vm644 README.md \
455 /opt/rustc-&rust-version;/share/doc/rustc-&rust-version; &amp;&amp;
456
457install -vdm755 /usr/share/zsh/site-functions &amp;&amp;
[c407a61f]458ln -sfv /opt/rustc/share/zsh/site-functions/_cargo \
[b45106a]459 /usr/share/zsh/site-functions
460
461mv -v /etc/bash_completion.d/cargo /usr/share/bash-completion/completions</userinput></screen>
[c407a61f]462
[d5b06a4]463 <para>
[45b2abd3]464 Finally, unset the exported environment variables:
[d5b06a4]465 </para>
466
[45b2abd3]467<screen><userinput>unset LIB{SSH2,SQLITE3}_SYS_USE_PKG_CONFIG</userinput></screen>
[d5b06a4]468
[03d537cd]469 </sect2>
470
471 <sect2 role="commands">
[c87567a]472 <title>Command Explanations</title>
[03d537cd]473
474 <para>
[d396c65]475 <command>ln -svfn rustc-&rust-version; /opt/rustc</command>: if this is
476 not the first use of the <filename class="directory">/opt/rustc</filename>
477 symlink, overwrite it by forcing, and use the '-n' flag to avoid getting
478 confusing results from e.g. <command>ls -l</command>.
479 </para>
480
481 <para>
[0c1c573]482 <literal>targets = "X86"</literal>: this avoids building all the available
[97e7219]483 linux cross-compilers (AArch64, MIPS, PowerPC, SystemZ, etc). Unfortunately,
[a7b1bddc]484 rust insists on installing source files for these below
[21699c7e]485 <filename class="directory">/opt/rustc/lib/src</filename>.
[03d537cd]486 </para>
487
488 <para>
[0c1c573]489 <literal>extended = true</literal>: this installs several tools
[97e7219]490 (specified by the <literal>tools</literal> entry) alongside
491 <command>rustc</command>.
[03d537cd]492 </para>
493
[7baeffe]494 <para>
[0c1c573]495 <literal>tools = ["cargo", "clippy", "rustdoc", "rustfmt"]</literal>:
[24ecd679]496 only build the tools from the 'default' profile in binary command
497 <command>rustup</command> which are recommended for most users.
498 The other tools are unlikely to be useful unless using (old) code
499 analyzers or editing the standard library.
[7baeffe]500 </para>
501
[03d537cd]502 <para>
[0c1c573]503 <literal>channel = "stable"</literal>: this ensures only stable features
[4c6edac]504 can be used, the default in <filename>config.toml</filename> is to use
505 development features, which is not appropriate for a released version.
[03d537cd]506 </para>
507
[5f1b4b5]508 <!-- comment while using shipped LLVM -->
[a7b1bddc]509 <para>
[0c1c573]510 <literal>[target.x86_64-unknown-linux-gnu]</literal>: the syntax of
[a7b1bddc]511 <filename>config.toml</filename> requires an <literal>llvm-config</literal>
512 entry for each target for which system-llvm is to be used. Change the target
513 to <literal>[target.i686-unknown-linux-gnu]</literal> if you are building
514 on 32-bit x86. This whole section may be omitted if you wish to build
515 against the shipped llvm, or do not have clang, but the resulting build will
[7d259126]516 be larger and take longer.
[5f1b4b5]517 </para>
[a7b1bddc]518
[ca97a2a]519<!--<para>
[e7c8506a]520 <command>sed -i -e '/^curl /s/0.4.38/0.4.40/' ... </command>: two crates
521 normally downloaded for this release do not correctly initialise
522 <application>curl</application> if using
523 <application>openssl-3.0.0</application>. Upstream has fixed that for a
524 future release, this sed causes the fixed versions to be used.
[ca97a2a]525 </para>-->
[e7c8506a]526
[7baeffe]527 <!-- https://github.com/alexcrichton/ssh2-rs/issues/173 -->
[bb0652ca]528 <para>
[7baeffe]529 <command>export LIBSSH2_SYS_USE_PKG_CONFIG=1</command>: Allow
530 <command>cargo</command> to link to system libssh2.
531 </para>
532
[45b2abd3]533 <!-- src/tools/cargo/Cargo.toml is specifying "bundled" as the
534 upstream is suggesting to avoid issues building for Windoge.
535 We don't care about Windoge so override this if we have
536 system sqlite3. -->
537 <para>
[0d411ad]538 <command>export LIBSQLITE3_SYS_USE_PKG_CONFIG=1</command>: Allow
[45b2abd3]539 <command>cargo</command> to link to system sqlite.
540 </para>
541
[7baeffe]542<!--<para>
[bb0652ca]543 <command>export RUSTFLAGS="$RUSTFLAGS -C link-args=-lffi"</command>:
544 This adds a link to libffi to any RUSTFLAGS you may already be passing
545 to the build. On some systems, linking fails to include libffi unless
546 this is used. The reason why this is needed is not clear.
[7baeffe]547 2023-01-14 : assumed to be no longer needed, but it is some years
548 since one person reported needing this, keep it commented for the moment.
549 </para>-->
[bb0652ca]550
[03d537cd]551 <para>
[0c1c573]552 <parameter>--verbose</parameter>: this switch can sometimes provide more
[4c6edac]553 information about a test which fails.
[03d537cd]554 </para>
[4c6edac]555
556 <para>
[0c1c573]557 <parameter>--no-fail-fast</parameter>: this switch ensures that the test suite
[4c6edac]558 will not stop at the first error.
559 </para>
560
[3e232f89]561 <!-- https://github.com/rust-lang/rust/issues/94147 -->
[c1325868]562 <para>
[3e232f89]563 <parameter>--stage=1</parameter>: this switch works around an issue
[c1325868]564 causing some Rustc components unnecessarily rebuilt running
565 <command>python3 x.py install</command>.
566 </para>
567
[03d537cd]568 </sect2>
569
[b05ea0b]570 <sect2 role="configuration">
571 <title>Configuring Rust</title>
572
573 <sect3 id="rustc-config">
574 <title>Configuration Information</title>
575
576 <para>
577 If you installed <application>rustc</application> in
578 <filename class="directory">/opt</filename>, you need to update the
[de33b2a]579 following configuration files so that <application>rustc</application>
580 is correctly found by other packages and system processes.
[b05ea0b]581 </para>
582
583 <para>
584 As the <systemitem class="username">root</systemitem> user, create
585 the <filename>/etc/profile.d/rustc.sh</filename> file:
586 </para>
587
588<screen role="root"><userinput>cat &gt; /etc/profile.d/rustc.sh &lt;&lt; "EOF"
589<literal># Begin /etc/profile.d/rustc.sh
590
591pathprepend /opt/rustc/bin PATH
592
593# End /etc/profile.d/rustc.sh</literal>
594EOF</userinput></screen>
595
[de33b2a]596 <para>
[8558044]597 Immediately after installation, update the current PATH
[de33b2a]598 for your current shell as a normal user:
599 </para>
[b05ea0b]600
601<screen><userinput>source /etc/profile.d/rustc.sh</userinput></screen>
602
603 </sect3>
604 </sect2>
605
606
[03d537cd]607 <sect2 role="content">
608 <title>Contents</title>
609
610 <segmentedlist>
[78399edc]611 <segtitle>Installed Programs</segtitle>
612 <segtitle>Installed Libraries</segtitle>
613 <segtitle>Installed Directories</segtitle>
[03d537cd]614
[c87567a]615 <seglistitem>
[03d537cd]616 <seg>
[7baeffe]617 cargo-clippy, cargo-fmt, cargo, clippy-driver, rust-gdb,
[bf4b5fc]618 rust-gdbgui, rust-lldb, rustc, rustdoc, and rustfmt
[03d537cd]619 </seg>
620 <seg>
[3e8c126]621 librustc-driver-&lt;16-byte-hash&gt;.so,
622 libstd-&lt;16-byte-hash&gt;.so, and
623 libtest-&lt;16-byte-hash&gt;.so
[03d537cd]624 </seg>
625 <seg>
626 ~/.cargo,
[3e8c126]627 /opt/rustc, symbolic link to
628 /opt/rustc-&rust-version;
[03d537cd]629 </seg>
630 </seglistitem>
631 </segmentedlist>
632
633 <variablelist>
634 <bridgehead renderas="sect3">Short Descriptions</bridgehead>
635 <?dbfo list-presentation="list"?>
636 <?dbhtml list-presentation="table"?>
637
[7d259126]638 <varlistentry id="cargo-clippy">
639 <term><command>cargo-clippy</command></term>
640 <listitem>
641 <para>
[4c24eb0a]642 provides lint checks for a cargo package
[7d259126]643 </para>
644 <indexterm zone="rust cargo-clippy">
645 <primary sortas="b-cargo-clippy">cargo-clippy</primary>
646 </indexterm>
647 </listitem>
648 </varlistentry>
649
[a7b1bddc]650 <varlistentry id="cargo-fmt">
651 <term><command>cargo-fmt</command></term>
652 <listitem>
653 <para>
654 formats all bin and lib files of the current crate using
[4c24eb0a]655 rustfmt
[a7b1bddc]656 </para>
657 <indexterm zone="rust cargo-fmt">
658 <primary sortas="b-cargo-fmt">cargo-fmt</primary>
659 </indexterm>
660 </listitem>
661 </varlistentry>
662
[7baeffe]663<!-- <varlistentry id="cargo-miri">
[4f9e45d9]664 <term><command>cargo-miri</command></term>
665 <listitem>
666 <para>
[bf4b5fc]667 is for use by Miri to interpret bin crates and tests. It is
668 not installed by default.
[4f9e45d9]669 </para>
670 <indexterm zone="rust cargo-miri">
671 <primary sortas="b-cargo-miri">cargo-miri</primary>
672 </indexterm>
673 </listitem>
[7baeffe]674 </varlistentry>-->
[4f9e45d9]675
[4c6edac]676 <varlistentry id="cargo">
677 <term><command>cargo</command></term>
678 <listitem>
679 <para>
[4c24eb0a]680 is the Package Manager for Rust
[4c6edac]681 </para>
682 <indexterm zone="rust cargo">
683 <primary sortas="b-cargo">cargo</primary>
684 </indexterm>
685 </listitem>
686 </varlistentry>
687
[7d259126]688 <varlistentry id="clippy-driver">
689 <term><command>clippy-driver</command></term>
690 <listitem>
691 <para>
[4c24eb0a]692 provides lint checks for Rust
[7d259126]693 </para>
694 <indexterm zone="rust clippy-driver">
695 <primary sortas="b-clippy-driver">clippy-driver</primary>
696 </indexterm>
697 </listitem>
698 </varlistentry>
699
[7baeffe]700<!-- <varlistentry id="miri">
[4f9e45d9]701 <term><command>miri</command></term>
702 <listitem>
703 <para>
704 is an interpreter for Rust's mid-level intermediate representation
[bf4b5fc]705 (MIR). It is not installed by default.
[4f9e45d9]706 </para>
707 <indexterm zone="rust miri">
708 <primary sortas="b-miri">miri</primary>
709 </indexterm>
710 </listitem>
711 </varlistentry>
712
[326f830]713 <varlistentry id="rls">
714 <term><command>rls</command></term>
715 <listitem>
716 <para>
717 is the Rust Language Server. This can run in the background to
718 provide IDEs, editors, and other tools with information about Rust
[4c24eb0a]719 programs
[326f830]720 </para>
721 <indexterm zone="rust rls">
722 <primary sortas="b-rls">rls</primary>
723 </indexterm>
724 </listitem>
725 </varlistentry>
726
[f78dbb74]727 <varlistentry id="rust-analyzer">
728 <term><command>rust-analyzer</command></term>
729 <listitem>
730 <para>
731 is an implementation of Language Server Protocol for the Rust
732 programming language.
733 </para>
734 <indexterm zone="rust rust-analyzer">
735 <primary sortas="b-rust-analyzer">rust-analyzer</primary>
736 </indexterm>
737 </listitem>
738 </varlistentry>
739
[bf4b5fc]740 <varlistentry id="rust-demangler">
741 <term><command>rust-demangler</command></term>
742 <listitem>
743 <para>
744 converts a list of Rust mangled symbols into a
745 corresponding list of demangled symbols
746 </para>
747 <indexterm zone="rust rust-demangler">
748 <primary sortas="b-rust-demangler">rust-demangler</primary>
749 </indexterm>
750 </listitem>
[7baeffe]751 </varlistentry> -->
[bf4b5fc]752
[03d537cd]753 <varlistentry id="rust-gdb">
754 <term><command>rust-gdb</command></term>
755 <listitem>
756 <para>
[4c24eb0a]757 is a wrapper script for gdb, pulling in Python pretty-printing
758 modules installed in
759 <filename class="directory">/opt/rustc-&rust-version;/lib/rustlib/etc</filename>
[03d537cd]760 </para>
761 <indexterm zone="rust rust-gdb">
762 <primary sortas="b-rust-gdb">rust-gdb</primary>
763 </indexterm>
764 </listitem>
765 </varlistentry>
766
[ec2353a]767 <varlistentry id="rust-gdbgui">
768 <term><command>rust-gdbgui</command></term>
769 <listitem>
770 <para>
771 is a wrapper script for a graphical front end to gdb that runs in a
[4c24eb0a]772 browser
[ec2353a]773 </para>
774 <indexterm zone="rust rust-gdbgui">
775 <primary sortas="b-rust-gdbgui">rust-gdbgui</primary>
776 </indexterm>
777 </listitem>
778 </varlistentry>
779
[03d537cd]780 <varlistentry id="rust-lldb">
781 <term><command>rust-lldb</command></term>
782 <listitem>
783 <para>
[a7b1bddc]784 is a wrapper script for LLDB (the LLVM debugger)
[4c24eb0a]785 pulling in the Python pretty-printing modules
[03d537cd]786 </para>
787 <indexterm zone="rust rust-lldb">
788 <primary sortas="b-rust-lldb">rust=lldb</primary>
789 </indexterm>
790 </listitem>
791 </varlistentry>
792
793 <varlistentry id="rustc">
794 <term><command>rustc</command></term>
795 <listitem>
796 <para>
[4c24eb0a]797 is the rust compiler
[03d537cd]798 </para>
799 <indexterm zone="rust rustc">
800 <primary sortas="b-rustc">rustc</primary>
801 </indexterm>
802 </listitem>
803 </varlistentry>
804
805 <varlistentry id="rustdoc">
806 <term><command>rustdoc</command></term>
807 <listitem>
808 <para>
[4c24eb0a]809 generates documentation from rust source code
[03d537cd]810 </para>
811 <indexterm zone="rust rustdoc">
812 <primary sortas="b-rustdoc">rustdoc</primary>
813 </indexterm>
814 </listitem>
815 </varlistentry>
816
[a7b1bddc]817 <varlistentry id="rustfmt">
818 <term><command>rustfmt</command></term>
819 <listitem>
820 <para>
[4c24eb0a]821 formats rust code
[a7b1bddc]822 </para>
823 <indexterm zone="rust rustfmt">
824 <primary sortas="b-rustfmt">rustfmt</primary>
825 </indexterm>
826 </listitem>
827 </varlistentry>
828
[03d537cd]829 <varlistentry id="libstd">
830 <term><filename class="libraryfile">libstd-&lt;16-byte-hash&gt;.so</filename></term>
831 <listitem>
832 <para>
[4c24eb0a]833 is the Rust Standard Library, the foundation of portable Rust software
[03d537cd]834 </para>
835 <indexterm zone="rust libstd">
836 <primary sortas="c-libstd">libstd-&lt;16-byte-hash&gt;.so</primary>
837 </indexterm>
838 </listitem>
839 </varlistentry>
840 </variablelist>
841 </sect2>
[4c24eb0a]842
[03d537cd]843</sect1>
Note: See TracBrowser for help on using the repository browser.