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
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
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
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
Påkrevd
CMake-4.1.0 og cURL-8.15.0
Anbefalt
LLVM-20.1.8 (bygget med -D LLVM_LINK_LLVM_DYLIB=ON
sånn at
Rustc kan lenke til det systeminstallerte LLVM i stedet for å bygge
den leverte versjonen)
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
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
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.
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
|