Pasta ist eine C ++ - Bibliothek, die den Clang Compiler Toolchain abstrahiert und einen detaillierten Zugriff auf Kompilierungsartefakte unter Verwendung von APIs bietet, die die in Clang erhältlichen verfügbaren. Pasta versucht, die folgenden Ziele zu erreichen:
Geben Sie einen Grundsatz von APIs an, der relativ stabil ist und nicht erfordert, dass jemand tatsächlich direkt von Clang -Headern/-bibliotheken angewiesen ist und so ein wesentlich einfacheres Verteilungsmodell aktiviert.
Verwalten Sie den Speicher für alle über die API bereitgestellten Objekte ordnungsgemäß. Man sollte sich bei der Verwendung von Pasta keine Sorgen um Objektlebensdauer machen müssen.
Bereitstellung zusätzlicher Informationen/Zugriff. Native Clang -APIs liefern keine detaillierten Token -Informationen jeglicher Art. Man kann beispielsweise nicht nach den mit einem AST -Knoten verbundenen Token fragen. Pasta versucht, dies unter anderem zu lösen.
Aktualisieren Sie zunächst die Eignung und installieren Sie die Basisabhängigkeiten, beispielsweise ist git , cmake , ninja und Ihr Compiler der Wahl (denken Sie daran, dass es C ++ 20 unterstützen muss). Es ist nützlich, denselben Compiler an jeder Untergruppe zu verwenden, um einige Namen zu vermeiden. Wenn Sie MacOS verwenden, empfehlen wir, Homebrew zu installieren und sicherzustellen, dass Python 3.9 zusammen mit einem aktuellen cmake und ninja installiert ist.
Und schließlich, um Nudeln selbst zu bauen.
git clone https://github.com/trailofbits/pasta.git
mkdir -p pasta-build
cd pasta-build
cmake
-DCMAKE_BUILD_TYPE=Release
-DPASTA_ENABLE_INSTALL=ON
-GNinja
../pasta
ninja install Auf macOS müssen Sie möglicherweise den Klang Compiler manuell angeben. Sie können jedoch nicht nur clang oder clang++ angeben, da VCPKG dann versuchen wird, ungewöhnliche Ergebnisse zu übernehmen und zu erzielen. Daher sollten Sie Ihren Klang den absoluten Weg geben.
git clone https://github.com/trailofbits/pasta.git
mkdir -p pasta-build
cd pasta-build
cmake
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_C_COMPILER= ` which clang `
-DCMAKE_CXX_COMPILER= ` which clang++ `
-DPASTA_ENABLE_INSTALL=ON
-GNinja
../pasta
ninja installPasta ist gemäß der Apache 2.0 -Lizenz lizenziert. Große Teile von Pasta werden aus Clang-APIs halbautogener. Clang ist auch unter Apache 2.0 mit LLVM -Ausnahmen lizenziert.
Diese Forschung wurde mit Finanzmitteln der Defense Advanced Research Projects Agency (DARPA) entwickelt. Die Ansichten, Meinungen und/oder Erkenntnisse sind die des Autors und sollten nicht so interpretiert werden, dass sie die offiziellen Ansichten oder Richtlinien des Verteidigungsministeriums oder der US -Regierung vertreten.
Vertriebserklärung A - für die Veröffentlichung, Distribution Unlimited zugelassen