نظرة عامة
لاستدعاء برنامج التجميع باستخدام الخيارات المناسبة، يحتاج Bazel إلى بعض المعرفة حول العناصر الداخلية للعارض، مثل تضمين الأدلة والعلامات المهمة. بعبارة أخرى، يحتاج Bazel إلى نموذج مبسّط للعارض ليفهم أداء عمله.
يحتاج Bazel إلى معرفة ما يلي:
- ما إذا كان برنامج التجميع متوافقًا مع hinLTO أو الوحدات أو الربط الديناميكي أو PIC (الرمز المستقل لموضع الإعلان)
- المسارات المؤدية إلى الأدوات المطلوبة، مثل gcc وld وar وobjcopy وما إلى ذلك
- يتضمن النظام المُدمج أدلة. يحتاج Bazel إلى هذه الصفحات للتحقّق من أنّ جميع العناوين التي تم تضمينها في الملف المصدر قد تم الإعلان عنها بشكل صحيح في ملف
BUILD
. - سجلّ النظام التلقائي.
- العلامات التي يمكن استخدامها للتجميع والربط والأرشفة.
- العلامات التي يمكن استخدامها لأوضاع التجميع المتوافقة (opt وdbg وFastbuild)
- إنشاء المتغيرات التي تطلبها برامج التجميع على وجه التحديد.
إذا كان مجمِّع الموسيقى يدعم بُنى متعدّدة، سيحتاج Bazel إلى ضبطها بشكلٍ منفصل.
CcToolchainConfigInfo
هو موفّر يوفر المستوى الدقيق من الدقة لضبط سلوك قواعد Bazel's C++. وفقًا للإعدادات التلقائية، يعمل تطبيق Bazel على ضبط إصدار CcToolchainConfigInfo
تلقائيًا، ولكن يتوفّر لك خيار ضبطه يدويًا. لإجراء ذلك، عليك استخدام قاعدة Starlark
التي توفّر CcToolchainConfigInfo
، ويجب توجيه
السمة toolchain_config
من cc_toolchain
إلى القاعدة.
يمكنك إنشاء CcToolchainConfigInfo
من خلال الاتصال
cc_common.create_cc_toolchain_config_info()
.
يمكنك العثور على مشغّلات Starlark لكلّ المباني التي ستحتاج إليها في هذه العملية.
@rules_cc//cc:cc_toolchain_config_lib.bzl
عند دخول هدف C++ إلى مرحلة التحليل، يختار Bazel هدف cc_toolchain
المناسب استنادًا إلى ملف BUILD
، ويحصل على
موفّر CcToolchainConfigInfo
من الهدف المحدّد في سمة cc_toolchain.toolchain_config
. يعمل الهدف cc_toolchain
على تمرير هذه المعلومات إلى الهدف C++ من خلال CcToolchainProvider
.
على سبيل المثال، يحتاج إجراء التجميع أو الرابط، الذي تم إنشاؤه بواسطة قاعدة مثل
cc_binary
أو cc_library
، إلى المعلومات التالية:
- برنامج التجميع أو الرابط المراد استخدامه
- علامات سطر الأوامر في برنامج التجميع/الرابط
- علامات الضبط التي تم تمريرها من خلال خيارات
--copt/--linkopt
- متغيرات البيئة
- العناصر المطلوبة في وضع الحماية حيث يتم تنفيذ الإجراء
يتم تحديد جميع المعلومات الواردة أعلاه، باستثناء العناصر المطلوبة في وضع الحماية، في استهداف Starlark الذي تشير إليه السمة cc_toolchain
.
يتمّ الإعلان عن العناصر التي سيتم شحنها إلى وضع الحماية في هدف cc_toolchain
. على سبيل المثال، باستخدام السمة cc_toolchain.linker_files
، يمكنك تحديد البرنامج الثنائي للرابط ومكتبات سلسلة الأدوات للشحن إلى وضع الحماية.
اختيار سلسلة الأدوات
يعمل منطق اختيار سلسلة الأدوات على النحو التالي:
يحدّد المستخدم هدفًا
cc_toolchain_suite
في الملفBUILD
ويوجّه Ballel إلى الهدف باستخدام الخيار--crosstool_top
.يشير هدف
cc_toolchain_suite
إلى سلاسل أدوات متعددة. تحدّد قيم العلامات--cpu
و--compiler
أيًا من سلسلة الأدوات هذه التي يتم اختيارها، إما استنادًا إلى قيمة العلامة--cpu
فقط، أو استنادًا إلى قيمة--cpu | --compiler
مشتركة. في ما يلي خطوات عملية الاختيار:إذا تم تحديد الخيار
--compiler
، يختار Bazel الإدخال المقابل من السمةcc_toolchain_suite.toolchains
مع--cpu | --compiler
. إذا لم يعثر Bazel على إدخال مقابل، سيتم عرض خطأ.وإذا لم يتم تحديد الخيار
--compiler
، يختار Bazel الإدخال المقابل من السمةcc_toolchain_suite.toolchains
مع تضمين--cpu
فقط.في حال عدم تحديد أي علامات، يفحص Bazel نظام المضيف ويختار القيمة
--cpu
استنادًا إلى النتائج. يُرجى الاطّلاع على رمز آلية الفحص.
وبعد اختيار سلسلة أدوات، تخضع العناصر feature
وaction_config
المقابلة في قاعدة Starlark لضبط الإصدار (أي العناصر الموضّحة لاحقًا). تسمح هذه الرسائل بتنفيذ ميزات C++ التي تم طرحها بالكامل في Bazel بدون تعديل برنامج ثنائية. تتيح قواعد C++ استخدام عدة إجراءات فريدة موثَّقة بالتفصيل
في رمز مصدر Bazel.
الميزات
الميزة هي كيان يتطلب علامات سطر الأوامر أو الإجراءات أو القيود على بيئة التنفيذ أو تعديلات التبعية. يمكن أن تكون الميزة بسيطة مثل السماح لملفات BUILD
باختيار عمليات ضبط العلامات، مثل treat_warnings_as_errors
، أو التفاعل مع قواعد C++
وإضافة إجراءات التجميع وأساليب الإدخال الجديدة إلى التجميع، مثل
header_modules
أو thin_lto
.
في الوضع المثالي، يتضمّن CcToolchainConfigInfo
قائمة بالميزات التي تتألف منها كل ميزة من مجموعة الإبلاغ واحدة أو أكثر، حيث تحدِّد كل ميزة قائمة من العلامات التي تنطبق على إجراءات Bazel محدّدة.
يتم تحديد العنصر حسب الاسم، الذي يسمح بفصل ضبط قاعدة Starlark بالكامل عن إصدارات Bazel. وهذا يعني أنّ إصدار Bazel لا يؤثّر في أداء عمليات ضبط CcToolchainConfigInfo
طالما أنّ تلك الإعدادات لا تتطلب استخدام ميزات جديدة.
يتم تفعيل الميزة بإحدى الطرق التالية:
- تم ضبط حقل
enabled
للميزة علىtrue
. - Bazel أو مالك القاعدة تفعّلها صراحةً.
- يمكن للمستخدم تفعيل الإضافة من خلال ميزة
--feature
Bazel أو سمة القاعدةfeatures
.
يمكن أن تعتمد الميزات على ارتباطات تعتمد على علامات سطر الأوامر وإعدادات ملفات BUILD
وغيرها من المتغيرات.
علاقات الميزات
تتم إدارة المهام التابعة عادةً مباشرةً باستخدام Bazel الذي يطبّق المتطلبات ويدير الصراعات بشكل جوهري بسبب طبيعة الميزات المحدّدة في الإصدار. تسمح مواصفات سلسلة الأدوات بقيود أكثر دقة للاستخدام مباشرةً ضمن قاعدة Starlark التي تحكم دعم الميزات وتوسيع نطاقها. وهي كما يلي:
الشروط | الوصف |
requires = [ feature_set (features = [ 'feature-name-1', 'feature-name-2' ]), ] |
على مستوى الميزة. ولا تتوفر الميزة إلا في حال تفعيل الميزات المطلوبة المحدّدة. على سبيل المثال، عندما تكون الميزة متوافقة فقط في
أوضاع إنشاء معيّنة (opt أو dbg أو
fastbuild )، إذا كانت"مطلوبة"تحتوي على عدة"feature_set"
، ستكون الميزة متاحة في حال تلبية أي من"feature_set"
(عند تفعيل جميع الميزات المحدّدة).
|
implies = ['feature'] |
على مستوى الميزة. تشير هذه الميزة إلى الميزات المحددة. يتيح تفعيل الميزة أيضًا ضمنيًا تفعيل جميع الميزات المضمّنة فيها (أي أنها تعمل بشكل متكرّر). وتوفّر أيضًا إمكانية تحليل مجموعات فرعية مشتركة من الوظائف من مجموعة الميزات، مثل الأجزاء الشائعة المعقّمة. لا يمكن إيقاف الميزات الضمنية. |
provides = ['feature'] |
على مستوى الميزة. تشير هذه السمة إلى أنّ هذه الميزة هي من الميزات البديلة الحصرية الحصرية. على سبيل المثال، يمكن لكل المعقّمات تحديد يساهم ذلك في تحسين معالجة الأخطاء من خلال عرض البدائل إذا طلب المستخدم ميزتَين حصريتَين أو أكثر في آنٍ واحد. |
with_features = [ with_feature_set( features = ['feature-1'], not_features = ['feature-2'], ), ] |
على مستوى المجموعة المحدَّدة. يمكن للميزة تحديد مجموعات علامات متعددة متعددة.
عند تحديد with_features ، سيتم توسيع مجموعة العلامات فقط إلى أمر الإصدار إذا كان هناك with_feature_set واحدة على الأقل تم تفعيل جميع الميزات في المجموعة features المحدّدة عليها، وتم إيقاف جميع الميزات المحدّدة في مجموعة not_features .
في حال عدم تحديد with_features ، سيتم تطبيق مجموعة العلامات
بدون شروط على كل إجراء محدّد.
|
الإجراءات
توفّر الإجراءات المرونة في تعديل الظروف التي يتم فيها تنفيذ الإجراء بدون افتراض كيفية تنفيذ الإجراء. يحدّد
action_config
البرنامج الثنائي الذي يستدعيه الإجراء، بينما يحدّد
feature
الإعدادات (العلامات) التي تحدّد كيفية عمل
الأداة عند استدعاء الإجراء.
الميزات تشير إلى إجراءات Bazel
وهي تؤثر في الإجراءات لأنّها يمكنها تعديل الرسم البياني لإجراء Bazel. يتضمّن موفّر CcToolchainConfigInfo
الإجراءات التي تحتوي على علامات وأدوات
مرتبطة به، مثل c++-compile
. يتم تخصيص العلامات لكل إجراء من خلال
ربطها بميزة.
يمثّل كل اسم إجراء نوعًا واحدًا من الإجراءات التي يؤديها تطبيق Bazel، مثل التجميع أو الربط. وهناك علاقة بين عدّة إجراءات
إجراءات التجميع
الإجراء | الوصف |
preprocess-assemble
|
التجميع مع المعالجة المسبقة السعر المعتاد: .S ملف
|
assemble
|
التجميع بدون معالجة مسبقة. السعر المعتاد: .s ملف
|
إجراءات التجميع
الإجراء | الوصف |
cc-flags-make-variable
|
نشر CC_FLAGS في المجموعات الجينية.
|
c-compile
|
التجميع بعد C. |
c++-compile
|
التجميع باستخدام C++. |
c++-header-parsing
|
تشغيل المحلل اللغوي' على ملف عنوان لضمان أن العنوان مستقل، لأن ذلك سيؤدي إلى أخطاء التجميع. لا تنطبق إلا على سلاسل الأدوات التي تتوافق مع الوحدات التنظيمية. |
إجراءات الرابط
الإجراء | الوصف |
c++-link-dynamic-library
|
ربط مكتبة مشتركة تحتوي على جميع العناصر التابعة لها |
c++-link-nodeps-dynamic-library
|
ربط مكتبة مشتركة تحتوي على مصدرَين (cc_library ) فقط
|
c++-link-executable
|
ربط مكتبة نهائية جاهزة للتشغيل |
إجراءات الواقع المعزّز
تعمل إجراءات الواقع المعزّز على تجميع ملفات الكائنات في مكتبات الأرشيف (.a
ملف) من خلال ar
وترميز بعض الدلالة في الاسم.
الإجراء | الوصف |
c++-link-static-library
|
أنشِئ مكتبة ثابتة (أرشيف). |
إجراءات مبادرة LTO
الإجراء | الوصف |
lto-backend
|
إجراء ThinLTO الذي يجمع الرموز البريدية في العناصر الأصلية |
lto-index
|
إجراء رقيقة على الأقل لإنشاء مؤشر عام |
استخدام action_config
action_config
هي بنية Starlark تصف إجراء Bazel من خلال تحديد الأداة (برنامج ثنائي) لاستدعاءه أثناء الإجراء ومجموعات العلامات، المحدّدة بالميزات. تُطبّق هذه العلامات قيودًا على تنفيذ الإجراء.
تتضمن دالة إنشاء action_config()
المعلمات التالية:
السمة | الوصف |
action_name
|
إجراء البازل الذي يتوافق معه هذا الإجراء. يستخدم Bazel هذه السمة لاكتشاف أداة كل إجراء ومتطلبات التنفيذ. |
tools
|
الملف التنفيذي المراد استدعاءه. ستكون الأداة المطبّقة على الإجراء هي الأداة الأولى في القائمة التي تتضمّن مجموعة ميزات تتطابق مع إعدادات الميزات. يجب تقديم القيمة التلقائية. |
flag_sets
|
قائمة بالعلامات التي تنطبق على مجموعة من الإجراءات. وينطبق الأمر نفسه على إحدى الميزات. |
env_sets
|
قائمة بقيود البيئة التي تنطبق على مجموعة من الإجراءات وينطبق الأمر نفسه على إحدى الميزات. |
يمكن أن يطلب action_config
ويلمّح ضمن الميزات الأخرى
وaction_config
وفقًا لما تفرضه
علاقات الميزات الموضّحة سابقًا. هذا السلوك يشبه سلوك إحدى الميزات.
إنّ السمتَين الأخيرتَين غير متطابقتَين مع السمات المقابلة في الميزات، وهما مضمّنتان لأنّ بعض إجراءات Bazel تتطلّب علامات معيّنة أو متغيّرات بيئة معيّنة والهدف من ذلك هو عدم إقران action_config
+feature
. في العادة، يُفضَّل مشاركة ميزة واحدة في action_config
متعددة.
لا يمكنك تحديد أكثر من action_config
واحدة باستخدام action_name
نفسها ضمن سلسلة الأدوات نفسها. ويؤدي ذلك إلى منع حدوث غموض في مسارات الأدوات
وفرض ما ينفّذه action_config
، أي أنّ سمات"الإجراءات"تظهر بوضوح في مكان واحد ضمن سلسلة الأدوات.
استخدام أداة إنشاء الأدوات
يمكن تحديد action_config
لمجموعة من الأدوات من خلال معلّمتها tools
.
تأخذ دالة إنشاء tool()
المعلمات التالية:
الحقل | الوصف |
tool_path
|
المسار إلى الأداة المعنيّة (بالاستناد إلى الموقع الجغرافي الحالي) |
with_features
|
تعرض هذه السياسة قائمة بالميزات التي يجب أن تستوفي واحدة منها على الأقل حتى يتم تطبيق هذه الأداة. |
بالنسبة إلى action_config
، يطبّق tool
واحد فقط
مسار الأداة ومتطلبات التنفيذ على إجراء Bazel. يتم اختيار أداة
من خلال تكرار السمة tools
على action_config
إلى أن يتم العثور على أداة
تتضمن مجموعة with_feature
مطابقة لضبط الميزة
(يمكنك الاطّلاع على العلاقات المميّزة في وقت سابق في هذه الصفحة
للحصول على مزيد من المعلومات). يجب إنهاء قوائم الأدوات بأداة تلقائية تتوافق مع إعدادات الميزة الفارغة.
مثال على الاستخدام
يمكن استخدام الميزات والإجراءات معًا لتنفيذ إجراءات Bazel
باستخدام دلالات الألفاظ المتنوعة على المنصات. على سبيل المثال، يتطلب إنشاء رموز تصحيح الأخطاء على
نظام التشغيل macOS إنشاء رموز في إجراء التجميع، ثم استدعاء أداة متخصّصة أثناء إجراء الرابط لإنشاء أرشيف dsm مضغوط، ثم
فك ضغط هذا الأرشيف لإنشاء حِزمة التطبيق وملفات .plist
التي يمكن استهلاكها بواسطة Xcode.
بدلاً من استخدام Bazel، يمكن تنفيذ هذه العملية على النحو التالي: يتمثّل الإجراء unbundle-debuginfo
في Bazel:
load("@rules_cc//cc:defs.bzl", "ACTION_NAMES")
action_configs = [
action_config (
config_name = ACTION_NAMES.cpp_link_executable,
action_name = ACTION_NAMES.cpp_link_executable,
tools = [
tool(
with_features = [
with_feature(features=["generate-debug-symbols"]),
],
tool_path = "toolchain/mac/ld-with-dsym-packaging",
),
tool (tool_path = "toolchain/mac/ld"),
],
),
]
features = [
feature(
name = "generate-debug-symbols",
flag_sets = [
flag_set (
actions = [
ACTION_NAMES.c_compile,
ACTION_NAMES.cpp_compile
],
flag_groups = [
flag_group(
flags = ["-g"],
),
],
)
],
implies = ["unbundle-debuginfo"],
),
]
يمكن تنفيذ هذه الميزة نفسها بشكل مختلف تمامًا لنظام التشغيل Linux الذي يستخدم
fission
أو لنظام التشغيل Windows، ما يؤدي إلى إنشاء .pdb
ملف. على سبيل المثال،
قد يظهر عملية تنفيذ رمز تصحيح الأخطاء المستند إلى fission
على النحو التالي:
load("@rules_cc//cc:defs.bzl", "ACTION_NAMES")
action_configs = [
action_config (
name = ACTION_NAMES.cpp_compile,
tools = [
tool(
tool_path = "toolchain/bin/gcc",
),
],
),
]
features = [
feature (
name = "generate-debug-symbols",
requires = [with_feature_set(features = ["dbg"])],
flag_sets = [
flag_set(
actions = [ACTION_NAMES.cpp_compile],
flag_groups = [
flag_group(
flags = ["-gsplit-dwarf"],
),
],
),
flag_set(
actions = [ACTION_NAMES.cpp_link_executable],
flag_groups = [
flag_group(
flags = ["-Wl", "--gdb-index"],
),
],
),
],
),
]
الإبلاغ عن المجموعات
تتيح لك CcToolchainConfigInfo
تجميع العلامات في مجموعات لها غرض محدّد. يمكنك تحديد علامة باستخدام متغيرات محددة مسبقًا
ضمن قيمة العلامة، والتي توسعها أداة التجميع عند إضافة العلامة إلى
أمر الإصدار. مثلاً:
flag_group (
flags = ["%{output_file_path}"],
)
في هذه الحالة، سيتم استبدال محتوى العلامة بمسار ملف الإخراج للإجراء.
يتم توسيع مجموعات العلامات إلى أمر الإصدار بالترتيب الذي تظهر به في القائمة، من أعلى إلى أسفل، من اليسار إلى اليمين.
بالنسبة إلى العلامات التي تحتاج إلى تكرارها بقيم مختلفة عند إضافتها إلى أمر الإصدار، يمكن لمجموعة العلامات تكرار المتغيرات من النوع list
. على سبيل المثال، المتغير include_path
من النوع list
:
flag_group (
iterate_over = "include_paths",
flags = ["-I%{include_paths}"],
)
توسيع إلى -I<path>
لكل عنصر مسار في قائمة include_paths
. يتم توسيع كل العلامات (أو flag_group
) في نص بيان مجموعة الإبلاغات كوحدة. مثلاً:
flag_group (
iterate_over = "include_paths",
flags = ["-I", "%{include_paths}"],
)
توسيع إلى -I <path>
لكل عنصر مسار في قائمة include_paths
.
يمكن تكرار المتغير عدة مرات. مثلاً:
flag_group (
iterate_over = "include_paths",
flags = ["-iprefix=%{include_paths}", "-isystem=%{include_paths}"],
)
تتوسّع إلى:
-iprefix=<inc0> -isystem=<inc0> -iprefix=<inc1> -isystem=<inc1>
يمكن أن تتوافق المتغيّرات مع البُنى التي يمكن الوصول إليها باستخدام رمز النقطة. على سبيل المثال:
flag_group (
flags = ["-l%{libraries_to_link.name}"],
)
يمكن دمج البنى وقد تحتوي أيضًا على تسلسلات. لمنع تضارب الأسماء، ولتكون واضحًا، يجب تحديد المسار الكامل عبر الحقول. على سبيل المثال:
flag_group (
iterate_over = "libraries_to_link",
flag_groups = [
flag_group (
iterate_over = "libraries_to_link.shared_libraries",
flags = ["-l%{libraries_to_link.shared_libraries.name}"],
),
],
)
توسيع شرطي
تتيح مجموعات العلامات توسيعًا مشروطًا استنادًا إلى وجود متغيّر معيّن أو حقله باستخدام السمات expand_if_available
أو expand_if_not_available
أو
expand_if_true
أو expand_if_false
أو expand_if_equal
. مثلاً:
flag_group (
iterate_over = "libraries_to_link",
flag_groups = [
flag_group (
iterate_over = "libraries_to_link.shared_libraries",
flag_groups = [
flag_group (
expand_if_available = "libraries_to_link.shared_libraries.is_whole_archive",
flags = ["--whole_archive"],
),
flag_group (
flags = ["-l%{libraries_to_link.shared_libraries.name}"],
),
flag_group (
expand_if_available = "libraries_to_link.shared_libraries.is_whole_archive",
flags = ["--no_whole_archive"],
),
],
),
],
)
مرجع CCToolchainConfigInfo
يقدم هذا القسم مرجعًا لمتغيّرات الإصدار وميزاته ومعلومات أخرى مطلوبة لضبط قواعد C++ بنجاح.
متغيرات أداة CCToolchainConfigInfo
في ما يلي مرجع لمتغيّرات الإصدار CcToolchainConfigInfo
.
المتغيّر | الإجراء | الوصف |
source_file
|
تجميع | ملف المصدر المراد تجميعه. |
input_file
|
شريط | قطع العناصر على شكل شريط. |
output_file
|
تجميع | تجميع المحتوى. |
output_assembly_file
|
تجميع | ملف التجميع الصادر. ينطبق ذلك فقط عندما
ينتج عن الإجراء compile نص تجميع، ويتم ذلك عادةً عند استخدام
العلامة --save_temps . المحتوى مماثل للخاصية output_file .
|
output_preprocess_file
|
تجميع | النتائج المُعالَجة مسبقًا. ينطبق فقط على تجميع
الإجراءات التي تعالج الملفات المصدر فقط مسبقًا، وعادةً عند استخدام
العلامة --save_temps . المحتوى مماثل للخاصية output_file .
|
includes
|
تجميع | يجب أن يتضمّن تسلسل الملفات المصدر غير المجمَّع بدون شرط. |
include_paths
|
تجميع | أدلة التسلسل التي يبحث فيها المُجمِّع
عن العناوين المضمّنة باستخدام #include<foo.h>
و#include "foo.h" .
|
quote_include_paths
|
تجميع | يتضمن تسلسل -iquote -
الأدلة التي يبحث فيها المُجمِّع عن العناوين المضمّنة باستخدام
#include "foo.h" .
|
system_include_paths
|
تجميع | يتضمن تسلسل -isystem -
الأدلة التي يبحث فيها المُجمِّع عن العناوين المضمّنة باستخدام
#include <foo.h> .
|
dependency_file
|
تجميع | ملف التبعية .d الذي أنشأه برنامج التجميع.
|
preprocessor_defines
|
تجميع | تسلسل defines ، مثل --DDEBUG
|
pic
|
تجميع | تجميع النتائج في رمز مستقل عن الموضع. |
gcov_gcno_file
|
تجميع | ملف التغطية gcov .
|
per_object_debug_info_file
|
تجميع | ملف معلومات تصحيح الأخطاء لكل كائن (.dwp ).
|
stripotps
|
شريط | تسلسل stripopts .
|
legacy_compile_flags
|
تجميع | تسلسل العلامات من الحقل
CROSSTOOL القديم، مثل compiler_flag
وoptional_compiler_flag وcxx_flag
وoptional_cxx_flag
|
user_compile_flags
|
تجميع | تسلسل العلامات من السمة
للقاعدة copt أو من العلامات --copt
و--cxxopt و--conlyopt
|
unfiltered_compile_flags
|
تجميع | تسلسل العلامات من الحقل
unfiltered_cxx_flag القديم CROSSTOOL أو
الميزة unfiltered_compile_flags لا تتم فلترة هذه العناصر باستخدام
سمة القاعدة nocopts .
|
sysroot
|
sysroot .
|
|
runtime_library_search_directories
|
الرابط | الإدخالات في مسار البحث وقت تشغيل الرابط (عادةً ما يتم ضبطها باستخدام العلامة -rpath ).
|
library_search_directories
|
الرابط | الإدخالات في مسار البحث عن رابط (يتم عادةً ضبطها باستخدام العلامة -L ).
|
libraries_to_link
|
الرابط | العلامات التي توفّر ملفات لربطها كإدخالات في استدعاء الرابط |
def_file_path
|
الرابط | موقع ملف def المستخدم في نظام التشغيل Windows مع MSVC. |
linker_param_file
|
الرابط | موقع ملف رابط الرابط الذي تم إنشاؤه بواسطة bazel للتغلب على الحد الأقصى لطول سطر الأوامر. |
output_execpath
|
الرابط | تنفيذ مخرجات الرابط. |
generate_interface_library
|
الرابط | "yes" أو "no" حسب ما إذا كان يجب إنشاء مكتبة الواجهة أم لا.
|
interface_library_builder_path
|
الرابط | المسار إلى أداة إنشاء مكتبة الواجهة. |
interface_library_input_path
|
الرابط | مُدخلات أداة إنشاء ifso مكتبة المكتبة.
|
interface_library_output_path
|
الرابط | المسار الذي يجب إنشاء مكتبة واجهة فيه باستخدام أداة الإنشاء ifso .
|
legacy_link_flags
|
الرابط | علامات الرابط الواردة من حقول CROSSTOOL القديمة
|
user_link_flags
|
الرابط | علامات الرابط الواردة من السمة --linkopt
أو linkopts
|
linkstamp_paths
|
الرابط | متغير إصدار يمنح مسارات link. |
force_pic
|
الرابط | يشير توفّر هذا المتغيّر إلى أنّه يجب إنشاء رمز PIC/PIE (تم تمرير خيار البازل `--force_pic`). |
strip_debug_symbols
|
الرابط | ويشير توفّر هذا المتغيّر إلى أنه يجب إزالة رموز تصحيح الأخطاء. |
is_cc_test
|
الرابط | موثوق به عندما يكون الإجراء الحالي هو
إجراء ربط cc_test ، أو خطأ، بخلاف ذلك.
|
is_using_fission
|
تجميع، رابط | ويشير توفّر هذا المتغيّر إلى أنه تم تفعيل
الاختراق (معلومات تصحيح الأخطاء لكل عنصر). ستظهر معلومات تصحيح الأخطاء في ملفَين (.dwo ) بدلاً من
.o ملف، ويجب أن يعرف برنامج التجميع والرابط ذلك.
|
fdo_instrument_path
|
تجميع، رابط | المسار إلى الدليل الذي يخزِّن الملف الشخصي لآلة التوقف عن العمل. |
fdo_profile_path
|
تجميع | المسار إلى الملف الشخصي لإدارة الأغذية والدواء |
fdo_prefetch_hints_path
|
تجميع | المسار إلى الملف الشخصي للاسترجاع المسبق لذاكرة التخزين المؤقت. |
csfdo_instrument_path
|
تجميع، رابط | المسار إلى الدليل الذي يخزّن ملف تعريف أداة FDO الحساس للسياق. |
الميزات المعروفة
في ما يلي مرجع للميزات وشروط التفعيل.
الميزة | الوثائق |
opt | dbg | fastbuild
|
يتم تفعيله تلقائيًا استنادًا إلى وضع التجميع. |
static_linking_mode | dynamic_linking_mode
|
ويتم تفعيل هذه الميزة تلقائيًا استنادًا إلى وضع الربط. |
per_object_debug_info
|
يتم تفعيل هذه السياسة إذا تم تحديد الميزة supports_fission وتفعيلها، وسيتم تحديد وضع التجميع الحالي في العلامة --fission .
|
supports_start_end_lib
|
في حال تفعيل السياسة (وضبط الخيار --start_end_lib )، لن يتم ربط Bazel
بالمكتبات الثابتة، بل سيتم استخدام
خيارات الرابط --start-lib/--end-lib لربط العناصر
مباشرةً. وذلك يؤدي إلى تسريع عملية الإنشاء لأنّ Bazel لا يحتاج إلى إنشاء مكتبات ثابتة.
|
supports_interface_shared_libraries
|
إذا تم تفعيل Bazel (وتم ضبط الخيار --interface_shared_objects )، سيتم ربط الأهداف التي تم ضبط linkstatic على
False (cc_test s تلقائيًا) مقابل المكتبات المشتركة
للواجهة. ويساهم ذلك في زيادة سرعة إعادة الربط.
|
supports_dynamic_linker
|
عند التفعيل، ستعرف قواعد C++ أن سلسلة الأدوات يمكنها إنشاء مكتبات مشتركة. |
static_link_cpp_runtimes
|
في حال تفعيل هذه الميزة، سيعمل Bazel على ربط وقت تشغيل C++ بشكل ثابت في وضع الربط الثابت وديناميكيًا في وضع الربط الديناميكي. ستتم إضافة العناصر
المحدّدة في السمة cc_toolchain.static_runtime_lib
أو cc_toolchain.dynamic_runtime_lib (بناءً على وضع الربط) إلى إجراءات الربط.
|
supports_pic
|
في حال تفعيل هذا الإعداد، ستعرف سلسلة الأدوات أن تستخدم كائنات PIC للمكتبات الديناميكية. يكون متغير "الصورة" متاحًا عند الحاجة إلى تجميع مفاتيح PIC. وإذا لم يتم تفعيل الإعداد تلقائيًا، وتم تمرير "--force_pic"، سيطلب تطبيق Bazel إدخال `supports_pic` ويتحقّق من تفعيل الميزة. إذا كانت الميزة غير متوفّرة أو يتعذّر تفعيلها، لا يمكن استخدام "--force_pic". |
static_linking_mode | dynamic_linking_mode
|
ويتم تفعيل هذه الميزة تلقائيًا استنادًا إلى وضع الربط. |
no_legacy_features
|
يمنع Bazel من إضافة الميزات القديمة إلى إعداد C++ عند توفره. يمكنك الاطّلاع على القائمة الكاملة بالميزات. |
منطق تصحيح الميزات القديمة
يطبِّق Bazel التغييرات التالية على ميزات سلسلة الأدوات من أجل التوافق مع الأنظمة القديمة:
- نقل ميزة
legacy_compile_flags
إلى أعلى سلسلة الأدوات - نقل ميزة
default_compile_flags
إلى أعلى سلسلة الأدوات - لإضافة ميزة
dependency_file
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
pic
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
per_object_debug_info
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
preprocessor_defines
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
includes
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
include_paths
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
fdo_instrument
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
fdo_optimize
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
cs_fdo_instrument
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
cs_fdo_optimize
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
fdo_prefetch_hints
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
autofdo
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
build_interface_libraries
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
dynamic_library_linker_tool
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
shared_flag
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
linkstamps
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
output_execpath_flags
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
runtime_library_search_directories
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
library_search_directories
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
archiver_flags
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
libraries_to_link
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
force_pic_flags
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
user_link_flags
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
legacy_link_flags
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
static_libgcc
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
fission_support
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
strip_debug_symbols
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
coverage
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
llvm_coverage_map_format
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
gcc_coverage_map_format
(إذا لم تكن موجودة) إلى أعلى سلسلة الأدوات - لإضافة ميزة
fully_static_link
(إذا لم تكن موجودة) في أسفل سلسلة الأدوات - لإضافة ميزة
user_compile_flags
(إذا لم تكن موجودة) في أسفل سلسلة الأدوات - لإضافة ميزة
sysroot
(إذا لم تكن موجودة) في أسفل سلسلة الأدوات - لإضافة ميزة
unfiltered_compile_flags
(إذا لم تكن موجودة) في أسفل سلسلة الأدوات - لإضافة ميزة
linker_param_file
(إذا لم تكن موجودة) في أسفل سلسلة الأدوات - لإضافة ميزة
compiler_input_flags
(إذا لم تكن موجودة) في أسفل سلسلة الأدوات - لإضافة ميزة
compiler_output_flags
(إذا لم تكن موجودة) في أسفل سلسلة الأدوات
هذه قائمة طويلة بالميزات. وتتمثّل الخطة في التخلص منها بعد الانتهاء من
استخدام أداة Crosslar in Starlark. بالنسبة إلى القارئ المهتم، يُرجى الاطّلاع على عملية التنفيذ في
CppActionConfigs،
وبالنسبة إلى سلاسل أدوات الإنتاج، يمكنك إضافة no_legacy_features
لجعل سلسلة الأدوات أكثر مستقلة.