Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Nov 22, 2019 22:06

Foren-Übersicht » Sonstiges » Projekte
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: Krypton build system
BeitragVerfasst: Mo Okt 21, 2019 16:27 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2566
Wohnort: Berlin
Programmiersprache: C/C++, C#
Allgemein
Krypton build system fokussiert sich auf C++, Paket- und Abhängigkeiten-Verwaltung.
Es bietet auch die Möglichkeit Projekte zu bauen und setzt auf Beschreibung des Ziels, statt Bauvorschriften, wie bei den üblichen Tools.

Krypton parsed sämtlichen C++ Code im Projekt und erkennt, ob es eine Statische/Dynamische Bibliothekt oder executable ist und soll künftig möglichst viele Build Settings bereits durch die Codeanalyse erkennen und den Konfigurationsaufand möglichst gering halten. Beschreibt die Konfiguration ein anderen Zustand, dann wird dieser überschreiben aber sonnst als Fakten aufgefüllt.
Krypton nutzt libclang für die Analyse, ein Plugin System für die Erweiterung und Unterstützung weiterer Features, sowie LuaJit für Scripting.
Makefile, CMake, qmake und premake sind weit verbreitet und lösen einzelne Disziplinen sehr gut aber keines kommt nahe einem npm von nodejs oder pip von python.
Krypton ist am ehesten mit npm vergleichbar und geht beim bauen die Wege von premake.

Krypton soll in der Lage sein sich selbst zu bauen, dafür gibt es ein bootstrapping Prozess. In diesem wir mit Visual Studio 2019 C++ eine einzelne c++ Datei gebaut und gelinkt, diese kann dann ausgeführt werden und sorgt für alle weiteren Schritte, bis der finale Optimierte Build raus fällt, welcher dann in der Lage sein soll Cross Platform das Programm zu bauen.

Das Finale Tool soll über Erweiterungen dann neue Compiler und Build Engines und Tools kennen lernen können und über Lua möchte ich spezielle Logik abbilden, die ein Projekt benötigt.

Krypton Object Notation
Das Format erinnert wohl am meisten an INI und JSON, dass liegt daran, dass das KON Format auf Parallelisierung setzt und dies durch eine Information pro Zeile ermöglicht.
Also jeder Zeilenumbruch beendet eine Information und was es für eine Information ist, kann dann beim parsen der Zeile erkannt werden.
Der Hauptprozess geht per SIMD auf die Suche des Zeilenumbruchs(LineFeed) und erzeugt ein parsing Task für den Bereich. Ein AVX512 fähige CPU kann so 64 Zeichen in einer Prüfung schaffen. Der Threadpool kann dann eine Zeile Zeichen für Zeichen verarbeiten, erkennen ob es Objekte, Arrays und so weiter ist und dann entsprechend die Token passend befüllen.
Es gibt in den Format nur Strings, daher findet keine Konvertierung, Validierung statt. Die tokens werden Linear gehalten, dies ist notwendig, da ein End-Object oder End-Array Token rückwärts geht und das Start-Objekt/Array Token sucht und dann alles auf dem Weg dem Start-Token unterordnet.
KON kennt auch keine spaces, wenn man spaces zum einrücken nutzt, dann gehören die Leerzeichen auch zum String.
Code:
  1. description=Krypton bootstrap build tool
  2. version=1.0.0
  3. private=true
  4. author=Thomas Kunze
  5. engine=vs2019
  6. dependencies{
  7.   luajit-bin=^1.0.0
  8.   libCurl-bin=^1.0.0
  9.   libclang-bin=^1.0.0
  10. }


Bootstrapping
Das Bootstrapping nutzt Windows API und diverse "single file" includes, um ein paar Grundlagen mit zu liefern.
Aktuell ist ein primitiver KON Parser da, der die obige KON Datei liest und verarbeitet. Mit der Windows API lade ich von meinem Paket Server die 3 Pakete und entpacke sie.
Ich verwende tar und lz4, da diese mit sehr wenig Code implementierbar sind.
Mit den 3 Abhängikeiten in ein weiteres Bootstrapping Binary gelinkt, kann ich dann Source Code parsen, Windows unabhängig http/https verarbeiten und Scripting Support machen. Das ist notwendig um dann das finale Buildtool zu bauen.

Paket Repo
Ich will wie bei rpm nicht auf ein Archieve und Kompression fixieren, also jeder packt so wie er will und muss nur mit dem Build Tool und der Plugin Erweiterung auspackbar sein. Im Bootstrapping ist es eine tar file, die mit lz4 gepackt wird aber das ist nicht gut in der Kompression aber sehr schnell beim entpacken. Ich will Tar und LZMA2 verwenden, da wesentlich stärker packen kann.
Die Struktur für die Pakete muss ich noch designen, aktuell liegt einfach alles in einem Ordner und hat keine Versionen.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Foren-Übersicht » Sonstiges » Projekte


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.112s | 17 Queries | GZIP : On ]