Rustc-1.93.1

Introduksjon til Rustc

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

Som med mange andre programmeringsspråk trenger Rustc (Rust kompilatoren) en binærfil å starte opp fra. Den vil laste ned en stage0 binærfil ved starten av byggingen, så du må ha en internettforbindelse for å bygge denne pakken.

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 de vil ikke være brukbare og vil kaste bort plass. Redaktørene anbefaler å plassere filene i /opt mappen. Spesielt hvis du må gjenoppbygge med en modifisert konfigurasjon (f.eks. bruke den leverte LLVM-en etter å ha bygget med den delte LLVM-en, kanskje for å kompilere crater for arkitekturer som GLFS 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 man 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øvariabelen.

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.

For øyeblikket gir verken Rust eller Rustc noen garantier for et stabilt ABI.

Notat

Rustc bygger som standard ALLE støttede arkitekturer, med en levert kopi av LLVM. I GLFS er byggingen kun for x86 arkitekturfamilien. Hvis du skal utvikle Rust crates, er denne byggingen kanskje ikke tilstrekkelig.

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

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

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

Rustc Avhengigheter

Required
CMake-4.2.3 og cURL-8.18.0

Recommended
LLVM-21.1.8 (bygget med -D LLVM_LINK_LLVM_DYLIB=ON sånn at Rustc kan koble til den systeminstallerte LLVM-en i stedet for å bygge dens leverte versjon)

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.93.1 &&
ln -svfn rustc-1.93.1 /opt/rustc

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.
# A decent number of options need to be changed.

# 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.
# x.py during the build process will warn about it if this is not set.
change-id = 148795

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

EOF
if [ ! -f /usr/lib32/libc.so.6 ]; then
cat >> bootstrap.toml << "EOF"
# If the shipped LLVM source will be built, 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 #e816bf"
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 the documentation to save time and space (the default is to build them).
docs = false

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

# Specify which extended tools to install.
tools = ["cargo", "clippy", "rustdoc", "rustfmt", "src"]

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

[rust]
channel = "stable"

# Uncomment if FileCheck has been installed.
#codegen-tests = 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

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, symbollenke en Zsh fullføringsfil til riktig sted, og flytte en Bash fullføringsfil til stedet som anbefales av Bash fullføringsvedlikeholderne:

rm -fv /opt/rustc-1.93.1/share/doc/rustc-1.93.1/*.old   &&
install -vDm644 README.md \
  -t /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

Parameterforklaringer

ln -svfn rustc-1.93.1 /opt/rustc: Hvis dette ikke er førstegangs bruk av /opt/rustc symbollenke, overskriv den ved å tvinge den, 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", "src"]: Bygg bare verktøyene fra standardprofilen fra kommandoen rustup, som anbefales for de fleste brukere. De andre verktøyene vil sannsynligvis ikke være nyttige med mindre man bruker (gamle) kode analysatorer eller redigerer standardbiblioteket.

channel = "stable": Dette sikrer at bare stabile funksjoner brukes. Standardinnstillingen er å bruke utviklingsfunksjoner, noe som ikke er passende for en utgitt versjon av Rustc.

[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

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>
Installerte Mapper: ~/.cargo, /opt/rustc, symbolsk lenke til /opt/rustc-1.93.1

Korte Beskrivelser

cargo-clippy

utfører lint sjekk på 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

utfører en lint sjekk på rustkode

rust-gdb

er et innpakningsskript for gdb, som henter inn Python pretty-printing moduler som er installert i /opt/rustc-1.93.1/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