กฎ
constraint_setting
constraint_setting(name, default_constraint_value, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, tags, testonly, visibility)
กฎนี้ใช้เพื่อแนะนำประเภทข้อจำกัดใหม่ที่แพลตฟอร์มอาจระบุค่า
เช่น คุณอาจกำหนด constraint_setting ที่ชื่อ "glibc_version" เพื่อนำเสนอ
ความสามารถของแพลตฟอร์มในการติดตั้งไลบรารี glibc เวอร์ชันต่างๆ
ดูรายละเอียดเพิ่มเติมได้ที่
หน้าแพลตฟอร์ม
constraint_setting แต่ละรายการมีชุดส่วนขยายที่เกี่ยวข้อง
constraint_value วินาที โดยทั่วไปแล้วเงื่อนไขเหล่านี้จะกำหนดอยู่ในแพ็กเกจเดียวกัน แต่บางครั้ง
แพ็กเกจอื่นจะนำค่าใหม่สำหรับการตั้งค่าที่มีอยู่ ตัวอย่างเช่น
สามารถขยายการตั้งค่า @platforms//cpu:cpu ด้วยค่าที่กำหนดเองเพื่อ
กำหนดแพลตฟอร์มที่กำหนดเป้าหมายสถาปัตยกรรม CPU ที่ไม่ซับซ้อน
อาร์กิวเมนต์
| Attributes | |
|---|---|
name |
ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
default_constraint_value
|
constraint_value ที่ชี้ไปต้องได้รับการกำหนดใน
แพ็กเกจเดียวกับ constraint_setting นี้
หากการตั้งค่าข้อจำกัดมีค่าเริ่มต้น เมื่อใดก็ตามที่แพลตฟอร์มไม่รวม
ค่าจำกัดสำหรับการตั้งค่าดังกล่าวจะเหมือนกับในกรณีที่แพลตฟอร์มระบุพารามิเตอร์
ค่าเริ่มต้น ไม่เช่นนั้น ระบบจะถือว่าการตั้งค่าข้อจำกัดหากไม่มีค่าเริ่มต้น
ไม่ได้กำหนดโดยแพลตฟอร์มนั้น ในกรณีนี้ แพลตฟอร์มจะไม่จับคู่กับ
รายการข้อจำกัด (เช่น สำหรับ |
constraint_value
constraint_value(name, constraint_setting, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, tags, testonly, visibility)
ตัวอย่าง
ข้อมูลต่อไปนี้จะสร้างค่าใหม่ที่เป็นไปได้สำหรับ constraint_value ที่กำหนดไว้ล่วงหน้า
ที่แสดงถึงสถาปัตยกรรม CPU
constraint_value(
name = "mips",
constraint_setting = "@platforms//cpu:cpu",
)
mips เพื่อใช้แทน
x86_64, arm และอื่นๆ
อาร์กิวเมนต์
| Attributes | |
|---|---|
name |
ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
constraint_setting
|
constraint_setting ซึ่ง constraint_value นี้เป็น
ทางเลือกที่เป็นไปได้
|
platform
platform(name, constraint_values, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, parents, remote_execution_properties, tags, testonly, visibility)
กฎนี้กำหนดแพลตฟอร์มใหม่ ซึ่งเป็นคอลเล็กชันที่มีชื่อของตัวเลือกข้อจำกัด (เช่นสถาปัตยกรรม CPU หรือเวอร์ชันคอมไพเลอร์) ซึ่งอธิบายสภาพแวดล้อมใน ส่วนใดของบิลด์ที่สามารถทำงาน ดูรายละเอียดเพิ่มเติมได้ที่ หน้าแพลตฟอร์ม
ตัวอย่าง
แอตทริบิวต์นี้ระบุแพลตฟอร์มที่อธิบายสภาพแวดล้อมที่ใช้งาน Linux บน ARM
platform(
name = "linux_arm",
constraint_values = [
"@platforms//os:linux",
"@platforms//cpu:arm",
],
)
การรับช่วงแพลตฟอร์ม
แพลตฟอร์มอาจใช้แอตทริบิวต์ parents เพื่อระบุแพลตฟอร์มอื่นที่จะ
รับค่าจำกัดมาจาก แม้ว่าแอตทริบิวต์ parents จะใช้รายการ แต่ไม่มี
ปัจจุบันมีการรองรับมากกว่า 1 ค่า และการระบุระดับบนสุดหลายรายการเป็นข้อผิดพลาด
เมื่อตรวจสอบค่าของการตั้งค่าข้อจำกัดในแพลตฟอร์ม ให้ป้อนค่าที่กำหนดไว้โดยตรงก่อน
(ผ่านแอตทริบิวต์ constraint_values) แล้วจึงเลือกค่าจำกัดใน
ผู้ปกครอง การดำเนินการเช่นนี้ต่อเนื่องไปเรื่อยๆ ตามเชนแพลตฟอร์มหลัก ในลักษณะนี้ จึง
ค่าที่กำหนดในแพลตฟอร์มโดยตรงจะลบล้างค่าที่ตั้งไว้ในแพลตฟอร์มหลัก
แพลตฟอร์มจะรับแอตทริบิวต์ exec_properties มาจากแพลตฟอร์มหลัก
รายการพจนานุกรมใน exec_properties ของแพลตฟอร์มหลักและย่อย
จะถูกรวมเข้าด้วยกัน
หากคีย์เดียวกันปรากฏใน exec_properties ของทั้งระดับบนและย่อย
ระบบจะใช้ค่าของรายการย่อย หากแพลตฟอร์มย่อยระบุสตริงว่างเป็นค่าหนึ่ง
ระบบจะยกเลิกการตั้งค่าพร็อพเพอร์ตี้ที่เกี่ยวข้อง
แพลตฟอร์มยังรับค่าแอตทริบิวต์ remote_execution_properties (เลิกใช้งานแล้ว) ได้ด้วย
จากแพลตฟอร์มหลัก หมายเหตุ: รหัสใหม่ควรใช้ exec_properties แทน
ตรรกะที่อธิบายไว้ด้านล่างจะยังคงใช้งานได้กับลักษณะการทำงานเดิม แต่จะถูกนำออก
ในอนาคต
ตรรกะสำหรับการตั้งค่า remote_execution_platform มีดังนี้
คือแพลตฟอร์มหลัก
-
หากไม่ได้ตั้งค่า
remote_execution_propertyในแพลตฟอร์มย่อย ผู้เผยแพร่โฆษณาหลัก ระบบจะใช้remote_execution_properties -
หากมีการตั้งค่า
remote_execution_propertyในแพลตฟอร์มย่อยและมีเมธอด สตริงตรงตัว {PARENT_REMOTE_EXECUTION_PROPERTIES} มาโครดังกล่าวจะเป็น แทนที่ด้วยเนื้อหาของแอตทริบิวต์remote_execution_propertyของระดับบนสุด -
หากมีการตั้งค่า
remote_execution_propertyในแพลตฟอร์มย่อยและไม่มี มาโครดังกล่าว จะใช้remote_execution_propertyของผู้เผยแพร่โฆษณาย่อยโดยไม่มีการเปลี่ยนแปลง
เนื่องจากเราเลิกใช้งาน remote_execution_properties แล้ว และจะทยอยเลิกใช้งาน
remote_execution_properties และ exec_properties คนเดียวกัน
ไม่อนุญาตให้ใช้เชนการรับช่วงค่า
ต้องการใช้ exec_properties แทนคำสั่งที่เลิกใช้งานแล้ว
remote_execution_properties
ตัวอย่าง: จำกัดค่า
platform(
name = "parent",
constraint_values = [
"@platforms//os:linux",
"@platforms//cpu:arm",
],
)
platform(
name = "child_a",
parents = [":parent"],
constraint_values = [
"@platforms//cpu:x86_64",
],
)
platform(
name = "child_b",
parents = [":parent"],
)
ในตัวอย่างนี้ แพลตฟอร์มย่อยจะมีพร็อพเพอร์ตี้ต่อไปนี้
-
child_aมีค่าจำกัด@platforms//os:linux(รับค่ามา จากระดับบนสุด) และ@platforms//cpu:x86_64(ตั้งค่าในแพลตฟอร์มโดยตรง) -
child_bรับค่าข้อจำกัดทั้งหมดจากค่าระดับบนสุด และไม่ได้กำหนดค่าใดๆ ของตัวเอง
ตัวอย่าง: พร็อพเพอร์ตี้การดำเนินการ
platform(
name = "parent",
exec_properties = {
"k1": "v1",
"k2": "v2",
},
)
platform(
name = "child_a",
parents = [":parent"],
)
platform(
name = "child_b",
parents = [":parent"],
exec_properties = {
"k1": "child"
}
)
platform(
name = "child_c",
parents = [":parent"],
exec_properties = {
"k1": ""
}
)
platform(
name = "child_d",
parents = [":parent"],
exec_properties = {
"k3": "v3"
}
)
ในตัวอย่างนี้ แพลตฟอร์มย่อยจะมีพร็อพเพอร์ตี้ต่อไปนี้
-
child_aรับค่า "exec_properties" ของผู้เผยแพร่โฆษณาหลักและไม่ได้ตั้งค่าของตนเอง -
child_bจะรับค่าexec_propertiesของระดับบนสุดและลบล้าง เป็นk1exec_propertiesจะ{ "k1": "child", "k2": "v2" } -
child_cจะรับค่าexec_propertiesของระดับบนสุดและยกเลิกการตั้งค่าk1exec_propertiesจะ{ "k2": "v2" } -
child_dจะได้รับexec_propertiesของระดับบนสุดและเพิ่มexec_propertiesจะ{ "k1": "v1", "k2": "v2", "k3": "v3" }
อาร์กิวเมนต์
| Attributes | |
|---|---|
name |
ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
constraint_values
|
|
exec_properties
|
exec_properties ของแพลตฟอร์มหลัก
หากแพลตฟอร์มย่อยและแพลตฟอร์มหลักกำหนดคีย์เดียวกัน ค่าของรายการย่อยจะยังคงอยู่ ช่วง
ระบบจะนำคีย์ที่เชื่อมโยงกับค่าที่เป็นสตริงว่างเปล่าออกจากพจนานุกรม
แอตทริบิวต์นี้ใช้แทนแอตทริบิวต์ที่เลิกใช้งานแล้วได้อย่างเต็มรูปแบบ
remote_execution_properties
|
parents
|
platform ที่แพลตฟอร์มนี้ควรรับค่ามา แม้ว่า
แอตทริบิวต์ใช้รายการ ไม่ควรมีแพลตฟอร์มมากกว่าหนึ่งแพลตฟอร์ม ช่วง
ค่าจำกัด _settings ที่ไม่ได้ตั้งค่าโดยตรงบนแพลตฟอร์มนี้จะอยู่ในแพลตฟอร์มหลัก
ดูรายละเอียดได้ในส่วนการรับช่วงแพลตฟอร์ม
|
remote_execution_properties
|
|
Toolchain
toolchain(name, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, tags, target_compatible_with, target_settings, testonly, toolchain, toolchain_type, visibility)
กฎนี้ประกาศประเภทและข้อจํากัดของ Toolchain ที่เจาะจงเพื่อให้เลือกได้ ระหว่างการแปลง Toolchain โปรดดู หน้า Toolchains สำหรับข้อมูลเพิ่มเติม รายละเอียด
อาร์กิวเมนต์
| Attributes | |
|---|---|
name |
ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
exec_compatible_with
|
constraint_value ที่แพลตฟอร์มการดำเนินการใน
เพื่อให้เลือกเครื่องมือเชนนี้สำหรับการสร้างเป้าหมายบนแพลตฟอร์มดังกล่าว
|
target_compatible_with
|
constraint_value ที่แพลตฟอร์มเป้าหมายใน
เพื่อให้เลือกเครื่องมือเชนนี้สำหรับการสร้างเป้าหมายสำหรับแพลตฟอร์มดังกล่าว
|
target_settings
|
config_setting ที่การกำหนดค่าเป้าหมายต้องปฏิบัติตาม
เพื่อให้เลือก Toolchain นี้ระหว่างการแปลง Toolchain
|
toolchain
|
|
toolchain_type
|
toolchain_type ที่แสดงถึงบทบาทที่เรียกใช้
Toolchain ให้บริการ
|
toolchain_type
toolchain_type(name, compatible_with, deprecation, features, restricted_to, tags, target_compatible_with, testonly, visibility)
กฎนี้จะกำหนด Toolchain ประเภทใหม่ ซึ่งเป็นเป้าหมายง่ายๆ ที่แสดงถึงคลาสของเครื่องมือ ทำหน้าที่เดียวกันในแต่ละแพลตฟอร์ม
ดูรายละเอียดเพิ่มเติมได้ที่หน้า Toolchains
ตัวอย่าง
แอตทริบิวต์นี้กำหนดประเภท Toolchain สำหรับกฎที่กำหนดเอง
toolchain_type(
name = "bar_toolchain_type",
)
สามารถใช้ในไฟล์ bzl
bar_binary = rule(
implementation = _bar_binary_impl,
attrs = {
"srcs": attr.label_list(allow_files = True),
...
# No `_compiler` attribute anymore.
},
toolchains = ["//bar_tools:toolchain_type"]
)
อาร์กิวเมนต์
| Attributes | |
|---|---|
name |
ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |