Rustc-1.89.0

Introduksjon til Rustc

Programmeringsspråket Rust er designet for å være et trygt, samtidig og praktisk språk.

Som med mange andre programmeringsspråk, Rustc (Rust kompilatoren) trenger en binærfil som den kan starte opp fra. Den laster ned en stage0 binærfil ved starten av byggingen, så du kan ikke kompilere den uten en internettforbindelse.

[Notat]

Notat

Selv om GLFS vanligvis installeres i /usr, når du senere oppgraderer til en nyere versjon av Rustc, de gamle bibliotekene i /usr/lib/rustlib vil forbli, med forskjellige hasher i navnene sine, men vil ikke være brukbare og vil kaste bort plass. Redaktørene anbefaler å plassere filene i /opt mappen. Spesielt hvis du har grunn til å gjenoppbygge med en modifisert konfigurasjon (f.eks. ved å bruke den medfølgende LLVM-en etter å ha bygget med delt LLVM, kanskje for å kompilere crates for arkitekturer som GLFS LLVM bygget ikke støtter), er det mulig at installasjonen etterlater et ødelagt cargo program. I en slik situasjon, fjern enten den eksisterende installasjonen først, eller bruk et annet prefiks, for eksempel /opt/rustc-1.89.0-build2.

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

Den 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' å begrense til 4 prosessorer) på hver aktivering av ./x.py og ved hjelp av en miljøvariabel CARGO_BUILD_JOBS=<N>.

Den nåværende versjonen av rusts num_cpus kart gjenkjenner nå at cgroups kan brukes til å begrense hvilke prosessorer den har lov til å bruke. Så hvis din maskin mangler DRAM (vanligvis mindre enn 2 GB DRAM per kjerne), kan det være et alternativ å koble CPU-er fra.

For øyeblikket gir ikke Rust noen garantier for et stabilt ABI.

[Notat]

Notat

Rustc standardinnstillingen er å bygge for ALLE støttede arkitekturer, ved å bruke en levert kopi av LLVM. I GLFS er byggingen kun for X86 arkitekturfamilien. Hvis du har tenkt å utvikle Rust crates, er kanskje ikke denne byggingen god nok for dine formål.

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

[Notat]

Notat

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

[Notat]

Notat

Dette kan ta litt tid å bygge. Gjør gjerne noe annet mens dette bygges.

Rustc Avhengigheter

Påkrevd

CMake-4.1.0 og cURL-8.15.0

Anbefalt

[Notat]

Notat

Hvis en anbefalt avhengighet ikke er installert, vil en levert kopi i Rustc kildekode tarballen vil bli bygget og brukt.

Installasjon av Rustc

For å installere i /opt mappen, fjern eventuelle eksisterende /opt/rustc symbolkoblinger 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.89.0 &&
ln -svfn rustc-1.89.0 /opt/rustc
[Notat]

Notat

Hvis flere versjoner av Rustc er installert i /opt, å bytte til en annen versjon krever bare å endre /opt/rustc symbolske lenke og deretter kjøre ldconfig.

Lag en passende bootstrap.toml fil som vil konfigurere byggingen.

cat > bootstrap.toml << "EOF" &&
# 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.
# We have to override a decent number of them.

# Tell x.py 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 us to do such a review.
change-id = 142379

[llvm]
# When using system llvm prefer shared libraries
link-shared = true

EOF
if [ ! -f /usr/lib32/libc.so.6 ]; then
cat >> bootstrap.toml << "EOF"
# If building the shipped LLVM source, only enable the x86 target
# instead of all the targets supported by LLVM.
targets = "X86"

EOF
fi
cat >> bootstrap.toml << "EOF"
[build]
description = "for GLFS #d3927"
EOF
if [ -f /usr/lib32/libc.so.6 ]; then
cat >> bootstrap.toml << "EOF"
target = [
  "x86_64-unknown-linux-gnu",
  "i686-unknown-linux-gnu",
]
EOF
fi &&
cat >> bootstrap.toml << "EOF" &&

# omit docs to save time and space (default is to build them)
docs = false

# Do not query new versions of dependencies online.
locked-deps = true

