La pasta es una biblioteca C ++ que abstrae la cadena de herramientas del compilador Clang, y proporciona acceso detallado a artefactos de compilación utilizando API que reflejan las disponibles en CLANG. La pasta intenta lograr los siguientes objetivos:
Proporcione un conjunto de API de base que sea relativamente estable y no requiere que alguien dependa directamente de los encabezados/bibliotecas de Clang, lo que permite un modelo de distribución sustancialmente más fácil.
Administre correctamente la memoria para todos los objetos proporcionados a través de la API. No se debe tener que preocuparse por la vida útil del objeto al usar pasta.
Proporcionar información/acceso adicional. Las API nativas de Clang no proporcionan información de token detallada de ningún tipo. No se puede pedir los tokens asociados con un nodo AST, por ejemplo. La pasta intenta resolver esto, entre otros problemas similares.
Primero, actualice la aptitud y obtenga Instale las dependencias de línea de base, como es, por ejemplo, git , cmake , ninja y su compilador de elección (recuerde que debe admitir C ++ 20). Es útil usar el mismo compilador en cada subconjunto para evitar algunos problemas de desglose de nombres. Si está utilizando macOS, recomendamos instalar HomeBrew y asegurar que tenga instalado Python 3.9, junto con un cmake y ninja actualizado.
Y finalmente para construir pasta misma.
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 En MacOS, es posible que deba especificar manualmente el compilador CLANG. Sin embargo, no puede especificar clang o clang++ , porque entonces VCPKG intentará hacerse cargo y producir resultados inusuales. Por lo tanto, debes dar el camino absoluto a tu rango.
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 installLa pasta tiene licencia de acuerdo con la licencia Apache 2.0. Grandes partes de la pasta son semiautogeneradas de las API de Clang. Clang también tiene licencia bajo Apache 2.0, con excepciones LLVM.
Esta investigación se desarrolló con fondos de la Agencia de Proyectos de Investigación Avanzada de Defensa (DARPA). Las opiniones, opiniones y/o hallazgos expresados son las del autor y no deben interpretarse como representando las opiniones o políticas oficiales del Departamento de Defensa o del gobierno de los Estados Unidos.
Declaración de distribución A: aprobado para la liberación pública, Distribución ilimitada