Rustc-1.93.1

Introduksjon til Rust

Rust programmeringsspråket er utformet for å være et trygt, samtidig, praktisk språk.

Som med mange andre programmeringsspråk, rustc (rustkompilatoren) trenger en binær for oppstartssekvensen. Den vil laste ned en stage0 binær ved starten av bygningen, så du må ha en internettforbindelse for å bygge denne pakken.

[Notat]

Notat

Selv om BLFS vanligvis installeres i /usr, når du senere oppgraderer til en nyere versjon av rust de gamle bibliotekene i /usr/lib/rustlib vil bestå, med forskjellige hasher i navnene sine, men de vil ikke være brukbare og vil kaste bort plass. Redaktørene anbefaler å plassere filene i /opt mappen. Spesielt hvis du må gjenoppbygge denne pakken med en modifisert konfigurasjon (f.eks. bruke den leverte LLVM-en etter å ha bygget med delt LLVM, kanskje for å kompilere crates for arkitekturer som BLFS LLVM bygget ikke støtter), er det mulig at installasjonen etterlater en ødelagt cargo program. Hvis dette skjer, bør du enten fjerne den eksisterende installasjonen først, eller bruke et annet prefiks, for eksempel /opt/rustc-1.93.1-build2.

Hvis du foretrekker det, kan du selvfølgelig endre prefikset til /usr.

Det nåværende rustbuild byggesystemet vil bruke alle prosessorer, selv om det ikke skalerer godt og ofte faller tilbake til å bare bruke én kjerne mens det venter på at et bibliotek skal kompileres. Det kan imidlertid stort sett begrenses til et spesifisert antall prosessorer ved en kombinasjon av å legge til bryteren --jobs <N> (f.eks. '--jobs 4' for å begrense til 4 prosessorer) ved hver kalling av ./x.py og bruke CARGO_BUILD_JOBS=<N> miljøvariabel. For øyeblikket er dette ikke effektivt når noen av rustc-testene kjøres.

Den nåværende versjonen av rusts num_cpus crate gjenkjenner nå at cgroups kan brukes til å begrense hvilke prosessorer den har lov til å bruke. Hvis din maskin mangler DRAM (vanligvis mindre enn 2 GB DRAM per kjerne), kan det være et alternativ til å koble CPU-er fra. Les «Bruk Linux Control Group for å begrense ressursbruken» for informasjon om hvordan du bruker en cgroup.

For øyeblikket, Rust gir ingen garantier for en stabil ABI.

[Notat]

Notat

Rustc bygger som standard ALLE støttede arkitekturer, ved bruk av en sendt kopi av LLVM. I BLFS er byggingen kun for X86 arkitekturen. Hvis du skal utvikle rust crates, er det ikke sikkert at denne byggingen er tilstrekkelig for dine formål.

Byggetidene for denne versjonen når den gjentas på samme maskin er ofte rimelig konsekvent, men som med alle kompilatorer som bruker rustc, kan det være noen veldig langsomme avvikere.

[Notat]

Notat

Utviklingsversjoner av BLFS kan kanskje ikke bygge eller kjøre noen pakker riktig hvis LFS eller avhengigheter har blitt oppdatert siden de siste stabile versjonene av bøkene.

Pakkeinformasjon

  • Nedlasting (HTTP): https://static.rust-lang.org/dist/rustc-1.93.1-src.tar.xz

  • Nedlasting MD5 sum: 65de3c1b0a9304b16ff27433a0dafb95

  • Nedlastingsstørrelse: 258 MB

  • Estimert diskplass som kreves: 10 GB (324 MB installert); legg til 11 GB hvis du kjører testene

  • Estimert byggetid: 10 SBU (inkludert nedlastingstid; legg til 15 SBU for tester, begge med parallellisme=8)

Rust Avhengigheter

Påkrevd

CMake-4.2.3 og cURL-8.18.0

[Notat]

Notat

En Internett tilkobling er nødvendig for å bygge denne pakken. Systemsertifikatlageret må kanskje konfigureres med make-ca-1.16.1 før du bygger denne pakken.

Anbefalt

[Notat]

Notat

Hvis en anbefalt avhengighet ikke er installert, må du endre instruksjonene for å bygge og bruke en levert kopi i Rustc kildetarballen i stedet. Se delen Parameterforklaringer for flere detaljer.

Valgfri

GDB-17.1 (brukes av testpakken hvis den er til stede), git-2.53.0 (kreves av testpakken), cranelift, jemalloc, libgccjit (les Parameterforklaringer i GCC-15.2.0), og libgit2

Redaktørens notater: https://wiki.linuxfromscratch.org/blfs/wiki/rust

Installasjon av Rust

For å installere i /opt mappen, fjerne evt eksisterende /opt/rustc symbolkobling og opprett en ny mappe (dvs. med et annet navn hvis du prøver en modifisert versjon av samme versjon). Som root bruker:

mkdir -pv /opt/rustc-1.93.1      &&
ln -svfn rustc-1.93.1 /opt/rustc
[Notat]

