ชุดกฎนี้มีไว้เพื่อให้คุณจำลองแพลตฟอร์มฮาร์ดแวร์เฉพาะที่คุณกำลังสร้าง และระบุเครื่องมือเฉพาะที่คุณอาจต้องใช้เพื่อคอมไพล์โค้ดสำหรับแพลตฟอร์มเหล่านั้น ผู้ใช้ควรคุ้นเคยกับแนวคิดที่อธิบายที่นี่
กฎ
constraint_setting
ดูแหล่งที่มาของกฎ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 ที่ไม่ชัดเจน
อาร์กิวเมนต์
Attributes | |
---|---|
name |
ชื่อ ต้องระบุ ชื่อที่ไม่ซ้ำกันสําหรับเป้าหมายนี้ |
default_constraint_value
|
ชื่อ nonconfigurable ค่าเริ่มต้นคือ constraint_value ที่ชี้ไปต้องได้รับการกำหนดไว้ในแพ็กเกจเดียวกับ constraint_setting นี้
หากการตั้งค่าข้อจำกัดมีค่าเริ่มต้น เมื่อใดก็ตามที่แพลตฟอร์มไม่ได้ระบุค่าข้อจำกัดสำหรับการตั้งค่านั้น การตั้งค่านั้นจะเหมือนกับว่าแพลตฟอร์มได้ระบุค่าเริ่มต้นไว้ หรือหากไม่มีค่าเริ่มต้น ระบบจะถือว่าแพลตฟอร์มนั้นไม่ได้ระบุการตั้งค่าข้อจำกัด ในกรณีนี้ แพลตฟอร์มจะไม่จับคู่กับรายการข้อจำกัดใดๆ (เช่น สำหรับ |
constraint_value
ดูแหล่งที่มาของกฎ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
และอื่นๆ
อาร์กิวเมนต์
Attributes | |
---|---|
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
จะรับรายการ แต่ปัจจุบันระบบรองรับเพียงค่าเดียวเท่านั้น และการกำหนดรายการหลักหลายรายการจะเป็นข้อผิดพลาด
เมื่อตรวจสอบค่าของการตั้งค่าข้อจำกัดในแพลตฟอร์ม ระบบจะตรวจสอบค่าที่ตั้งโดยตรง (ผ่านแอตทริบิวต์ 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
ของรายการหลักและลบล้างค่าของ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" }
อาร์กิวเมนต์
Attributes | |
---|---|
name |
ชื่อ ต้องระบุ ชื่อที่ไม่ซ้ำกันสําหรับเป้าหมายนี้ |
constraint_values
|
รายการป้ายกำกับ nonconfigurable ค่าเริ่มต้นคือ
|
exec_properties
|
พจนานุกรม: สตริง -> สตริง nonconfigurable ค่าเริ่มต้นคือ exec_properties ของแพลตฟอร์มหลัก
หากแพลตฟอร์มย่อยและแพลตฟอร์มหลักกำหนดคีย์เดียวกัน ระบบจะเก็บค่าของแพลตฟอร์มย่อยไว้ ระบบจะนำคีย์ทั้งหมดที่เชื่อมโยงกับค่าที่เป็นสตริงว่างออกจากพจนานุกรม
แอตทริบิวต์นี้มาแทนที่remote_execution_properties ที่เลิกใช้งานอย่างสมบูรณ์
|
parents
|
รายการป้ายกำกับ nonconfigurable ค่าเริ่มต้นคือ platform ที่แพลตฟอร์มนี้ควรรับค่ามา แม้ว่าแอตทริบิวต์จะใช้ลิสต์รายการ แต่ไม่ควรมีแพลตฟอร์มมากกว่า 1 แพลตฟอร์ม คุณจะดู constraint_settings ที่ไม่ได้ตั้งค่าในแพลตฟอร์มนี้โดยตรงได้ในแพลตฟอร์มหลัก
ดูรายละเอียดได้ที่ส่วนการสืบทอดแพลตฟอร์ม
|
remote_execution_properties
|
สตริง ไม่สามารถกําหนดค่าได้ ค่าเริ่มต้นคือ |
Toolchain
ดูแหล่งที่มาของกฎtoolchain(name, deprecation, distribs, exec_compatible_with, features, licenses, tags, target_compatible_with, target_settings, testonly, toolchain, toolchain_type, visibility)
กฎนี้จะประกาศประเภทและข้อจำกัดของเครื่องมือทางเทคนิคที่เฉพาะเจาะจงเพื่อให้เลือกได้ในระหว่างการแก้ไขเครื่องมือทางเทคนิค ดูรายละเอียดเพิ่มเติมได้ในหน้าชุดเครื่องมือ
อาร์กิวเมนต์
Attributes | |
---|---|
name |
ชื่อ ต้องระบุ ชื่อที่ไม่ซ้ำกันสําหรับเป้าหมายนี้ |
exec_compatible_with
|
รายการป้ายกำกับ nonconfigurable ค่าเริ่มต้นคือ constraint_value ที่แพลตฟอร์มการดําเนินการต้องมีคุณสมบัติตรงตามเพื่อให้ระบบเลือกชุดเครื่องมือนี้สําหรับการสร้างเป้าหมายบนแพลตฟอร์มนั้นได้
|
target_compatible_with
|
รายการป้ายกํากับ ไม่สามารถกําหนดค่าได้ ค่าเริ่มต้นคือ constraint_value ที่แพลตฟอร์มเป้าหมายต้องมีคุณสมบัติตรงตามเพื่อให้ระบบเลือกเครื่องมือนี้สำหรับการสร้างเป้าหมายสำหรับแพลตฟอร์มนั้น
|
target_settings
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ config_setting ที่กำหนดค่าเป้าหมายต้องเป็นไปตามข้อกำหนดเพื่อให้ระบบเลือกเครื่องมือนี้ระหว่างการแก้ไขเครื่องมือ
|
toolchain
|
ชื่อ ต้องระบุ เป้าหมายที่แสดงถึงเครื่องมือหรือชุดเครื่องมือจริงที่ใช้ได้เมื่อเลือกเครื่องมือนี้ |
toolchain_type
|
ป้ายกำกับ ไม่สามารถกำหนดค่าได้ ต้องระบุ ป้ายกํากับของเป้าหมายtoolchain_type ที่แสดงถึงบทบาทที่เครื่องมือนี้ทํา
|
toolchain_type
ดูแหล่งที่มาของกฎtoolchain_type(name, compatible_with, deprecation, features, restricted_to, tags, target_compatible_with, testonly, visibility)
กฎนี้จะกําหนดเครื่องมือทํางานประเภทใหม่ ซึ่งเป็นเป้าหมายแบบง่ายที่แสดงถึงคลาสของเครื่องมือที่ทําหน้าเดียวกันสําหรับแพลตฟอร์มต่างๆ
ดูรายละเอียดเพิ่มเติมได้ที่หน้า 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 |
ชื่อ ต้องระบุ ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |