Cling mit Windows

Cling mit Windows

Cling. Was ist Cling? Wenn man in Google Cling eintippt, bekommt man anfänglich komische Resultate - Menschen die ein Fensterrahmen an die Wand montieren versuchen, ist eine davon. Auch auf Youtube erhält man nicht auf Anhieb das, wonach man sucht, wenn man Cling eintippt. Deswegen wollen wir zuerst einmal elaborieren, was Cling ist.

Cling ist ein C++ Interpreter, das per Command Line direktes Schreiben und Ausführen von C++ Code erlaubt. Vom CERN entwickelt und ein Nachfolger von CINT, ist der C++ Interpreter dafür gedacht, um bestimmte Code Ideen in C++ schnell auszuprobieren, ohne die ganze Applikation “builden” zu müssen - oder zumindest ist dies mein Eindruck, wofür Cling sein könnte. Cling erlaubt das partielle laden von Modulen und ermöglicht so auch isoliertes Testen von Code. Damit verhilft es C++ Entwicklern effizienter C++ Code zu schreiben und produktiver zu sein, da Sie beim Einführen von neuem Code nicht auf lange Builds warten müssen, nur um herauszufinden, dass Ihr Code nicht funktioniert. Auch kann der C++ Interpreter für das Erlernen von C++ benützt werden. Das Jupyter Tool - ein interaktives “Editor” Tool, das live Code evaluieren kann - hat hierfür speziell Cling Kernels, die das interaktive Schreiben und Interpretieren von C++ Code in dessen Editor erlaubt. Aber man braucht nicht wirklich Jupyter, um mit Cling zu spielen - das schöne Interface von Jupyter ist einfach ein Bonus.


Bild 1: Cling mit Jupyter auf Ubuntu VM auf Windows

Doch leider funktioniert diese Kombination zurzeit nicht auf Windows. Oder ich habe die Lösung dazu noch nicht finden können. Man kann aber Cling auch direkt in der Konsole von Windows gebrauchen - ohne zusätzliche Tools.

Das Potenzial C++ wie JavaScript direkt interpretiert zu haben, ist, wie ich zugeben muss, sehr aufregend. Ich stelle mir Cling wie ein Notizblock für C++ vor, dass bestimmten Code mich direkt evaluieren lässt, ohne das ich den Code builden muss. Ein sehr hilfreiches Tool, wie ich finde, vor allem wenn man bedenkt, dass die Buildzeiten mit der Grösse der Applikation immer weiter zunehmen. Auch wenn heutige Buildumgebungen multithreaded Builds erlauben, die diese Phase sichtlich verkürzen, ist jedoch ein Interpreter immernoch schneller. Perfekt für das Experimentieren von Algorithem und neuen Strukturen, wie ich finde.

Nun aber zum Hauptzweck des Blogs: Setup von Cling auf Windows.

Ich habe drei Methoden ausprobiert, die zu unterschiedlichen Ergebnissen geführt haben. Die drei Methoden sind die folgenden:

1) Cling mit Jupyter auf einer virtuellen Umgebung mit Ubuntu
2) Cling ohne Jupyter per Linux Subsystem
3) Cling ohne Jupyter direkt

OK, gehen wir Schritt für Schritt vor.

1) Cling mit Jupyter auf einer virtuellen Umgebung mit Ubuntu

Meiner Meinung nach die einfachste Variante. Man installiert eine virtuelle Umgebung wie z.B. Oracle VM VirtualBox https://www.virtualbox.org/ und spielt ein Ubuntu Image auf https://www.virtualbox.org/wiki/Linux_Downloads.

Danach lässt man das Script von der CERN - Seite laufen, und Voila, alles ist automatisch aufgesetzt. https://root.cern.ch/cling-build-instructions

Ich rate hier den Build Script herunterzuladen und im Terminal aufzurufen. Falls Ihr euch traut, die manuelle Instruktionen zu folgen, Hut ab. Auf einem Ubuntu System solltet Ihr aber sowieso nicht allzu viel Probleme haben.

Für die manuelle Installation:

git clone http://root.cern.ch/git/llvm.git src
cd src
git checkout cling-patches
cd tools
git clone http://root.cern.ch/git/cling.git
git clone http://root.cern.ch/git/clang.git
cd clang
git checkout cling-patches
cd ../..

mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=[Install Path] -DCMAKE_BUILD_TYPE=[Build configuration, e.g. Release or Debug] ..\src
cmake --build .
cmake --build . --target install

Für [Install Path] —> Der Installationspfad —> z.B.: -DCMAKE_INSTALL_PREFIX=C:/Cling

Falls cmake noch nicht installiert ist:

sudo apt-get install cmake
sudo apt-get upgrade

Kleiner Tipp: Der Shell - Script mag nicht direkt ausführbar sein, mit einem chmod +x DATEI_NAME.sh könnt Ihr aus dem Shell-Script ein ausführbares Skript machen.

Ist Cling einmal installiert, können wir uns auf die Integration mit Jupyter konzentrieren. Damit Ihr nun Cling mit Jupyter benützten könnt, müsst Ihr noch Jupyter installieren. Normalerweise sollte Jupyter in der Python Installation mitgeliefert sein, falls nicht, könnt Ihr diesen Instruktion von Jupyter folgen: http://jupyter.org/install.html

Für Python 3:

python3 -m pip install --upgrade pip
python3 -m pip install jupyter

Für Python 2:

python -m pip install --upgrade pip
python -m pip install jupyter

Danach könnt Ihr testen, ob Jupyter Notebook (der Editor von Jupyter) funktioniert, mit:

jupyter notebook

Habt Ihr auch Python nicht installiert, könnt Ihr den Instruktion hier folgen: https://wiki.ubuntuusers.de/Python/

Für Python 3:

sudo apt-get install python3 

Für Python 2:

sudo apt-get install python 

OK, soweit so gut. Nun muss man noch die Kernels für Jupyter installieren, damit dieser von Jupyter benutzt werden kann. Hierfür geht man per Terminal (cd) im installierten Cling Ordner unter inst/share/cling/Jupyter/kernel und installiert die Kernels wie folgt: (Instruktionen sind hier zu finden: https://github.com/vgvassilev/cling/tree/master/tools/Jupyter)

export PATH=/cling-install-prefix/bin:$PATH
cd /cling-install-prefix/share/cling/Jupyter/kernel

pip install -e .
# or: pip3 install -e .

# register the kernelspec for C++17/C++1z/C++14/C++11:
# the user can install whichever kernel(s) they
# wish:
jupyter-kernelspec install [--user] cling-cpp17
# jupyter-kernelspec install cling-cpp17 geht auch
jupyter-kernelspec install [--user] cling-cpp1z
jupyter-kernelspec install [--user] cling-cpp14
jupyter-kernelspec install [--user] cling-cpp11

Ihr müsst nicht alle kernels installieren, einer genügt. Nachdem Ihr die Installation der Kernels abgeschlossen habt, solltet Ihr nun per jupyter notebook den Editor starten. Nun solltet Ihr unter “New” die Kernel Optionen sehen:


Bild 2: Jupyter C++ Kernels

Ab nun könnt Ihr herumexperimentieren. Das Setup mit VM Ubuntu auf Windows von Cling auf Jupyter ist hier abgeschlossen. Nur so als Nebenbemerkung: Ihr könnt mit Jupyter Notebook auch Python Code interaktiv testen.

2) Cling ohne Jupyter per Linux Subsystem

OK, dieser Schritt ist ein bisschen mühsamer. Denn bevor wir überhaupt etwas mit Cling anstellen, müssen wir noch das Subsystem Linux auf Windows aktivieren. Hierzu müssen wir zuerst einmal den Entwickler-Modus für Windows 10 aktivieren. Unter Einstellungen, tippt in der Suche “Entwicklermodus” ein, dies sollte euch den Unterpunkt “Entwicklerfunktionen verwenden” anzeigen. Öffnet diesen Punkt und aktiviert “Entwicklermodus”.


Bild 3: Entwicklermodus Windows

Ist dieser Schritt einmal getan, müsst Ihr nun unter Systemsteuerung > Programme und Features auf “Windows Features aktivieren oder deaktivieren” und das Linux-Subsystem aktivieren.


Bild 4: Windows Feature Subsystem Linux

Hier müsst Ihr den Computer neustarten. Ist der Computer neugestartet, sollte nun bash als Command unter der Appsuche verfügbar sein. Aber Achtung, der bash für das Subsystem sieht nicht wie das Bild unten aus, erst nach der Installation des Subsystems:


Bild 5: Bash on Ubuntu on Windows

Habt Ihr den bash gestartet, wird die Installationsroutine für das Linux Subsystem gestartet, es wartet auf einen Ja oder Nein Input, um mit der Installation fortzufahren. Um Fortzufahren tippt “J” ein. Das Subsystem wird installiert.

Ist dieser Prozess fertig, ist nun Linux als Subsystem unter Windows 10 verfügbar.

OK, nun können wir ein Binary für Ubuntu von CERN herunterladen und mit dem Subsystem entpacken + die Executables ausführen.

Um sicherzustellen, dass Ihr auch die richtige Version herunterladen, rate ich euch im bash des Subsystems (Command Konsole aufmachen, bash eintippen, —> bringt euch zur Konsole des Subsystems) diesen Command einzutippen:

lsb_release -r


Bild 6: Überprüfe die Version des Subsystems

Als Output wird Ihr die Version des Ubuntu Subsystems erhalten. Orientiert euch nach dieser Version, wenn Ihr den Build von der CERN Seite herunterladet: https://root.cern.ch/download/cling/

Danach entpackt Ihr die Datei per: tar -xjf DATEI_NAME.tar.bz2

OK, damit wäre auch diese Methode fertig. Denn, per Linuxsubsystem könnt Ihr die Binaries im entpackten Ordner starten und Cling direkt gebrauchen.

Aber auch hier ist Achtung angesagt: Die Cling Installation kann teils inkompatibel sein. Also seid nicht überrascht, wenn beim Aufruf von Cling per Subsystem einige Fehler aufgeworfen werden.

3) Cling ohne Jupyter direkt

OK, hier die wohl für Windows interessanteste Version. Direkte Installation von Cling. Vorab, was wir hierfür brauchen werden:

CMake Version 3.10.0 (Drei Punkt ZEHN, nicht EINS, ZEHN Punkt Null)

Visual Studio 15 2017 (die aktuellste Version von Visual Studio und desen Toolchain)

OK, befolgt die folgenden Schritte für die Installation, nachdem die vorherigen Punkte entsprechend angepasst/installiert sind:

Instruktionen sind hier zu finden: https://github.com/root-project/cling/issues/186
Aller Lob geht an @ahmidou.

git clone http://root.cern.ch/git/llvm.git src
cd src
git checkout cling-patches
cd tools
git clone http://root.cern.ch/git/cling.git
git clone http://root.cern.ch/git/clang.git
cd clang
git checkout cling-patches
cd ../..

mkdir build
cd build
REM cmake -DCMAKE_INSTALL_PREFIX=[Install Path] -DCMAKE_BUILD_TYPE=[Build configuration, e.g. Release or Debug] ..\src
cmake -DCMAKE_INSTALL_PREFIX=C:/WORK/CLING -DCMAKE_BUILD_TYPE=Release -G "Visual Studio 15 2017 Win64" C:/WORK/CLING/src
cmake --build .
cmake --build . --target install

Ihr solltet diese Flags anpassen: -DCMAKE_INSTALL_PREFIX=C:/WORK/CLING und C:/WORK/CLING/src entsprechend eurem Installationsordner.

Achtung: Die Installation kann sehr lange dauern + sehr gross werden (bei mir war der Ordner am Ende um die 50GB gross).

Ist dieser Prozess einmal abgeschlossen, öffnet den LLVM.sln und erstellt/build’ed die Projekte von Visual Studio aus. Auch dieser Schritt kann sehr lange dauern. Aber danach sollten alle Binaries erfolgreich erstellt sein.

Ihr könnt den bin - Ordner auf der höchsten Ebene (z.B. bei mir D:\CERN\bin) in die Umgebungsvariablen des Systems einfügen (ie. System —> Erweiterte Einstellungen —> Umgebungsvariablen —> Path - Variable erweitern)

Danach solltet Ihr “cling” direkt im Command ausführen können


Bild 7: Cling in der Command Konsole

Und damit hättet Ihr cling direkt auf Windows installiert! Glückwünsch.

Bei allfälligen Fehler etc… müsst Ihr euch leider selbst helfen, ich habe gute drei Tage mit verschiedenen Einstellungen verschwendet und Lösungen in zig Foren durchsucht. Diese haben für mich funktioniert, ich hoffe sie funktionieren auch für euch. :D

Kommentare

Beliebte Posts aus diesem Blog

Qt Setup mit Visual Studio (Windows)

Bald - Artikel zu IT Themen!