rust sur PII

Introduction

Cette page fait suite à Du début jusqu'à tmux. Les portables que j'utilise sont le IBM ThinkPad 560Z Pentium II d'octobre 1998 et le IBM ThinkPad 600X Pentium III produit en avril 2000. J'utilise Core Linux 14 uniquement en terminal.

Générer un compilateur

Il n'est pas possible d'utiliser le script d'installation officiel de rust ni de simplement installer l'extension officielle de Tiny Core Linux rust.tcz. Dans les deux cas, j'ai obtenus plusieurs erreurs. Voir les erreurs de rust.tcz sur un Pentium II

La solution est de générer un compilateur rust qui ne contient pas les opérations invalides.

Un grand merci à Adam qui a créé ce site avec les instructions à suivre sur Gentoo Linux Building Rust for a Pentium 2 . Je me suis basé sur ses explications pour compiler mon propre compilateur sur Debian.

Quelques considérattions

Il est possible que les instructions suivantes soient incomplètes. Mon Debian avait déjà plusieurs outils de développement. S'il vous manque des paquets ou des dépendances, il y aura fort probablement des erreurs au terminal. Cherchez internet et vous trouverez sûrement la solution :)

Configuration de l'environnement Debian

Ma configuration est un Debian 11 x64, avec un FX9590, un SSD de 2TB Samsung QVO, 32 Go de RAM. Plusieurs configurations fonctionneront. Il m'a fallu environ 1 heure 45 minutes pour générer le compilateur.

Il faut installer au moins ces paquets:

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install build-essential cmake gcc gcc-multilib g++ g++-multilib git lib32z1 zlib1g-dev zlib1g-dev:i386 libssl-dev libssl-dev:i386 openssl curl ninja-build python3

À noter, j'ai installé des dépendances deux fois. Par exemple, zlib1g-dev zlib1g-dev:i386. La première est la version x64, la seconde est la version i386. Quand j'avais seulement la version x64, la génération du compilateur rust échouait parce qu'elle searchait pour la version x86 qui était manquante. Le PII est un x86.

Il faut obtenir le code de rust avec

git clone https://github.com/rust-lang/rust
cd rust
git checkout stable
git submodule update --init --recursive
La version stable quand j'ai exécuté ces commandes était 1.71.1.

Il faut configurer les variables d'environnement suivantes:

export CFLAGS="-march=pentium"
export CXXFLAGS="-march=pentium"
export RUST_BACKTRACE=full

Il faut éditer le fichier config.toml et démarrer la génération du compilateur.

./configure --set build.extended=true --set build.build=i686-unknown-linux-gnu --set build.host=i586-unknown-linux-gnu --set build.target=i586-unknown-linux-gnu --set llvm.cflags="-lz -fcf-protection=none" --set llvm.cxxflags="-lz -fcf-protection=none" --set llvm.ldflags="-lz -fcf-protection=none" --set llvm.targets=X86 --set llvm.download-ci-llvm=false
./x.py check
PKG_CONFIG_ALLOW_CROSS=1 ./x.py dist -j 8 2>&1 | tee date-time-rust-i586-build-log.txt
La commande./x.py check est optionnelle, mais elle peut fournir des informations à propos de dépendances possibles avant de démarrer la compilation ce qui peut sauver du temps. J'utilise -j 8 pour utiliser to mes 8 coeurs processeur. C'est possible de mettre moins de coeur pour continuer à utiliser l'ordinateur pendant la compilation.

Pour une raison inconnue, ma première compilation à échoué parce que build.host=i586-unknown-linux-gnu et build.target=i586-unknown-linux-gnu n'étaient pas du type sequence dans le fichier config.toml. J'ai édité le fichier en utilisant vim config.toml et j'ai ajouté [ ] alentour des valeurs pour obtenir

host = ['i586-unknown-linux-gnu']
target = ['i586-unknown-linux-gnu']
On peut probablement passer --set build.host=['i586-unknown-linux-gnu'] et --set build.target=['i586-unknown-linux-gnu'] à la commande ./configure pour que des séquences soient ajoutées à config.toml, mais je ne l'ai pas testé alors ce n'est peut- être pas la bonne syntaxe.

La compilation se complètera et on trouvera plusieurs fichiers .tar.gz dans le répertoire rust/build/dist/. On veut l'archive rust-1.71.1-dev-i586-unknown-linux-gnu.tar.gz
On peut l'extraire avec tar -xvf pour valider que cargo et rustc sont là avec plusieurs autres fichiers. Ce sont tous les modules requis pour pouvoir compiler du rust.

Téléchargement et installation de rust-1.71.1-dev-i586-unknown-linux-gnu.tar.gz sur le 560Z

On peut utiliser FTP pour télécharger le fichier sur le 560Z.

ftpget -v -u utilisateur_a_remplacer -p mot_de_passe_a_remplacer replace_with_your_IP-192.168.0.155 rust-1.71.1-dev-i586-unknown-linux-gnu.tar.gz
md5sum rust-1.71.1-dev-i586-unknown-linux-gnu.tar.gz
tar -xf rust-1.71.1-dev-i586-unknown-linux-gnu.tar.gz
mkdir rust-1.71.1-i586
mkdir rust-1.71.1-i586/etc
cd rust-1.71.1-dev-i586-unknown-linux-gnu
sudo sh ./install.sh --verbose --destdir=/home/tc/rust-1.71.1-i586 --sysconfdir=/home/tc/rust-1.71.1-i586/etc
export PATH=/home/tc/rust-1.71.1-i586/usr/local/bin:$PATH
La dernière commande export PATH=/home/tc/rust-1.71.1-i586/usr/local/bin:$PATH est à refaire à chaque redémarrage. Vu qu'on ne peut pas générer un rust-1.71.1-pii.tcz pour ensuite le charger automatiquement en mémoire vive au démarrage avec /mnt/sda2/tce/onboot.lst il faut utiliser les fichiers qui sont directement sur le disque. Si le portable avait plus de mémoire, on pourrait générer un .tcz et le charger en mémoire vive comme il est possible de le faire avec le ThinkPad 600x ici.

Utiliser cargo

Maintenant, il devrait être possible d'exécuter

rustc --version
cargo --version
cargo new hello-world
cd hello-world
cargo run

S'il y a une erreur indiquant que cc est manquant, on peut installer ceci :

tce-load -wi gcc.tcz
tce-load -wi glibc_base-dev.tcz
rust a besoin d'un linker C pour pouvoir fonctionner. J'ai compris en lisant piCore 9.x ARMv6 g++ compilation error et How do I fix the Rust error "linker 'cc' not found" for Debian on Windows 10?

Remerciements!

Merci à

Dernière mise à jour 2023-11-06.