# Specify which extended tools (those from the default install).
tools = ["cargo", "clippy", "rustdoc", "rustfmt"]

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

[rust]
channel = "stable"

# Uncomment if FileCheck has been installed.
#codegen-tests = false

# Disable the need for lld.
lld = false

# If you didn't build in NVPTX support, you can uncomment this.
#llvm-bitcode-linker = false

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

EOF
if [ -f /usr/lib32/libc.so.6 ]; then
cat >> bootstrap.toml << "EOF"
[target.x86_64-unknown-linux-gnu]
cc = "/usr/bin/gcc"
cxx = "/usr/bin/g++"
ar = "/usr/bin/gcc-ar"
ranlib = "/usr/bin/gcc-ranlib"
llvm-config = "/usr/bin/llvm-config"

[target.i686-unknown-linux-gnu]
cc = "/usr/bin/gcc"
cxx = "/usr/bin/g++"
ar = "/usr/bin/gcc-ar"
ranlib = "/usr/bin/gcc-ranlib"
EOF
else
cat >> bootstrap.toml << "EOF"
[target.x86_64-unknown-linux-gnu]
llvm-config = "/usr/bin/llvm-config"

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

Notat

Kommandoene ovenfor vil opprette bootstrap.toml forskjellig avhengig av om noen få kontroller består/feiler. Dette ble gjort for å unngå forvirring.

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

./x.py build

Nå, som root bruker, installer pakken:

./x.py install

Fortsatt som root bruker, fiks installasjonen av dokumentasjonen og symbolkoble Zsh ferdigstillelsesfilen til riktig sted og flytt en Bash fullføringsfilen til stedet anbefalt av Bash fullføringsvedlikeholdere:

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

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

Parameterforklaringer

ln -svfn rustc-1.89.0 /opt/rustc: Hvis dette ikke er førstegangs bruk av /opt/rustc sybbollenke, overskriv den ved å tvinge den frem, og bruk '-n'-flagget for å unngå å få forvirrende resultater fra f.eks. ls -l.

targets = [...]: Dette bygger målene som vil være nødvendige for 32-bits Rust prosjekter.

tools = ["cargo", "clippy", "rustdoc", "rustfmt"]: Bygg bare verktøyene fra standardprofilen i den binære kommandoen rustup som anbefales for de fleste brukere. De andre verktøyene vil sannsynligvis ikke være nyttige med mindre man bruker (gamle) kodeanalysatorer eller redigerer standardbiblioteket.

channel = "stable": Dette sikrer at bare stabile funksjoner kan brukes, standardinnstillingen i bootstrap.toml er å bruke utviklingsfunksjoner, noe som ikke er passende for en utgitt versjon.

[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 til. Endre målet til [target.i686-unknown-linux-gnu] hvis du bygger på 32-bit x86. Hele denne delen kan utelates hvis du ønsker å bygge mot den leverte LLVM-en, eller ikke ha clang, men den resulterende byggingen vil være større og ta lengre tid.

Konfigurere Rustc

Konfigurasjonsinformasjon

Hvis du installerte Rustc i /opt, du må oppdatere følgende konfigurasjonsfiler slik at Rustc blir funnet riktig av andre pakker og systemprosesser.

[Notat]

Notat

Følgende kommando avhenger av filene som er opprettet i Bash skallets oppstartsfiler.

Opprett /etc/profile.d/rustc.sh oppstartsfil som root bruker:

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

Nå henter du hovedprofilen:

source /etc/profile

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>, libstd-<16-byte-hash>, og libtest-<16-byte-hash>
Installerte Mapper: ~/.cargo, /opt/rustc, symbolsk lenke til /opt/rustc-1.89.0

Korte Beskrivelser

cargo-clippy

tilbyr kodeanalyse for en cargo pakke

cargo-fmt

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

cargo

er pakkebehandleren for Rust

clippy-driver

gir kodeanalyse for rust

rust-gdb

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

rust-gdbgui

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

rust-lldb

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

rustc

er Rust kompilatoren

rustdoc

genererer dokumentasjon fra Rust kildekoden

rustfmt

formaterer Rust kode

libstd-<16-byte-hash>

er Rust Standardbiblioteket, grunnlaget for flyttbar Rust programvare