المعكرونة هي مكتبة C ++ التي تجذاب أدوات Clang Compiler ، وتوفر وصولاً مفصلاً إلى القطع الأثرية المترجمة باستخدام واجهات برمجة التطبيقات التي تعكس تلك المتاحة في Clang. يحاول المعكرونة تحقيق الأهداف التالية:
قم بتوفير مجموعة أساسية من واجهات برمجة التطبيقات المستقرة نسبيًا ولا تتطلب من شخص ما أن يعتمد مباشرة على رؤوس/مكتبات clang ، وبالتالي تمكين نموذج توزيع أسهل بكثير.
إدارة الذاكرة بشكل صحيح لجميع الكائنات المقدمة من خلال API. لا ينبغي للمرء أن يقلق بشأن عمر الكائن عند استخدام المعكرونة.
تقديم معلومات/وصول إضافية. لا توفر واجهات برمجة تطبيقات Clang الأصلية معلومات رمزية مفصلة من أي نوع. لا يمكن للمرء أن يطلب الرموز المرتبطة بعقدة AST ، على سبيل المثال. يحاول المعكرونة حل هذا ، من بين قضايا مماثلة أخرى.
أولاً ، قم بتحديث الكفاءة واحصل على تثبيت التبعيات الأساسية على سبيل المثال git و cmake و ninja ومترجمك المفضل (تذكر أنه يحتاج إلى دعم C ++ 20). من المفيد استخدام نفس المترجم في كل مجموعة فرعية لتجنب بعض مشاكل التشويش. إذا كنت تستخدم MacOS ، فنحن نوصي بتثبيت Homebrew ، وضمان تثبيت Python 3.9 ، إلى جانب cmake و ninja .
وأخيرا لبناء المعكرونة نفسها.
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 على MacOS ، قد تحتاج إلى تحديد مترجم Clang يدويًا. ومع ذلك ، لا يمكنك فقط تحديد clang أو clang++ ، لأن VCPKG ستحاول تولي نتائج غير عادية. لذلك ، يجب أن تعطي المسار المطلق إلى 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 installالمعكرونة مرخصة وفقًا لترخيص Apache 2.0. أجزاء كبيرة من المعكرونة شبه المولدة من واجهات برمجة التطبيقات Clang. تم ترخيص Clang أيضًا بموجب Apache 2.0 ، مع استثناءات LLVM.
تم تطوير هذا البحث بتمويل من وكالة مشاريع الأبحاث المتقدمة للدفاع (DARPA). وجهات النظر والآراء و/أو النتائج المعبر عنها هي آراء المؤلف ، ولا ينبغي تفسيرها على أنها تمثل الآراء الرسمية أو سياسات وزارة الدفاع أو حكومة الولايات المتحدة.
بيان التوزيع أ - معتمد للإفراج العام ، التوزيع غير المحدود