Kategorien
Open Source Programmieren Rust Tipps und Tricks Tutorials Windows

Rust Toolchain ohne Microsoft Visual C++ Compiler

Vor einiger Zeit bekam ich in der Firma ein recht interessantes Projekt. Es ging darum eine Pipeline für automatische Jubula Tests aufzubauen. Bei der Wahl des Werkzeuge hatte ich keine Vorgaben. Ich entschied mich dafür ein in Rust geschriebenes Programm in einer VM in Dauerschleife laufen zu lassen. Dies hatte den Vorteil, dass das gerammte Projekt am Ende in einer einzigen ausführbaren Datei ohne weitere Abhängigkeiten vorlag. Benötigte Ressourcen wurden mit den Macros „include_str!“ und „include_bytes!“ in die .exe Datei eingebaut und benötigte Programmbibliotheken werden in Rust in der Regel statisch gelinkt.

Jetzt ist es aber so, dass der Rust Compiler in der Standardkonfiguration den Linker und gegebenenfalls den Compiler von Microsoft benutzt. Man muss also das Visual Studio 2013 oder neuer installieren. Für Privatanwender ist dies kein Problem. Diese können Visual Studio Community auf der Webseite von Microsoft (Link) kostenlos herunterladen und installieren. Firmenkunden müssen aber gegebenenfalls (siehe Lizenz von Visual Studio Community) die Professional oder Enterprise Version abonnieren oder kaufen. In meinem Fall kam die Community Edition lizenzrechtlich nicht in Frage. Gleiches gilt übrigens auch für die Microsoft C++ Build Tools (Lizenztext).

Glücklicherweise gibt es vom Rust Compiler auch eine Version, welche auf der GNU Toolchain (GCC, MinGW64) aufbaut. Für den Aufbau einer derartigen Entwicklungsumgebung gibt es drei Möglichkeiten, welche ich euch hier mal kurz vorstellen möchte.

1. MSYS2

Die einfachste Möglichkeit eine voll funktionsfähige Entwicklungsumgebung aufzubauen stellt meiner Meinung nach MSYS2 dar.

MSYS2 ist eine Sammlung von unter Linux bekannten Tools wie Bash, Make, GCC und anderen Tools (darunter auch der Rust Compiler). Vereinfacht ausgedrückt ist das eine Arch Linux ähnliche Umgebung unter Windows.

Installation

Zum Einrichten der Entwicklungsumgebung sind folgende Schritte notwendig:

  1. MSYS2 von der Projektwebseite herunterladen und installieren
  2. MSYS2 Shell starten
  3. Pakete mit „pacman -Syu“ auf den aktuellen stand bringen
  4. MSYS2 Shell schließen
  5. MinGW-64 Shell starten
  6. Rust Compiler mit „pacman -S mingw-w64-x86_64-rust“ installieren
  7. In der Shell mit cd zum Projekt Ordner navigieren
  8. Mit „cargo build“ das Projekt bauen

Damit ist die Einrichtung abgeschlossen.

Vorteile

Diese Vorgehensweise hat den Vorteil, dass es recht leicht und schnell geht eine brauchbare Entwicklungsumgebung hochzuziehen. Ein besonders wichtiger Vorteil ist, dass in dieser Toolchain auch ein C und C++ Compiler mit dabei ist. Dieser ist Voraussetzung bei Abhängigkeiten, welche neben Rust Code auch C Code enthalten.

Nachteile

Diese Methode hat nach meinem Empfinden zwei wesentliche Nachteile. Zum Einen ist die Rust Compiler Version, die MSYS2 bereitstellt nicht immer aktuell, sondern hängt gerne mal ein bis zwei Versionen hinterher. Zum Anderen hat man in dieser Umgebung nicht die Flexibilität die rustup bietet. Man kann also nicht einfach mal die Nightly Version oder eine ältere Version (falls der aktuellste stabile mal Ärger machen sollte) des Compilers installieren.

2. Rustup

Rustup ist ein Tool zum Verwalten der Rust Compiler Installationen. Damit kann man den Rust Compiler in verschiedenen Versionen automatisiert herunterladen und installieren.

Installation

Die Installation via Rustup geht sogar noch einfacher, als bei MSYS2. Zum Installieren müssen nur folgende Schritte abgearbeitet werden:

  1. Rustup Installer von der Projektwebseite herunterladen und starten
  2. Bei den Installer Optionen „Customize installation“ auswählen
  3. Als Host Tripple „x86_64-pc-windows-gnu“ eintippen
  4. Alle anderen Optionen nach Bedarf setzen und die Installation starten
  5. Installationsverzeichnis (C:\Users\Benutzername\.cargo\bin) ggf. zur PATH Umgebungsvariable hinzufügen (der Installer sollte dies aber bereits erledigt haben)

Anschließend kann man die gewohnten Rust bzw. Cargo Befehle von der CMD aus aufrufen.

Vorteile

Die beiden wesentlichen Vorteile dieser Vorgehensweise sind die Installationsgeschwindigkeit und der Flexibilität. Die Toolchain ist sehr schnell aufgebaut und bietet die Möglichkeit zwischen den verschiedenen Versionen (inklusive Beta und Nightly Versionen) des Rust Compilers hin- und herzuspringen. Bei dieser Variante ist man also immer auf den neusten Stand.

Nachteile

Der größte Nachteil ist, dass per Rustup kein C oder C++ Compiler mitgeliefert wird. Es gibt Crates welche einen C Compiler zum Kompilieren benötigen. Eine wäre beispielsweise die „zip“ Crate (zumindest sofern man das „bzip2“ Feature nicht explizit deaktiviert hat), mit der man Zip Archive packen und entpacken kann.
Für Rust Projekte ohne Abhängigkeiten, welche einen C bzw. C++ Compiler benötigen, ist dies aber die eleganteste Lösung.

3. MSYS2 + Rustup

Man kann aber auch das Beste aus beiden Welten vereinen. Bei dieser Lösung kommt der offizielle Rust Compiler in der MSYS2 Umgebung zum Einsatz.

Installation

  1. MSYS2 installieren (siehe oben: Schritte 1 – 4)
  2. Rustup installieren (siehe oben: Schritte 1 – 4)
  3. Im Profilscript von MSYS2 den Installationspfad der Rustup Installation hinzufügen. Dazu einfach die Zeile export PATH=“/c/Users/Benutzername/.cargo/bin“ ans Ende der .bash_profile Datei (die liegt in C:\msys64\home\benutzername\) anhängen.

Anschließend kann man die üblichen Cargo Befehle aus der MinGW 64-Bit Shell ausführen.

Vorteile

Diese Methode hat den Vorteil, das man sowohl den aktuellsten Rust Compiler als auch einen C und C++ Compiler mit dabei hat. Allgemein hat man bei dieser Methode die Vorteile der beiden vorherigen Möglichkeiten.

Nachteile

Von allen drei Methoden ist diese vom Installationsaufwand her die aufwendigste (wobei der Aufwand aber trotzdem noch recht überschaubar ist).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.