Les pâtes sont une bibliothèque C ++ qui résume la chaîne d'outils du compilateur Clang et fournit un accès détaillé aux artefacts de compilation à l'aide d'API qui reflètent ceux disponibles en clang. Les pâtes essaient d'atteindre les objectifs suivants:
Fournissez un ensemble de référence d'API qui est relativement stable et ne nécessite pas que quelqu'un dépende réellement directement des en-têtes / bibliothèques de Clang, permettant ainsi un modèle de distribution beaucoup plus facile.
Gérez correctement la mémoire pour tous les objets fournis via l'API. Il ne faut pas avoir à se soucier des durées de vie des objets lors de l'utilisation de pâtes.
Fournir des informations / accès supplémentaires. Les API de Clang natives ne fournissent pas d'informations de jetons détaillées d'aucune sorte. On ne peut pas demander les jetons associés à un nœud AST, par exemple. Les pâtes tentent de résoudre ce problème, entre autres problèmes similaires.
Tout d'abord, mettez à jour l'aptitude et obtenez l'installation des dépendances de base telles que git , cmake , ninja et votre compilateur de choix (n'oubliez pas qu'il doit prendre en charge C ++ 20). Il est utile d'utiliser le même compilateur à chaque sous-ensemble pour éviter certains problèmes de mangling. Si vous utilisez MacOS, nous vous recommandons d'installer Homebrew et de vous assurer que Python 3.9 est installé, ainsi qu'un cmake et ninja à jour.
Et enfin pour construire des pâtes elle-même.
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 Sur MacOS, vous devrez peut-être spécifier manuellement le compilateur Clang. Vous ne pouvez cependant pas spécifier simplement clang ou clang++ , car alors VCPKG essaiera de prendre le relais et de produire des résultats inhabituels. Par conséquent, vous devriez donner le chemin absolu vers votre clang.
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 installLes pâtes sont sous licence selon la licence Apache 2.0. De grandes parties des pâtes sont semi-autogérrées à partir des API de Clang. Clang est également concédé sous licence sous Apache 2.0, avec des exceptions LLVM.
Cette recherche a été développée avec le financement de la Defense Advanced Research Projects Agency (DARPA). Les opinions, opinions et / ou conclusions exprimées sont celles de l'auteur et ne doivent pas être interprétées comme représentant les opinions ou politiques officielles du ministère de la Défense ou du gouvernement américain.
Énoncé de distribution A - Approuvé pour la libération publique, Distribution Unlimited