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.
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
|