مقدمة
يمكن استخدام واجهة برمجة التطبيقات المحصورة (SAPI) مع نظام Bazel للإنشاء من Google أو مع نظام CMake الشائع للإنشاء الوصفي. تركز هذه الصفحة على Bazel، ولكن الميزات نفسها متاحة لنظام CMake. Bazel هو نظام الإنشاء المقترَح والأسهل للدمج.
في ملف BUILD.bazel، سيكون لديك قاعدة إنشاء لإنشاء رمز المضيف. لكي يستخدم رمز المضيف الإصدار المحصور من إحدى المكتبات، عليك إعداد هدف إنشاء سيستخدمه رمز المضيف.
قواعد إنشاء واجهة برمجة التطبيقات المحصورة (SAPI)
- sapi_library
sapi_library
sapi_library(name, deps, srcs, hdrs, embed, functions, lib, lib_name, input_files, namespace, header, add_default_deps, limit_scan_depth, visibility)
الأهداف الناتجة
تُنشئ قاعدة الإنشاء sapi_library() الأهداف التالية:
- name-sapi: مكتبة محصورة تحل محل cc_library العادية كهدف لرمز المضيف. تتألف من
zlib_sapi.binوالتبعيات المحصورة. - name.interface: واجهة المكتبة التي تم إنشاؤها
- name.embed: هدف
cc_embed_data()المستخدَم لتضمين Sandboxee في الملف الثنائي راجِع bazel/embed_data.bzl.- name.bin: الملف الثنائي لـ Sandboxee، ويتألف من جزء صغير من رمز الاتصال والمكتبة التي يتم حصرها
الوسيطات
| السمات | |
|---|---|
| الاسم |
الاسم، مطلوب اسم فريد لهذا الهدف سيحدّد هذا الاسم مكتبة C/C++ المحصورة، راجِع هدف الإخراج name-sapi. |
| deps |
قائمة بالتصنيفات ، اختيارية قائمة بالمكتبات الأخرى التي سيتم ربطها بمكتبة C/C++ المحصورة |
| srcs |
قائمة بالتصنيفات ، اختيارية قائمة بملفات C وC++ التي تتم معالجتها لإنشاء مكتبة C/C++ المحصورة هذه هي ملفات مصدر C/C++ وملفات العنوان، إما غير منشأة (الرمز المصدر العادي) أو منشأة. لمزيد من المعلومات، راجِع شرح السمة srcs في مستندات cc_library. |
| hdrs | قائمة بالتصنيفات ، اختيارية قائمة بملفات العنوان التي تتم معالجتها لإنشاء مكتبة C/C++ المحصورة هذا هو المكان الذي يجب وضع تعريف وضع الحماية فيه (sandbox.h)، اتركه
فارغًا إذا تم استخدام مكتبة SAPI المضمّنة وكانت إعدادات وضع الحماية التلقائية (DefaultConfig،
التي تستخدم |
| embed | قيمة منطقية، اختيارية، القيمة التلقائية هي True إذا كانت القيمة True، يجب تضمين المكتبة المحصورة داخل رمز المضيف. يسمح ذلك بتهيئة وضع حماية SAPI باستخدام الدالة الإنشائية
|
| functions | قائمة بأسماء الدوال، اختيارية قائمة بالدوال من مكتبة C/C++ التي يتم إنشاء إصدار محصور لها ويمكن استخدامها بعد ذلك في رمز المضيف ستحاول القائمة الفارغة تصدير جميع الدوال التي تم العثور عليها في الـ مكتبة وتغليفها. |
| lib | سلسلة، مطلوبة اسم هدف مكتبة C/C++ التي ستكون المكتبة المحصورة يفترض ذلك أن يكون لديك قاعدة إنشاء cc_library لمكتبة C/C++ في المشروع. |
| lib_name | سلسلة، مطلوبة اسم عنصر SAPI المستخدَم لتمثيل دوال المكتبة من سمة الدوال ستتم أي عملية استدعاء للدالة في المكتبة المحصورة من خلال عنصر SAPI. |
| input_files | قائمة بالتصنيفات ، اختيارية قائمة بملفات C وC++ التي تتم معالجتها أثناء التشغيل الداخلي لقاعدة sapi_interface يبحث المُنشئ في هذه الملفات عن إعلانات دوال مكتبة C/C++. لا يكون ذلك مطلوبًا في الغالب لأنّه يتم دائمًا فحص العناوين المُصدَّرة لمكتبة C/C++. |
| namespace | سلسلة، اختيارية، القيمة التلقائية هي sapigen معرّف مساحة اسم C++ لوضع عنصر SAPI الذي تم تحديده بواسطة lib_name فيه مساحة الاسم التلقائية هي sapigen. |
| header | سلسلة، اختيارية اسم ملف العنوان الذي سيتم استخدامه بدلاً من ملف العنوان الذي تم إنشاؤه إذا أردت إنشاء الرمز تلقائيًا، لا تستخدِم هذه السمة. |
| add_default_deps | قيمة منطقية، اختيارية، القيمة التلقائية هي True متوقف |
| limit_scan_depth | قيمة منطقية، اختيارية، القيمة التلقائية هي False بالنسبة إلى المكتبات المعقدة، قد يتم الوصول إلى عدد الملفات المسموح به في Bazel ولن تنجح عملية الإنشاء. هذه السمة هي حل بديل لهذه الحالات المعقدة. لا تستخدِمها إلا إذا لزم الأمر. |
| الإشارات | راجِع مستندات Bazel للحصول على الإشارات. |
| مستوى العرض | راجِع مستندات Bazel للحصول على مستوى العرض |
مثال على الاستخدام
يُعدّ مثال zlib مشروعًا مرجعيًا جيدًا يوضّح كيفية استخدام قاعدة الإنشاء sapi_library:
load(
"//sandboxed_api/tools/generator:sapi_generator.bzl",
"sapi_library",
)
sapi_library(
name = "zlib-sapi",
srcs = [], # Extra code compiled with the SAPI library
hdrs = [], # Leave empty if embedded SAPI libraries are used, and the
# default sandbox configuration (DefaultConfig) is sufficient.
embed = True, # This is the default
functions = [
"deflateInit_",
"deflate",
"deflateEnd",
],
lib = "@zlib//:zlibonly",
lib_name = "Zlib",
namespace = "sapi::zlib",
)