ডিজাইন অনুসারে, Android.bp
ফাইলগুলি সহজ। তারা শর্তাধীন বা নিয়ন্ত্রণ প্রবাহ বিবৃতি ধারণ করে না; সমস্ত জটিলতা গো-তে লেখা বিল্ড লজিক দ্বারা পরিচালিত হয়। যখন সম্ভব, Android.bp
ফাইলের বাক্য গঠন এবং শব্দার্থবিদ্যা Bazel BUILD ফাইলের মতো।
মডিউল
একটি Android.bp
ফাইলের একটি মডিউল একটি মডিউল টাইপ দিয়ে শুরু হয় এবং তারপরে name: "value",
বিন্যাস:
cc_binary {
name: "gzip",
srcs: ["src/test/minigzip.c"],
shared_libs: ["libz"],
stl: "none",
}
প্রতিটি মডিউলের অবশ্যই একটি name
বৈশিষ্ট্য থাকতে হবে, এবং মানটি অবশ্যই সমস্ত Android.bp
ফাইল জুড়ে অনন্য হতে হবে, নামস্থান এবং পূর্বনির্মাণ মডিউলগুলিতে name
সম্পত্তির মানগুলি ব্যতীত, যা পুনরাবৃত্তি হতে পারে৷
srcs
বৈশিষ্ট্য স্ট্রিংগুলির একটি তালিকা হিসাবে মডিউল তৈরি করতে ব্যবহৃত উত্স ফাইলগুলিকে নির্দিষ্ট করে। আপনি মডিউল রেফারেন্স সিনট্যাক্স ":<module-name>"
ব্যবহার করে উৎস ফাইল তৈরি করে এমন অন্যান্য মডিউলের আউটপুট উল্লেখ করতে পারেন, যেমন genrule
বা filegroup
।
বৈধ মডিউল প্রকার এবং তাদের বৈশিষ্ট্যগুলির একটি তালিকার জন্য, সুং মডিউল রেফারেন্স দেখুন।
প্রকারভেদ
ভেরিয়েবল এবং বৈশিষ্ট্যগুলি দৃঢ়ভাবে টাইপ করা হয়, গতিশীলভাবে প্রথম অ্যাসাইনমেন্টের উপর ভিত্তি করে ভেরিয়েবল এবং বৈশিষ্ট্যগুলি মডিউল টাইপ দ্বারা স্থিরভাবে সেট করা হয়। সমর্থিত প্রকারগুলি হল:
- বুলিয়ানস (
true
বাfalse
) - পূর্ণসংখ্যা (
int
) - স্ট্রিংস (
"string"
) - স্ট্রিংগুলির তালিকা (
["string1", "string2"]
) - মানচিত্র (
{key1: "value1", key2: ["value2"]}
)
মানচিত্রে নেস্টেড মানচিত্র সহ যেকোনো ধরনের মান থাকতে পারে। তালিকা এবং মানচিত্রে শেষ মানের পরে কমা থাকতে পারে।
গ্লবস
যে বৈশিষ্ট্যগুলি ফাইলগুলির একটি তালিকা নেয়, যেমন srcs
, এছাড়াও গ্লোব প্যাটার্ন নিতে পারে। গ্লোব প্যাটার্নে সাধারণ ইউনিক্স ওয়াইল্ডকার্ড *
থাকতে পারে, উদাহরণস্বরূপ *.java
। গ্লোব প্যাটার্নে পাথ এলিমেন্ট হিসেবে একটি একক **
ওয়াইল্ডকার্ডও থাকতে পারে, যা শূন্য বা তার বেশি পাথ উপাদানের সাথে মেলে। উদাহরণস্বরূপ, java/**/*.java
java/Main.java
এবং java/com/android/Main.java
প্যাটার্ন উভয়ের সাথে মিলে যায়।
ভেরিয়েবল
একটি Android.bp
ফাইলে শীর্ষ-স্তরের পরিবর্তনশীল অ্যাসাইনমেন্ট থাকতে পারে:
gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
name: "gzip",
srcs: gzip_srcs,
shared_libs: ["libz"],
stl: "none",
}
ভেরিয়েবলগুলিকে তারা যে ফাইলে ঘোষণা করা হয়েছে তার বাকি অংশে, সেইসাথে যেকোন চাইল্ড ব্লুপ্রিন্ট ফাইলগুলিতে স্কোপ করা হয়েছে৷ ভেরিয়েবলগুলি একটি ব্যতিক্রমের সাথে অপরিবর্তনীয়: এগুলিকে একটি +=
অ্যাসাইনমেন্টের সাথে যুক্ত করা যেতে পারে, তবে শুধুমাত্র তাদের উল্লেখ করার আগে।
মন্তব্য
Android.bp
ফাইলে C-স্টাইল মাল্টিলাইন /* */
এবং C++ স্টাইলের সিঙ্গেল-লাইন //
মন্তব্য থাকতে পারে।
অপারেটর
+ অপারেটর ব্যবহার করে স্ট্রিং, স্ট্রিংয়ের তালিকা এবং মানচিত্র যুক্ত করা যেতে পারে। +
অপারেটর ব্যবহার করে পূর্ণসংখ্যা যোগ করা যেতে পারে। একটি মানচিত্র যুক্ত করা উভয় মানচিত্রে কীগুলির মিলন তৈরি করে, উভয় মানচিত্রে উপস্থিত যেকোনো কীগুলির মান যুক্ত করে।
শর্তাবলী
Soong Android.bp
ফাইলে শর্তসাপেক্ষে সমর্থন করে না। পরিবর্তে, শর্তসাপেক্ষ প্রয়োজন হবে এমন বিল্ড নিয়মের জটিলতা Go-তে পরিচালনা করা হয়, যেখানে উচ্চ-স্তরের ভাষা বৈশিষ্ট্যগুলি ব্যবহার করা যেতে পারে এবং শর্তাবলী দ্বারা প্রবর্তিত অন্তর্নিহিত নির্ভরতাগুলি ট্র্যাক করা যেতে পারে। বেশিরভাগ শর্তসাপেক্ষে মানচিত্র বৈশিষ্ট্যে রূপান্তরিত হয়, যেখানে মানচিত্রের মানগুলির মধ্যে একটি নির্বাচন করা হয় এবং শীর্ষ-স্তরের বৈশিষ্ট্যগুলিতে যুক্ত করা হয়।
উদাহরণস্বরূপ, আর্কিটেকচার-নির্দিষ্ট ফাইল সমর্থন করতে:
cc_library {
...
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: ["arm.cpp"],
},
x86: {
srcs: ["x86.cpp"],
},
},
}
ফরম্যাটার
Soong ব্লুপ্রিন্ট ফাইলগুলির জন্য একটি ক্যানোনিকাল ফর্ম্যাটার অন্তর্ভুক্ত করে, যা gofmt- এর মতো। বর্তমান ডিরেক্টরির সমস্ত Android.bp
ফাইলগুলিকে পুনঃফর্ম্যাট করতে, চালান:
bpfmt -w .
ক্যানোনিকাল ফরম্যাটে চার-স্পেস ইন্ডেন্ট, একটি মাল্টিলিমেন্ট তালিকার প্রতিটি উপাদানের পরে নতুন লাইন এবং তালিকা এবং মানচিত্রে একটি ট্রেলিং কমা অন্তর্ভুক্ত রয়েছে।