ชุดกฎเหล่านี้มีไว้เพื่อช่วยให้คุณจําลองแพลตฟอร์มฮาร์ดแวร์ที่เฉพาะเจาะจงที่คุณกําลังสร้าง และระบุเครื่องมือเฉพาะที่อาจต้องรวบรวมโค้ดสําหรับแพลตฟอร์มเหล่านั้น ผู้ใช้ควรทําความคุ้นเคยกับแนวคิดที่อธิบายไว้ที่นี่
กฎ
การตั้งค่าที่จํากัด
ดูแหล่งที่มาของกฎconstraint_setting(name, default_constraint_value, deprecation, distribs, features, licenses, tags, testonly, visibility)
กฎนี้ใช้เพื่อเริ่มใช้ข้อจํากัดประเภทใหม่ ซึ่งแพลตฟอร์มอาจระบุค่า
เช่น คุณอาจกําหนด constraint_setting
ที่ชื่อ "glibc_version" เพื่อแสดงความสามารถของแพลตฟอร์มที่จะติดตั้งไลบรารี glibc เวอร์ชันต่างๆ
ดูรายละเอียดเพิ่มเติมได้ที่หน้าแพลตฟอร์ม
constraint_setting
แต่ละรายการมีชุด constraint_value
ที่เชื่อมโยงได้ง่าย โดยปกติแล้วค่าเหล่านี้จะอยู่ในแพ็กเกจเดียวกัน แต่บางครั้งแพ็กเกจอื่นจะแนะนําค่าใหม่สําหรับการตั้งค่าที่มีอยู่ เช่น การตั้งค่า @platforms//cpu:cpu
ที่กําหนดไว้ล่วงหน้าจะขยายได้ด้วยค่าที่กําหนดเองเพื่อกําหนดแพลตฟอร์มที่กําหนดเป้าหมายสถาปัตยกรรม CPU ที่ไม่ชัดเจน
อาร์กิวเมนต์
แอตทริบิวต์ | |
---|---|
name |
ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้ |
default_constraint_value
|
constraint_value จะต้องกําหนดในแพ็กเกจเดียวกับ constraint_setting นี้
หากการตั้งค่าข้อจํากัดมีค่าเริ่มต้นไว้ เมื่อใดก็ตามที่แพลตฟอร์มใดไม่มีค่าข้อจํากัดสําหรับการตั้งค่านั้น จะเหมือนกับว่าแพลตฟอร์มได้ระบุค่าเริ่มต้นไว้ มิเช่นนั้น หากไม่มีค่าเริ่มต้น แพลตฟอร์มนั้นจะถือว่าการตั้งค่าข้อจํากัดไม่ได้ระบุ ในกรณีนี้ แพลตฟอร์มจะไม่จับคู่กับรายการข้อจํากัด (เช่น สําหรับ |
ค่าที่จํากัด
ดูแหล่งที่มาของกฎconstraint_value(name, constraint_setting, deprecation, distribs, features, licenses, tags, testonly, visibility)กฎนี้จะแนะนําค่าใหม่สําหรับประเภทข้อจํากัดที่ระบุ ดูรายละเอียดเพิ่มเติมได้ที่หน้าแพลตฟอร์ม
ตัวอย่าง
ค่าต่อไปนี้จะสร้างค่าใหม่ที่เป็นไปได้สําหรับ constraint_value
ที่แสดงถึงสถาปัตยกรรม CPU ที่กําหนดไว้ล่วงหน้า
constraint_value( name = "mips", constraint_setting = "@platforms//cpu:cpu", )แพลตฟอร์มจะประกาศว่ามีสถาปัตยกรรม
mips
เป็นทางเลือกสําหรับ
x86_64
, arm
และอื่นๆ ได้
อาร์กิวเมนต์
แอตทริบิวต์ | |
---|---|
name |
ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้ |
constraint_setting
|
constraint_setting ที่ constraint_value นี้เป็นตัวเลือกที่เป็นไปได้
|
platform
ดูแหล่งที่มาของกฎplatform(name, constraint_values, deprecation, distribs, 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_properities" ของระดับบนสุดและไม่ได้ตั้งค่าเอง -
child_b
จะรับช่วงexec_properties
ระดับบนสุดและลบล้างค่าของk1
ค่าของexec_properties
จะเป็น:{ "k1": "child", "k2": "v2" }
-
child_c
จะรับช่วงexec_properties
มาจากระดับบนสุดและจะยกเลิกการตั้งค่าk1
ค่าของexec_properties
จะเป็น:{ "k2": "v2" }
-
child_d
จะรับช่วงexec_properties
ระดับบนและเพิ่มพร็อพเพอร์ตี้ใหม่ ค่าของexec_properties
จะเป็น:{ "k1": "v1", "k2": "v2", "k3": "v3" }
อาร์กิวเมนต์
แอตทริบิวต์ | |
---|---|
name |
ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้ |
constraint_values
|
|
exec_properties
|
exec_properties ของแพลตฟอร์มหลัก
หากแพลตฟอร์มย่อยและแพลตฟอร์มหลักกําหนดคีย์เดียวกัน ระบบจะเก็บค่าของผู้เผยแพร่โฆษณาย่อย ระบบจะนําคีย์ที่เชื่อมโยงกับค่าที่เป็นสตริงว่างออกจากพจนานุกรม
แอตทริบิวต์นี้จะเป็นการแทนที่ remote_execution_properties ที่เลิกใช้งานไปแล้ว
|
parents
|
platform ที่แพลตฟอร์มนี้ควรรับช่วงมา แม้ว่าแอตทริบิวต์จะแสดงรายการ แต่ไม่ควรมีแพลตฟอร์มมากกว่า 1 รายการ คุณจะเห็นข้อจํากัดที่ไม่ได้ตั้งค่าบนแพลตฟอร์มนี้โดยตรงในแพลตฟอร์มหลัก
โปรดดูรายละเอียดที่ส่วนการรับช่วงแพลตฟอร์ม
|
remote_execution_properties
|
|
Toolchain
ดูแหล่งที่มาของกฎtoolchain(name, deprecation, distribs, exec_compatible_with, features, licenses, tags, target_compatible_with, target_settings, testonly, toolchain, toolchain_type, visibility)
กฎนี้จะประกาศประเภทและข้อจํากัดของเชนเครื่องมือที่เจาะจงเพื่อให้เลือกได้ในระหว่างการแก้ปัญหารูปเครื่องมือ ดูรายละเอียดเพิ่มเติมได้ในหน้า Toolchains
อาร์กิวเมนต์
แอตทริบิวต์ | |
---|---|
name |
ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้ |
exec_compatible_with
|
constraint_value ที่ต้องดําเนินการโดยแพลตฟอร์มการดําเนินการเพื่อให้เลือกเครื่องมือเชนนี้สําหรับอาคารเป้าหมายในแพลตฟอร์มนั้น
|
target_compatible_with
|
constraint_value ที่ต้องทําตามโดยแพลตฟอร์มเป้าหมายเพื่อให้ระบบเลือกเครื่องมือเครื่องมือนี้เป็นอาคารเป้าหมายสําหรับแพลตฟอร์มนั้น
|
target_settings
|
config_setting ที่ต้องเป็นไปตามการกําหนดค่าเป้าหมายเพื่อให้ระบบเลือกเครื่องมือเชนนี้ในระหว่างการแก้ปัญหาของเครื่องมือเชน
|
toolchain
|
|
toolchain_type
|
toolchain_type ที่แสดงถึงบทบาทที่เครื่องมือเชนนี้แสดง
|
ประเภทเครื่องมือเชน
ดูแหล่งที่มาของกฎtoolchain_type(name, compatible_with, deprecation, features, restricted_to, tags, target_compatible_with, testonly, visibility)
กฎนี้จะกําหนดเครื่องมือประเภทใหม่ ซึ่งเป็นเป้าหมายง่ายๆ ที่แสดงถึงคลาสของเครื่องมือที่มีบทบาทเดียวกันสําหรับแพลตฟอร์มต่างๆ
ดูรายละเอียดเพิ่มเติมได้ที่หน้า Toolchains
ตัวอย่าง
ข้อมูลนี้จะเป็นตัวกําหนดประเภทของเครื่องมือเชนสําหรับกฎที่กําหนดเอง
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"] )
อาร์กิวเมนต์
แอตทริบิวต์ | |
---|---|
name |
ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้ |