مقدمة
يمكن استخدام واجهة برمجة التطبيقات Sandboxed API (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. |
أقسام |
قائمة التصنيفات، اختيارية قائمة بالمكتبات الأخرى المطلوب ربطها بمكتبة C/C++ ذات وضع الحماية. |
srcs |
قائمة التصنيفات، اختيارية قائمة بملفات C وC++ التي تتم معالجتها لإنشاء مكتبة C/C++ الموضوعة في وضع الحماية. وهذه الملفات هي ملفات المصدر والعناوين C/C++ ، إمّا غير مُنشأة (رمز مصدر عادي) أو تم إنشاؤها. لمزيد من المعلومات، اطّلِع على شرح السمة srcs في المستندات الخاصة بـ cc_library. |
دقة عالية | قائمة التصنيفات، اختيارية قائمة بملفات العناوين التي تتم معالجتها لإنشاء مكتبة C/C++ الموضوعة في وضع الحماية هذا هو المكان الذي يجب أن يظهر فيه تعريف وضع الحماية (sandbox.h)، واتركه فارغًا في حال استخدام مكتبة SAPI المضمّنة، وكانت سياسة وضع الحماية التلقائية كافية. |
تضمين | منطقي، اختياري، القيمة التلقائية هي True في حال ضبط هذه السياسة على "صحيح"، يجب تضمين المكتبة المحمية في وضع الحماية داخل رمز المضيف. ويسمح هذا الإجراء بإعداد SAPI Sandbox باستخدام
الدالة الإنشائية |
الدوال | قائمة أسماء الدوال؛ اختيارية قائمة بدوال من مكتبة C/C++ يتم إنشاء إصدار لها في وضع الحماية ويمكن استخدامها بعد ذلك في رمز المضيف (Host Code) ستحاول قائمة فارغة تصدير جميع الدوال المتوفّرة في المكتبة والتفافها. |
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 policy is sufficient.
embed = True, # This is the default
functions = [
"deflateInit_",
"deflate",
"deflateEnd",
],
lib = "@zlib//:zlibonly",
lib_name = "Zlib",
namespace = "sapi::zlib",
)