Notat

Hvis flere versjoner av Rust er installert i /opt, endre til en annen versjonen krever bare å endre /opt/rustc symbolsk lenke og deretter kjøre ldconfig.

Opprett en passende bootstrap.toml fil som vil konfigurere bygget.

cat << EOF > bootstrap.toml
# See bootstrap.toml.example for more possible options,
# and see src/bootstrap/defaults/bootstrap.dist.toml for a few options
# automatically set when building from a release tarball
# (unfortunately, we have to override many of them).

# Tell x.py that the editors have reviewed the content of this file
# and updated it to follow the major changes of the building system,
# so x.py will not warn users to rewiew that information.
change-id = 148795

[llvm]
# When using the system installed copy of LLVM, prefer the shared libraries
link-shared = true

# If building the shipped LLVM source, only enable the x86 target
# instead of all the targets supported by LLVM.
targets = "X86"

[build]
description = "for BLFS r12.4-1462"

# Omit the documentation to save time and space (the default is to build them).
docs = false

# Do not look for new versions of the dependencies online.
locked-deps = true

# Only install these extended tools. Cargo, clippy, rustdoc, and rustfmt
# are installed by a default rustup installation, and rust-src is needed
# to build the Rust code in Linux kernel (in case you need such a kernel
# feature).
tools = ["cargo", "clippy", "rustdoc", "rustfmt", "src"]

[install]
prefix = "/opt/rustc-1.93.1"
docdir = "share/doc/rustc-1.93.1"

[rust]
channel = "stable"

# Enable the same optimizations as the official upstream build.
lto = "thin"
codegen-units = 1

# Don't build llvm-bitcode-linker which is only useful for the NVPTX
# backend that we don't enable.
llvm-bitcode-linker = false

[target.x86_64-unknown-linux-gnu]
llvm-config = "/usr/bin/llvm-config"

[target.i686-unknown-linux-gnu]
lvm-config = "/usr/bin/llvm-config"
EOF

Kompiler Rust ved å kjøre følgende kommandoer:

export LIBSSH2_SYS_USE_PKG_CONFIG=1
export LIBSQLITE3_SYS_USE_PKG_CONFIG=1
./x.py build
[Notat]

Notat

Testpakken vil generere noen meldinger i systemd journal for feller på ugyldige opkoder, og for segmenteringsfeil. I seg selv er disse ingenting å bekymre seg for, det er bare en måte for en test å avslutte.

Å kjøre testene, utsted:

./x.py test --verbose --no-fail-fast | tee rustc-testlog

Test navngitt tests/run-make/rustdoc-target-modifiers er kjent for å mislykkes fordi vi ikke har aktivert AArch64 målet i LLVM-21.1.8.

Som med alle store testpakker, kan noen tester mislykkes på noen maskiner - hvis antallet feil er lavt, sjekk loggen for 'failures:' og se gjennom linjer over det, spesielt 'stderr:' linjene. Enhver omtale av en SIGSEGV eller signal 11 i en mislykket test er en grunn til bekymring.

[Notat]

Notat

Hvis du har strippet /usr/lib/libc.a med strip --strip-unneeded, alt statiske koblete Rustprogrammer vil krasje med SIGSEGV ved oppstart, noe som forårsaker flere tester (for eksempel tests/ui/process/nofile-limit.rs) å mislykkes med SIGSEGV.

Det er forårsaket av en Glibc feil som påvirker Glibc-2.42 og flere tidligere utgivelser, så for nå har vi byttet ut --strip-unneeded med --strip-debug i både LFS boka og i «Strippe En Gang Til» for å omgå det. Hvis du opplever dette problemet, gjenoppbygg Glibc og erstatt /usr/lib/libc.a filen med den ustrippede libc.a fra nybygget.

Hvis du får noen andre sviktende tester som rapporterer et utgavenummer, så bør du søke etter det problemet. For eksempel når rustc >= 1.41.1 ble bygget med en versjon av sysllvm før 10.0 testen for problem 69225 mislyktes https://github.com/rust-lang/rust/issues/69225 og det burde være betraktet som en kritisk feil (de ga ut 1.41.1 på grunn av det). De fleste andre feil vil ikke være kritiske.

Derfor bør du bestemme antall feil. Antall tester som har bestått og ikke bestått finner du ved å kjøre:

grep '^test result:' rustc-testlog |
 awk '{sum1 += $4; sum2 += $6} END { print sum1 " passed; " sum2 " failed" }'

De andre tilgjengelige feltene er $8 for de som ble ignorert (dvs. hoppet over), $10 for "målt" og $12 for "filtrert ut", men begge de to siste er sannsynligvis null.

Nå, som root bruker, installer pakken:

[Notat]

Notat

Hvis sudo eller su er påberopt for å bytte til root bruker, sikre at LIBSSH2_SYS_USE_PKG_CONFIG og LIBSQLITE3_SYS_USE_PKG_CONFIG er riktig sendt ellers kan følgende kommando gjenoppbygge cargo med sendte kopier av libssh2 og sqlite. For sudo, bruk --preserve-env=LIB{SSH2,SQLITE3}_SYS_USE_PKG_CONFIG alternativet. For su, ikke bruk - eller --login alternativene.

