راهنمای قوانین ساخت، راهنمای قوانین ساخت

معرفی

Sandboxed API (SAPI) را می توان با سیستم ساخت Bazel گوگل یا با سیستم متا ساخت محبوب 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 : کتابخانه Sandboxed، cc_library معمولی را به عنوان هدف کد میزبان جایگزین می‌کند. از وابستگی های zlib_sapi.bin و sandbox تشکیل شده است.
  • 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++ sandbox پردازش می‌شوند. اینها فایل‌های منبع و هدر C/C++ هستند، یا تولید نشده (کد منبع عادی) یا تولید شده‌اند.

برای اطلاعات بیشتر، به توضیح ویژگی srcs در مستندات cc_library مراجعه کنید.

hdrs

لیست برچسب ها ؛ اختیاری

فهرستی از فایل‌های هدر که برای ایجاد کتابخانه C/C++ جعبه‌شناختی پردازش می‌شوند.

اینجا جایی است که تعریف sandbox (sandbox.h) باید برود. اگر از کتابخانه SAPI تعبیه شده استفاده می شود، خالی بگذارید و سیاست پیش فرض جعبه ایمنی کافی است.

جاسازی کنید

بولی؛ اختیاری؛ پیش فرض True است

اگر درست است، کتابخانه sandboxed باید در داخل کد میزبان تعبیه شود. این اجازه می دهد تا جعبه ایمنی SAPI با سازنده ::sapi::Sandbox::Sandbox(FileToc*) مقداردهی اولیه شود.

کارکرد

لیست نام توابع؛ اختیاری

فهرستی از توابع از کتابخانه C/C++ که یک نسخه sandbox برای آنها تولید شده است و سپس می‌تواند در کد میزبان استفاده شود.

یک لیست خالی سعی می کند همه توابع موجود در کتابخانه را صادر و بسته بندی کند.

lib

رشته؛ ضروری

نام هدف کتابخانه C/C++ که قرار است کتابخانه sandbox شده باشد.

این انتظار دارد که شما یک قانون ساخت cc_library برای کتابخانه C/C++ در پروژه داشته باشید.

lib_name

رشته؛ ضروری

نام شی SAPI که برای پراکسی کردن توابع کتابخانه از ویژگی توابع استفاده می شود. هر فراخوانی به تابع در کتابخانه sandboxed از طریق شی SAPI انجام می شود.

input_files

لیست برچسب ها ؛ اختیاری

لیستی از فایل های C و C++ که در طول اجرای داخلی قانون sapi_interface پردازش می شوند. مولد این فایل ها را برای اعلان عملکرد کتابخانه C/C++ اسکن می کند.

این بیشتر مورد نیاز نیست زیرا سرصفحه های صادر شده کتابخانه C/C++ همیشه اسکن می شوند.

فضای نام

رشته؛ اختیاری؛ پیش فرض sapigen است

یک شناسه فضای نام C++ برای قرار دادن شی SAPI تعریف شده توسط lib_name در آن.

فضای نام پیش فرض sapigen است.

سرتیتر

رشته؛ اختیاری

نام فایل هدر برای استفاده به جای فایل هدر تولید شده.

اگر می خواهید کد را به صورت خودکار تولید کنید، از این ویژگی استفاده نکنید

add_default_deps

بولی؛ اختیاری؛ پیش فرض True است

منسوخ

limit_scan_depth

بولی؛ اختیاری؛ پیش فرض نادرست است

برای کتابخانه های پیچیده، ممکن است تعداد فایل برای 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",
)