নিয়ম নির্দেশিকা তৈরি করুন, বিধি নির্দেশিকা তৈরি করুন

ভূমিকা

স্যান্ডবক্সড এপিআই (SAPI) Google এর 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 : স্যান্ডবক্সড লাইব্রেরি, হোস্ট কোড টার্গেট হিসাবে সাধারণ cc_libraryকে প্রতিস্থাপন করে। zlib_sapi.bin এবং স্যান্ডবক্স নির্ভরতা নিয়ে গঠিত।
  • নাম .interface: জেনারেটেড লাইব্রেরি ইন্টারফেস।
  • নাম .embed: cc_embed_data() টার্গেট বাইনারিতে Sandboxee এম্বেড করতে ব্যবহৃত হয়। bazel/embed_data.bzl দেখুন।
  • নাম .bin: স্যান্ডবক্সী বাইনারি, একটি ছোট যোগাযোগ স্টাব এবং স্যান্ডবক্স করা লাইব্রেরি নিয়ে গঠিত।

যুক্তি

গুণাবলী
নাম

নাম ; প্রয়োজনীয়

এই লক্ষ্যের জন্য একটি অনন্য নাম। এটি স্যান্ডবক্সযুক্ত C/C++ লাইব্রেরি সনাক্ত করবে, নাম-সাপি আউটপুট লক্ষ্য দেখুন।

deps

লেবেলের তালিকা; ঐচ্ছিক

স্যান্ডবক্সযুক্ত C/C++ লাইব্রেরিতে লিঙ্ক করা অন্যান্য লাইব্রেরির একটি তালিকা।

srcs

লেবেলের তালিকা; ঐচ্ছিক

C এবং C++ ফাইলগুলির একটি তালিকা যা স্যান্ডবক্সযুক্ত C/C++ লাইব্রেরি তৈরি করতে প্রক্রিয়া করা হয়। এগুলো হল C/C++ সোর্স এবং হেডার ফাইল, হয় নন-জেনারেটেড (সাধারণ সোর্স কোড) বা জেনারেট করা।

আরও তথ্যের জন্য, cc_library ডকুমেন্টেশনে srcs বৈশিষ্ট্যের ব্যাখ্যা দেখুন।

hdrs

লেবেলের তালিকা; ঐচ্ছিক

হেডার ফাইলগুলির একটি তালিকা যা স্যান্ডবক্সযুক্ত C/C++ লাইব্রেরি তৈরি করতে প্রক্রিয়া করা হয়।

এখানেই স্যান্ডবক্স সংজ্ঞা (sandbox.h) যেতে হবে; এমবেডেড SAPI লাইব্রেরি ব্যবহার করা হলে খালি রাখুন, এবং ডিফল্ট স্যান্ডবক্স নীতি যথেষ্ট।

বসান

বুলিয়ান; ঐচ্ছিক; ডিফল্ট সত্য

যদি সত্য হয়, স্যান্ডবক্সযুক্ত লাইব্রেরি হোস্ট কোডের ভিতরে এমবেড করা উচিত। এটি SAPI স্যান্ডবক্সকে ::sapi::Sandbox::Sandbox(FileToc*) কন্সট্রাক্টর দিয়ে আরম্ভ করার অনুমতি দেয়।

ফাংশন

ফাংশন নামের তালিকা; ঐচ্ছিক

C/C++ লাইব্রেরি থেকে ফাংশনের একটি তালিকা যার জন্য একটি স্যান্ডবক্সযুক্ত সংস্করণ তৈরি করা হয় এবং এটি হোস্ট কোডে ব্যবহার করা যেতে পারে।

একটি খালি তালিকা লাইব্রেরিতে পাওয়া সমস্ত ফাংশন রপ্তানি এবং মোড়ানোর চেষ্টা করবে।

lib

স্ট্রিং; প্রয়োজনীয়

C/C++ লাইব্রেরি টার্গেটের নাম যা স্যান্ডবক্সযুক্ত লাইব্রেরি হতে চলেছে।

এটি আশা করে যে প্রকল্পে C/C++ লাইব্রেরির জন্য আপনার কাছে একটি cc_library বিল্ড নিয়ম রয়েছে।

lib_name

স্ট্রিং; প্রয়োজনীয়

SAPI অবজেক্টের নাম যা ফাংশন অ্যাট্রিবিউট থেকে লাইব্রেরি ফাংশন প্রক্সি করতে ব্যবহৃত হয়। স্যান্ডবক্সড লাইব্রেরিতে ফাংশনে যে কোনো কল SAPI অবজেক্টের মাধ্যমে ঘটবে।

input_files

লেবেলের তালিকা; ঐচ্ছিক

C এবং C++ ফাইলগুলির একটি তালিকা যা sapi_interface নিয়মের অভ্যন্তরীণ রানের সময় প্রক্রিয়া করা হয়। জেনারেটর C/C++ লাইব্রেরির ফাংশন ঘোষণার জন্য এই ফাইলগুলি স্ক্যান করে।

এটি বেশিরভাগই প্রয়োজন হয় না কারণ C/C++ লাইব্রেরির রপ্তানি করা শিরোনামগুলি সর্বদা স্ক্যান করা হয়।

নামস্থান

স্ট্রিং; ঐচ্ছিক; ডিফল্ট হল sapigen

lib_name দ্বারা সংজ্ঞায়িত SAPI অবজেক্ট স্থাপন করার জন্য একটি C++ নামস্থান শনাক্তকারী।

ডিফল্ট নামস্থান হল sapigen .

হেডার

স্ট্রিং; ঐচ্ছিক

জেনারেটেড হেডার ফাইলের পরিবর্তে ব্যবহার করার জন্য হেডার ফাইলের নাম।

আপনি যদি কোডটি স্বয়ংক্রিয়ভাবে তৈরি করতে চান তবে এই বৈশিষ্ট্যটি ব্যবহার করবেন না

add_default_deps

বুলিয়ান; ঐচ্ছিক; ডিফল্ট সত্য

বঞ্চিত

সীমা_স্ক্যান_গভীরতা

বুলিয়ান; ঐচ্ছিক; ডিফল্ট মিথ্যা

জটিল লাইব্রেরির জন্য, 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",
)