./x.py install

Fortsatt som root bruker, fiks installasjonen av dokumentasjonen, symbollenke en Zsh fullføringsfilen til riktig sted, og flytt en Bash fullføringsfilen til stedet anbefalt av Bash ferdigstillelse vedlikeholdere:

rm -fv /opt/rustc-1.93.1/share/doc/rustc-1.93.1/*.old   &&
install -vm644 README.md                                \
               /opt/rustc-1.93.1/share/doc/rustc-1.93.1 &&

install -vdm755 /usr/share/zsh/site-functions      &&
ln -sfv /opt/rustc/share/zsh/site-functions/_cargo \
        /usr/share/zsh/site-functions

mv -v /etc/bash_completion.d/cargo /usr/share/bash-completion/completions

Til slutt, deaktiver eksporterte miljøvariabler:

unset LIB{SSH2,SQLITE3}_SYS_USE_PKG_CONFIG

Parameterforklaringer

ln -svfn rustc-1.93.1 /opt/rustc: hvis dette ikke er den første bruken av /opt/rustc symbolkobling, overskriv den ved tvang, og bruk '-n'-flagget for å unngå å få forvirrende resultater fra f.eks. ls -l.

tools = ["cargo", "clippy", "rustdoc", "rustfmt"]: bygg bare verktøyene fra 'standard' profilen fra binær kommandoen rustup som anbefales for de fleste brukere. De andre verktøyene er neppe nyttige med mindre du bruker (gammel) kode analysatorer eller redigering av standardbiblioteket.

channel = "stable": Dette sikrer at bare stabile funksjoner brukes. Standardinnstillingen i bootstrap.toml er å bruke utviklingsfunksjoner som ikke er passende for en utgitt versjon av rust.

[target.x86_64-unknown-linux-gnu]: syntaksen til bootstrap.toml krever en llvm-config oppføring for hvert mål som system-llvm skal brukes for. Endre målet til [target.i686-unknown-linux-gnu] hvis du bygger på 32-bit x86. Hele denne delen bør utelates hvis du ønsker å bygge mot den sendte llvm, men det resulterende bygget vil være større og ta lengre tid.

export LIBSSH2_SYS_USE_PKG_CONFIG=1: tillat cargo for å lenke til den systeminstallerte kopien av libssh2. Utelat denne kommandoen hvis du ikke har installert libssh2-1.11.1.

export LIBSQLITE3_SYS_USE_PKG_CONFIG=1: Tillat cargo for å koble til systemets installerte kopi av sqlite.

--verbose: denne bryteren kan noen ganger gi mer informasjon om en test som mislykkes.

--no-fail-fast: denne bryteren sikrer at testpakken ikke vil stoppe ved den første feilen.

Konfigurere Rust

Konfigurasjonsinformasjon

Hvis du har installert rustc i /opt, må du oppdatere følgende konfigurasjonsfiler slik at rustc er riktig funnet av andre pakker og systemprosesser.

Som root bruker, opprett /etc/profile.d/rustc.sh filen:

cat > /etc/profile.d/rustc.sh << "EOF"
# Begin /etc/profile.d/rustc.sh

pathprepend /opt/rustc/bin           PATH

# End /etc/profile.d/rustc.sh
EOF

Oppdater gjeldende PATH umiddelbart etter installasjonen for ditt nåværende skall som en vanlig bruker:

source /etc/profile.d/rustc.sh

Innhold

Installerte Programmer: cargo-clippy, cargo-fmt, cargo, clippy-driver, rust-gdb, rust-gdbgui, rust-lldb, rustc, rustdoc, og rustfmt
Installerte Biblioteker: librustc_driver-<16-byte-hash>.so og libstd-<16-byte-hash>.so
Installerte Mapper: ~/.cargo, /opt/rustc, symbolsk lenke til /opt/rustc-1.93.1

Korte Beskrivelser

cargo-clippy

utfører lint sjekker for en cargo pakke

cargo-fmt

formaterer alle bin og lib filer i gjeldende crate ved hjelp av rustfmt

cargo

er Pakkebehandler for Rust

clippy-driver

utfører lint sjekker for rust

rust-gdb

er et innpakningsskript for gdb, som trekker inn Python pretty-printing moduler installert i /opt/rustc-1.93.1/lib/rustlib/etc

rust-gdbgui

er et innpakningsskript for et grafisk grensesnitt til gdb som kjører i en nettleser

rust-lldb

er et innpakningsskript for LLDB (LLVM-feilsøkeren) som trekke inn Python pretty-printing modulene

rustc

er rust kompilatoren

rustdoc

genererer dokumentasjon fra rust kildekode

rustfmt

formaterer rust kode

libstd-<16-byte-hash>.so

er Rust Standard Bibliotek, grunnlaget for flyttbar Rust programvare