source: general/prog/rust.xml@ 32bcdbf0

12.0 12.1 ken/TL2024 ken/tuningfonts lazarus plabs/newcss python3.11 rahul/power-profiles-daemon renodr/vulkan-addition trunk xry111/llvm18
Last change on this file since 32bcdbf0 was 00e0c9cc, checked in by Xi Ruoyao <xry111@…>, 11 months ago

rust: Remove spurious ".old" files

This is a after-tag change but I suppose it's OK. I don't think
anything will ever invoke a rustc utility with ".old" name.

  • Property mode set to 100644
File size: 28.6 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
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
7 <!ENTITY rust-download-http "https://static.rust-lang.org/dist/rustc-&rust-version;-src.tar.xz">
8 <!ENTITY rust-download-ftp " ">
9 <!ENTITY rust-md5sum "b6f9973de878e37a589f0989e4138480">
10 <!ENTITY rust-size "145 MB">
11 <!ENTITY rust-buildsize "8.9 GB (292 MB installed); add 6.4 GB if running the tests">
12 <!ENTITY rust-time "6.7 SBU (including download time; add 6.2 SBU for tests, both using parallelism=8)">
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
32 <para>
33 This package is updated on a six-weekly release cycle. Because it is
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).
39 </para>
40
41 <para>
42 As with many other programming languages, rustc (the rust compiler)
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.
46 </para>
47
48 <note>
49 <para>
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
58 shipped LLVM after building with shared LLVM, perhaps to compile crates
59 for architectures which the BLFS LLVM build does not support)
60 it is possible for the install to leave a broken
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.
64 </para>
65
66 <para>
67 If you prefer, you can of course change the prefix to <filename
68 class="directory">/usr</filename>.
69 </para>
70 </note>
71
72 <para>
73 The current <application>rustbuild</application> build-system will use
74 all processors, although it does not scale well and often falls
75 back to just using one core while waiting for a library to compile.
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
79 <command>python3 ./x.py</command> <emphasis>and</emphasis> using an
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.
82 </para>
83
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
87 machine lacks DRAM (typically, less than 2GB DRAM per core) that might be
88 an alternative to taking CPUs offline.
89 <phrase revision="sysv">In sysv systems cgroups requires <ulink
90 url="https://sourceforge.net/projects/libcg/">libcgroup</ulink>.</phrase>
91 <phrase revision="systemd">That can be achieved by using
92 <command>systemd-run</command> command with
93 <parameter>-p User=$(whoami)</parameter> and
94 <parameter>-p AllowedCPUs=0-<replaceable>x</replaceable></parameter>
95 (with <replaceable>x</replaceable> replaced with the number of CPU
96 cores you want to use minus one) options.</phrase>
97 </para>
98
99 <para>
100 At the moment <application>Rust</application> does not provide any
101 guarantees of a stable ABI.
102 </para>
103
104 <note>
105 <para>
106 Rustc defaults to building for ALL supported architectures, using a
107 shipped copy of LLVM. In BLFS the build is only for the X86
108 architecture.
109 If you intend to develop rust crates, this build may not be good
110 enough for your purposes.
111 </para>
112 <para>
113 The build times of this version when repeated on the same machine are
114 often reasonably consistent, but as with all compilations using
115 <command>rustc</command> there can be some very slow outliers.
116 </para>
117 </note>
118
119 &lfs120_checked;
120
121 <bridgehead renderas="sect3">Package Information</bridgehead>
122 <itemizedlist spacing="compact">
123 <listitem>
124 <para>
125 Download (HTTP): <ulink url="&rust-download-http;"/>
126 </para>
127 </listitem>
128 <listitem>
129 <para>
130 Download (FTP): <ulink url="&rust-download-ftp;"/>
131 </para>
132 </listitem>
133 <listitem>
134 <para>
135 Download MD5 sum: &rust-md5sum;
136 </para>
137 </listitem>
138 <listitem>
139 <para>
140 Download size: &rust-size;
141 </para>
142 </listitem>
143 <listitem>
144 <para>
145 Estimated disk space required: &rust-buildsize;
146 </para>
147 </listitem>
148 <listitem>
149 <para>
150 Estimated build time: &rust-time;
151 </para>
152 </listitem>
153 </itemizedlist>
154
155<!--<bridgehead renderas="sect3">Additional Downloads</bridgehead>
156 <itemizedlist spacing="compact">
157 <listitem>
158 <para>
159 Required patch:
160 <ulink url="&patch-root;/rustc-&rust-version;-llvm9_fixes-1.patch"/>
161 </para>
162 </listitem>
163 </itemizedlist>-->
164
165 <bridgehead renderas="sect3">Rust Dependencies</bridgehead>
166
167 <bridgehead renderas="sect4">Required</bridgehead>
168 <para role="required">
169 <xref linkend="cmake"/> and
170 <!-- Required for downloading stage 0 binaries.
171 Otherwise it's recommended (if not installed, a vendored copy
172 will be built). -->
173 <xref linkend="curl"/>
174 </para>
175
176 &build-use-internet;
177
178 <bridgehead renderas="sect4">Recommended</bridgehead>
179 <para role="recommended">
180 <xref linkend="libssh2"/> and
181 <xref linkend="llvm"/>
182 (built with -DLLVM_LINK_LLVM_DYLIB=ON so that rust can link to
183 system LLVM instead of building its shipped version)
184 </para>
185
186 <note>
187 <para>
188 If a recommended dependency is not installed, a shipped copy in the
189 Rustc source tarball will be built and used.
190 </para>
191 </note>
192
193 <bridgehead renderas="sect4">Optional</bridgehead>
194 <para role="optional">
195 <xref linkend="gdb"/> (used by the test suite if it is present) and
196 <ulink url='https://libgit2.org/'>libgit2</ulink>
197 </para>
198
199 <para condition="html" role="usernotes">
200 Editor Notes: <ulink url="&blfs-wiki;/rust"/>
201 </para>
202 </sect2>
203
204 <sect2 role="installation">
205 <title>Installation of Rust</title>
206
207 <note>
208 <para>
209 Currently the rust compiler produces SSE2 instructions for 32-bit x86,
210 causing the generated code to be broken on 32-bit systems without a
211 SSE2-capable processor. All x86 processor models released after
212 2004 should be SSE2-capable. Run
213 <command>lscpu | grep sse2</command> as a test. If it outputs
214 anything, your CPU is SSE2-capable and OK. Otherwise you may try
215 to build this package <emphasis>on a SSE2-capable system</emphasis>
216 with the following fix applied:
217 </para>
218
219 <!-- computeroutput used deliberately to stop anyone from copying
220 blindly -->
221<screen role="nodump"><computeroutput>sed 's@pentium4@pentiumpro@' -i \
222 compiler/rustc_target/src/spec/i686_unknown_linux_gnu.rs</computeroutput></screen>
223
224 <para>
225 And copy the resulting
226 <filename class="directory">/opt/rustc-&rust-version;</filename>
227 to the system without SSE2 capability. But this change is still
228 under upstream review and not tested by BLFS editors.
229 </para>
230 </note>
231
232 <para>
233 To install into the
234 <filename class="directory">/opt</filename> directory, remove any
235 existing <filename>/opt/rustc</filename> symlink
236 and create a new directory (i.e. with a different name if trying a
237 modified build of the same version).
238 As the <systemitem class="username">root</systemitem>
239 user:
240 </para>
241
242<screen role="root"><userinput>mkdir -pv /opt/rustc-&rust-version; &amp;&amp;
243ln -svfn rustc-&rust-version; /opt/rustc</userinput></screen>
244
245 <note>
246 <para>
247 If multiple versions of <application>Rust</application> are installed
248 in <filename class="directory">/opt</filename>, changing to another
249 version only requires changing the <filename> /opt/rustc</filename>
250 symbolic link and then running <command>ldconfig</command>.
251 </para>
252 </note>
253
254 <para>
255 Create a suitable <filename>config.toml</filename> file which will
256 configure the build.
257 </para>
258
259<screen><userinput>cat &lt;&lt; EOF &gt; config.toml
260<literal># see config.toml.example for more possible options
261# See the 8.4 book for an old example using shipped LLVM
262# e.g. if not installing clang, or using a version before 13.0
263
264# tell x.py to not keep printing an annoying warning
265changelog-seen = 2
266
267[llvm]
268# by default, rust will build for a myriad of architectures
269targets = "X86"
270
271# When using system llvm prefer shared libraries
272link-shared = true
273
274[build]
275# omit docs to save time and space (default is to build them)
276docs = false
277
278# install extended tools: cargo, clippy, etc
279extended = true
280
281# Do not query new versions of dependencies online.
282locked-deps = true
283
284# Specify which extended tools (those from the default install).
285tools = ["cargo", "clippy", "rustdoc", "rustfmt"]
286
287# Use the source code shipped in the tarball for the dependencies.
288# The combination of this and the "locked-deps" entry avoids downloading
289# many crates from Internet, and makes the Rustc build more stable.
290vendor = true
291
292[install]
293prefix = "/opt/rustc-&rust-version;"
294docdir = "share/doc/rustc-&rust-version;"
295
296[rust]
297channel = "stable"
298description = "for BLFS &version;"
299
300# BLFS used to not install the FileCheck executable from llvm,
301# so disabled codegen tests. The assembly tests rely on FileCheck
302# and cannot easily be disabled, so those will anyway fail if
303# FileCheck has not been installed.
304#codegen-tests = false
305
306[target.x86_64-unknown-linux-gnu]
307# NB the output of llvm-config (i.e. help options) may be
308# dumped to the screen when config.toml is parsed.
309llvm-config = "/usr/bin/llvm-config"
310
311[target.i686-unknown-linux-gnu]
312# NB the output of llvm-config (i.e. help options) may be
313# dumped to the screen when config.toml is parsed.
314llvm-config = "/usr/bin/llvm-config"
315
316</literal>
317EOF</userinput></screen>
318
319<!--<para>
320 Adapt rustc to allow it to build and function with the changes in LLVM-9:
321 </para>
322
323<screen><userinput remap="pre">patch -Np1 -i ../rustc-&rust-version;-llvm9_fixes-1.patch</userinput></screen>-->
324
325 <para>
326 Compile <application>Rust</application> by running the following
327 commands:
328 </para>
329
330<!-- fixed in 1.58.0, retain as a reminder that fixed crates can be used
331<screen><userinput>sed -i -e '/^curl /s/0.4.38/0.4.40/' \
332 -e '/^curl-sys /s/0.4.48/0.4.50/' \
333 src/tools/cargo/Cargo.toml &amp;&amp; -->
334
335<screen><userinput>{ [ ! -e /usr/include/libssh2.h ] ||
336 export LIBSSH2_SYS_USE_PKG_CONFIG=1; } &amp;&amp;
337python3 ./x.py build</userinput></screen>
338
339 <note>
340 <para>
341 The test suite will generate some messages in the
342 <phrase revision="sysv">system log</phrase>
343 <phrase revision="systemd">systemd journal</phrase>
344 for traps on invalid opcodes, and for segmentation faults.
345 In themselves these are nothing to worry about, just a way for the
346 test to be terminated.
347 </para>
348 </note>
349
350 <para>
351 To run the tests (again using all available CPUs) issue:
352 </para>
353
354<screen remap="test"><userinput>SSL_CERT_DIR=/etc/ssl/certs \
355python3 ./x.py test --verbose --no-fail-fast | tee rustc-testlog</userinput></screen>
356
357 <!-- https://github.com/rust-lang/rust/issues/112209 -->
358 <para>
359 Two <literal>ui</literal> tests may fail (depending on the length
360 of absolute path of the
361 <filename class='directory'>rustc-&rust-version;-src</filename>
362 directory).
363 </para>
364
365 <para>
366 If <command>FileCheck</command> from <application>LLVM</application> has
367 not been installed, all 47 tests from the <quote>assembly</quote> suite
368 will fail.
369 </para>
370
371 <para>
372 On some systems, scripting the tests may result in the tests hanging on
373 <filename>test: combine_install_with_separate_uninstall</filename>. If
374 this happens, the problem can be worked around by pressing the Enter key.
375 The test can also be removed with:
376 </para>
377
378<screen role="nodump"><userinput>sed -e '/runtest combine_install_with/s/^/#/g' -i src/tools/rust-installer/test.sh</userinput></screen>
379
380 <para>
381 As with all large test suites, other tests might fail on some machines -
382 if the number of additional failures is low,
383 check the log for 'failures:' and review lines above that, particularly the
384 'stderr:' lines. Any mention of
385 SIGSEGV or signal 11 in a failing test is a cause for concern.
386 </para>
387
388 <para>
389 If you get any <emphasis>other</emphasis> failing test which reports an
390 issue number then you should search for that issue. For example, when
391 rustc &gt;= 1.41.1 was built with a version of sysllvm before 10.0 the test
392 for issue 69225 failed <ulink
393 url="https://github.com/rust-lang/rust/issues/69225"/> and that should be
394 regarded as a critical failure (they released 1.41.1 because of it).
395 Most other failures will not be critical.
396 </para>
397
398 <para>
399 Therefore, you should determine the number of failures.
400 </para>
401
402 <para>
403 The number of tests which passed and failed can be found by running:
404 </para>
405
406<!-- split into two lines for narrower screen windows -->
407<screen remap="test"><userinput>grep '^test result:' rustc-testlog |
408 awk '{sum1 += $4; sum2 += $6} END { print sum1 " passed; " sum2 " failed" }'</userinput></screen>
409
410 <para>
411 The other available fields are $8 for those which were ignored
412 (i.e. skipped), $10 for 'measured' and $12 for 'filtered out' but both
413 those last two are probably zero.
414 </para>
415
416 <para>
417 Now, as the &root; user, install the package:
418 </para>
419
420 <note>
421 <para>
422 If <command>sudo</command> or <command>su</command> is invoked for
423 switching to the &root; user, ensure
424 <envar>LIBSSH2_SYS_USE_PKG_CONFIG</envar> is correctly passed or the
425 following command may completely rebuild this package. For
426 <command>sudo</command>, use the
427 <option>--preserve-env=LIBSSH2_SYS_USE_PKG_CONFIG</option> option.
428 For <command>su</command>, do <emphasis>not</emphasis> use the
429 <option>-</option> or <option>--login</option>.
430 </para>
431 </note>
432
433<screen role='root'><userinput>python3 ./x.py install</userinput></screen>
434
435 <!-- TODO: Report to upstream if this persists in the next release -->
436 <para>
437 The building system attempts to install some files twice, and during
438 the second attempt it renames the old one (installed in the first
439 attempt) with the <filename class='extension'>.old</filename> suffix.
440 As the &root; user, remove these files:
441 </para>
442
443 <screen role='root'><userinput>find /opt/rustc-&rust-version; -name "*.old" -delete</userinput></screen>
444
445 <para>
446 Still as the &root; user, symlink a <application>Zsh</application>
447 completion file into the correct location:
448 </para>
449
450<screen role='root'><userinput>install -vdm755 /usr/share/zsh/site-functions &amp;&amp;
451ln -sfv /opt/rustc/share/zsh/site-functions/_cargo \
452 /usr/share/zsh/site-functions</userinput></screen>
453
454 </sect2>
455
456 <sect2 role="commands">
457 <title>Command Explanations</title>
458
459 <para>
460 <command>ln -svfn rustc-&rust-version; /opt/rustc</command>: if this is
461 not the first use of the <filename class="directory">/opt/rustc</filename>
462 symlink, overwrite it by forcing, and use the '-n' flag to avoid getting
463 confusing results from e.g. <command>ls -l</command>.
464 </para>
465
466 <para>
467 <literal>targets = "X86"</literal>: this avoids building all the available
468 linux cross-compilers (AArch64, MIPS, PowerPC, SystemZ, etc). Unfortunately,
469 rust insists on installing source files for these below
470 <filename class="directory">/opt/rustc/lib/src</filename>.
471 </para>
472
473 <para>
474 <literal>extended = true</literal>: this installs several tools
475 (specified by the <literal>tools</literal> entry) alongside
476 <command>rustc</command>.
477 </para>
478
479 <para>
480 <literal>tools = ["cargo", "clippy", "rustdoc", "rustfmt"]</literal>:
481 only build the tools from the 'default' profile in binary command
482 <command>rustup</command> which are recommended for most users.
483 The other tools are unlikely to be useful unless using (old) code
484 analyzers or editing the standard library.
485 </para>
486
487 <para>
488 <literal>channel = "stable"</literal>: this ensures only stable features
489 can be used, the default in <filename>config.toml</filename> is to use
490 development features, which is not appropriate for a released version.
491 </para>
492
493 <!-- comment while using shipped LLVM -->
494 <para>
495 <literal>[target.x86_64-unknown-linux-gnu]</literal>: the syntax of
496 <filename>config.toml</filename> requires an <literal>llvm-config</literal>
497 entry for each target for which system-llvm is to be used. Change the target
498 to <literal>[target.i686-unknown-linux-gnu]</literal> if you are building
499 on 32-bit x86. This whole section may be omitted if you wish to build
500 against the shipped llvm, or do not have clang, but the resulting build will
501 be larger and take longer.
502 </para>
503
504<!--<para>
505 <command>sed -i -e '/^curl /s/0.4.38/0.4.40/' ... </command>: two crates
506 normally downloaded for this release do not correctly initialise
507 <application>curl</application> if using
508 <application>openssl-3.0.0</application>. Upstream has fixed that for a
509 future release, this sed causes the fixed versions to be used.
510 </para>-->
511
512 <!-- https://github.com/alexcrichton/ssh2-rs/issues/173 -->
513 <para>
514 <command>export LIBSSH2_SYS_USE_PKG_CONFIG=1</command>: Allow
515 <command>cargo</command> to link to system libssh2.
516 </para>
517
518<!--<para>
519 <command>export RUSTFLAGS="$RUSTFLAGS -C link-args=-lffi"</command>:
520 This adds a link to libffi to any RUSTFLAGS you may already be passing
521 to the build. On some systems, linking fails to include libffi unless
522 this is used. The reason why this is needed is not clear.
523 2023-01-14 : assumed to be no longer needed, but it is some years
524 since one person reported needing this, keep it commented for the moment.
525 </para>-->
526
527 <!-- https://github.com/alexcrichton/openssl-probe/issues/25 -->
528 <para>
529 <envar>SSL_CERT_DIR=/etc/ssl/certs</envar>: Work around an issue
530 causing test failures with the CA certificate store layout used by
531 <xref linkend='make-ca'/>.
532 </para>
533
534 <para>
535 <parameter>--verbose</parameter>: this switch can sometimes provide more
536 information about a test which fails.
537 </para>
538
539 <para>
540 <parameter>--no-fail-fast</parameter>: this switch ensures that the test suite
541 will not stop at the first error.
542 </para>
543
544 </sect2>
545
546 <sect2 role="configuration">
547 <title>Configuring Rust</title>
548
549 <sect3 id="rustc-config">
550 <title>Configuration Information</title>
551
552 <para>
553 If you installed <application>rustc</application> in
554 <filename class="directory">/opt</filename>, you need to update the
555 following configuration files so that <application>rustc</application>
556 is correctly found by other packages and system processes.
557 </para>
558
559 <para>
560 As the <systemitem class="username">root</systemitem> user, create
561 the <filename>/etc/profile.d/rustc.sh</filename> file:
562 </para>
563
564<screen role="root"><userinput>cat &gt; /etc/profile.d/rustc.sh &lt;&lt; "EOF"
565<literal># Begin /etc/profile.d/rustc.sh
566
567pathprepend /opt/rustc/bin PATH
568
569# Include /opt/rustc/man in the MANPATH variable to access manual pages
570pathappend /opt/rustc/share/man MANPATH
571
572# End /etc/profile.d/rustc.sh</literal>
573EOF</userinput></screen>
574
575 <para>
576 Immediately after installation, update the current PATH
577 for your current shell as a normal user:
578 </para>
579
580<screen><userinput>source /etc/profile.d/rustc.sh</userinput></screen>
581
582 </sect3>
583 </sect2>
584
585
586 <sect2 role="content">
587 <title>Contents</title>
588
589 <segmentedlist>
590 <segtitle>Installed Programs</segtitle>
591 <segtitle>Installed Libraries</segtitle>
592 <segtitle>Installed Directories</segtitle>
593
594 <seglistitem>
595 <seg>
596 cargo-clippy, cargo-fmt, cargo, clippy-driver, rust-gdb,
597 rust-gdbgui, rust-lldb, rustc, rustdoc, and rustfmt
598 </seg>
599 <seg>
600 librustc-driver-&lt;16-byte-hash&gt;.so,
601 libstd-&lt;16-byte-hash&gt;.so, and
602 libtest-&lt;16-byte-hash&gt;.so
603 </seg>
604 <seg>
605 ~/.cargo,
606 /opt/rustc, symbolic link to
607 /opt/rustc-&rust-version;
608 </seg>
609 </seglistitem>
610 </segmentedlist>
611
612 <variablelist>
613 <bridgehead renderas="sect3">Short Descriptions</bridgehead>
614 <?dbfo list-presentation="list"?>
615 <?dbhtml list-presentation="table"?>
616
617 <varlistentry id="cargo-clippy">
618 <term><command>cargo-clippy</command></term>
619 <listitem>
620 <para>
621 provides lint checks for a cargo package
622 </para>
623 <indexterm zone="rust cargo-clippy">
624 <primary sortas="b-cargo-clippy">cargo-clippy</primary>
625 </indexterm>
626 </listitem>
627 </varlistentry>
628
629 <varlistentry id="cargo-fmt">
630 <term><command>cargo-fmt</command></term>
631 <listitem>
632 <para>
633 formats all bin and lib files of the current crate using
634 rustfmt
635 </para>
636 <indexterm zone="rust cargo-fmt">
637 <primary sortas="b-cargo-fmt">cargo-fmt</primary>
638 </indexterm>
639 </listitem>
640 </varlistentry>
641
642<!-- <varlistentry id="cargo-miri">
643 <term><command>cargo-miri</command></term>
644 <listitem>
645 <para>
646 is for use by Miri to interpret bin crates and tests. It is
647 not installed by default.
648 </para>
649 <indexterm zone="rust cargo-miri">
650 <primary sortas="b-cargo-miri">cargo-miri</primary>
651 </indexterm>
652 </listitem>
653 </varlistentry>-->
654
655 <varlistentry id="cargo">
656 <term><command>cargo</command></term>
657 <listitem>
658 <para>
659 is the Package Manager for Rust
660 </para>
661 <indexterm zone="rust cargo">
662 <primary sortas="b-cargo">cargo</primary>
663 </indexterm>
664 </listitem>
665 </varlistentry>
666
667 <varlistentry id="clippy-driver">
668 <term><command>clippy-driver</command></term>
669 <listitem>
670 <para>
671 provides lint checks for Rust
672 </para>
673 <indexterm zone="rust clippy-driver">
674 <primary sortas="b-clippy-driver">clippy-driver</primary>
675 </indexterm>
676 </listitem>
677 </varlistentry>
678
679<!-- <varlistentry id="miri">
680 <term><command>miri</command></term>
681 <listitem>
682 <para>
683 is an interpreter for Rust's mid-level intermediate representation
684 (MIR). It is not installed by default.
685 </para>
686 <indexterm zone="rust miri">
687 <primary sortas="b-miri">miri</primary>
688 </indexterm>
689 </listitem>
690 </varlistentry>
691
692 <varlistentry id="rls">
693 <term><command>rls</command></term>
694 <listitem>
695 <para>
696 is the Rust Language Server. This can run in the background to
697 provide IDEs, editors, and other tools with information about Rust
698 programs
699 </para>
700 <indexterm zone="rust rls">
701 <primary sortas="b-rls">rls</primary>
702 </indexterm>
703 </listitem>
704 </varlistentry>
705
706 <varlistentry id="rust-analyzer">
707 <term><command>rust-analyzer</command></term>
708 <listitem>
709 <para>
710 is an implementation of Language Server Protocol for the Rust
711 programming language.
712 </para>
713 <indexterm zone="rust rust-analyzer">
714 <primary sortas="b-rust-analyzer">rust-analyzer</primary>
715 </indexterm>
716 </listitem>
717 </varlistentry>
718
719 <varlistentry id="rust-demangler">
720 <term><command>rust-demangler</command></term>
721 <listitem>
722 <para>
723 converts a list of Rust mangled symbols into a
724 corresponding list of demangled symbols
725 </para>
726 <indexterm zone="rust rust-demangler">
727 <primary sortas="b-rust-demangler">rust-demangler</primary>
728 </indexterm>
729 </listitem>
730 </varlistentry> -->
731
732 <varlistentry id="rust-gdb">
733 <term><command>rust-gdb</command></term>
734 <listitem>
735 <para>
736 is a wrapper script for gdb, pulling in Python pretty-printing
737 modules installed in
738 <filename class="directory">/opt/rustc-&rust-version;/lib/rustlib/etc</filename>
739 </para>
740 <indexterm zone="rust rust-gdb">
741 <primary sortas="b-rust-gdb">rust-gdb</primary>
742 </indexterm>
743 </listitem>
744 </varlistentry>
745
746 <varlistentry id="rust-gdbgui">
747 <term><command>rust-gdbgui</command></term>
748 <listitem>
749 <para>
750 is a wrapper script for a graphical front end to gdb that runs in a
751 browser
752 </para>
753 <indexterm zone="rust rust-gdbgui">
754 <primary sortas="b-rust-gdbgui">rust-gdbgui</primary>
755 </indexterm>
756 </listitem>
757 </varlistentry>
758
759 <varlistentry id="rust-lldb">
760 <term><command>rust-lldb</command></term>
761 <listitem>
762 <para>
763 is a wrapper script for LLDB (the LLVM debugger)
764 pulling in the Python pretty-printing modules
765 </para>
766 <indexterm zone="rust rust-lldb">
767 <primary sortas="b-rust-lldb">rust=lldb</primary>
768 </indexterm>
769 </listitem>
770 </varlistentry>
771
772 <varlistentry id="rustc">
773 <term><command>rustc</command></term>
774 <listitem>
775 <para>
776 is the rust compiler
777 </para>
778 <indexterm zone="rust rustc">
779 <primary sortas="b-rustc">rustc</primary>
780 </indexterm>
781 </listitem>
782 </varlistentry>
783
784 <varlistentry id="rustdoc">
785 <term><command>rustdoc</command></term>
786 <listitem>
787 <para>
788 generates documentation from rust source code
789 </para>
790 <indexterm zone="rust rustdoc">
791 <primary sortas="b-rustdoc">rustdoc</primary>
792 </indexterm>
793 </listitem>
794 </varlistentry>
795
796 <varlistentry id="rustfmt">
797 <term><command>rustfmt</command></term>
798 <listitem>
799 <para>
800 formats rust code
801 </para>
802 <indexterm zone="rust rustfmt">
803 <primary sortas="b-rustfmt">rustfmt</primary>
804 </indexterm>
805 </listitem>
806 </varlistentry>
807
808 <varlistentry id="libstd">
809 <term><filename class="libraryfile">libstd-&lt;16-byte-hash&gt;.so</filename></term>
810 <listitem>
811 <para>
812 is the Rust Standard Library, the foundation of portable Rust software
813 </para>
814 <indexterm zone="rust libstd">
815 <primary sortas="c-libstd">libstd-&lt;16-byte-hash&gt;.so</primary>
816 </indexterm>
817 </listitem>
818 </varlistentry>
819 </variablelist>
820 </sect2>
821
822</sect1>
Note: See TracBrowser for help on using the repository browser.