বিল্ড রুল সংক্রান্ত নির্দেশিকা

ভূমিকা

Sandboxed API (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 এবং স্যান্ডবক্স ডিপেন্ডেন্সি নিয়ে গঠিত।
  • 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++ সোর্স এবং হেডার ফাইল, হয় নন-জেনারেটেড (সাধারণ সোর্স কোড) অথবা জেনারেটেড।

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

hdrs

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

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

এখানে স্যান্ডবক্সের সংজ্ঞা (sandbox.h) লিখতে হবে; এম্বেড করা SAPI লাইব্রেরি ব্যবহার করা হলে এবং ডিফল্ট স্যান্ডবক্স কনফিগারেশন (DefaultConfig, যা DefaultPolicyBuilder, DefaultFlags, DefaultEnvironmentVariables এবং DefaultLimits ব্যবহার করে) পর্যাপ্ত হলে, এটি ফাঁকা রাখুন।

এম্বেড করুন

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

True হলে, স্যান্ডবক্স করা লাইব্রেরি হোস্ট কোডের মধ্যে এম্বেড করা উচিত। এটি 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

বুলিয়ান; ঐচ্ছিক; ডিফল্ট মান হল 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",
)