Bazel มีการรองรับที่ซับซ้อนสำหรับการสร้างโมเดลแพลตฟอร์มและชุดเครื่องมือ การผสานรวมนี้กับโปรเจ็กต์จริงต้องอาศัย ความร่วมมืออย่างรอบคอบระหว่างเจ้าของโค้ด ผู้ดูแลกฎ และนักพัฒนา Bazel หลัก
หน้านี้จะสรุปวัตถุประสงค์ของแพลตฟอร์มและแสดงวิธีสร้างด้วยแพลตฟอร์ม
สรุป: API ของแพลตฟอร์มและ Toolchain ของ Bazel พร้อมใช้งานแล้ว แต่จะยังไม่ทำงาน
ในทุกที่จนกว่าจะมีการอัปเดตกฎภาษา select()
s และการอ้างอิงเดิมอื่นๆ ทั้งหมด
ซึ่งเป็นขั้นตอนที่ต้องดำเนินการอยู่เรื่อยๆ ในที่สุดแล้ว บิลด์ทั้งหมดจะอิงตามแพลตฟอร์ม
โปรดอ่านข้อมูลด้านล่างเพื่อดูว่าบิลด์ของคุณเหมาะกับแพ็กเกจใด
ดูเอกสารประกอบที่เป็นทางการเพิ่มเติมได้ที่
ฉากหลัง
เราได้เปิดตัวแพลตฟอร์มและเชนเครื่องมือเพื่อกำหนดมาตรฐานวิธีที่โปรเจ็กต์ซอฟต์แวร์ กำหนดเป้าหมายไปยังเครื่องต่างๆ และสร้างด้วยเครื่องมือภาษาที่เหมาะสม
ซึ่งเป็นฟีเจอร์ที่เพิ่งเพิ่มเข้ามาใน Bazel โดยได้รับแรงบันดาลใจจากข้อสังเกตที่ว่าผู้ดูแลภาษาทำสิ่งนี้อยู่แล้วในลักษณะเฉพาะกิจที่ไม่เข้ากัน เช่น กฎ C++ ใช้ --cpu
และ --crosstool_top
เพื่อตั้งค่า CPU เป้าหมายและเครื่องมือ C++ ของการบิลด์ ทั้งสองอย่างนี้ไม่ได้สร้างโมเดล "แพลตฟอร์ม" อย่างถูกต้อง ความพยายามในอดีตที่จะทำเช่นนั้นทำให้เกิดการสร้างที่น่าอึดอัดและไม่ถูกต้อง
นอกจากนี้ แฟล็กเหล่านี้ยังไม่ควบคุมการคอมไพล์ Java ซึ่งพัฒนาอินเทอร์เฟซอิสระของตัวเองด้วย --java_toolchain
Bazel ออกแบบมาสำหรับโปรเจ็กต์ขนาดใหญ่ที่มีหลายภาษาและหลายแพลตฟอร์ม ซึ่งต้องมีการสนับสนุนแนวคิดเหล่านี้อย่างมีหลักการมากขึ้น รวมถึง API ที่ชัดเจนซึ่ง ส่งเสริมการทำงานร่วมกันของภาษาและโปรเจ็กต์ API ใหม่เหล่านี้มีไว้เพื่อจุดประสงค์นี้
การย้ายข้อมูล
API ของแพลตฟอร์มและชุดเครื่องมือจะทำงานได้ก็ต่อเมื่อโปรเจ็กต์ใช้งานจริงเท่านั้น ซึ่งเป็นเรื่องที่ต้องพิจารณาอย่างรอบคอบเนื่องจากตรรกะของกฎในโปรเจ็กต์ เชนเครื่องมือ การอ้างอิง และselect()
ต้องรองรับ ซึ่งต้องใช้ลำดับการย้ายข้อมูลอย่างรอบคอบ
เพื่อให้โปรเจ็กต์ทั้งหมดและการอ้างอิงของโปรเจ็กต์ทำงานได้อย่างถูกต้อง
ตัวอย่างเช่น กฎ C++ ของ Bazel รองรับแพลตฟอร์ม แต่กฎของ Apple ไม่ได้เป็นเช่นนั้น โปรเจ็กต์ C++ อาจไม่สนใจ Apple แต่บางแพลตฟอร์มอาจทำได้ ดังนั้น จึงยังไม่ปลอดภัยที่จะเปิดใช้แพลตฟอร์มทั่วโลกสำหรับการสร้าง C++ ทั้งหมด
ส่วนที่เหลือของหน้านี้จะอธิบายลำดับการย้ายข้อมูลนี้ รวมถึงวิธีและเวลาที่โปรเจ็กต์ของคุณจะสามารถดำเนินการได้
เป้าหมาย
การย้ายข้อมูลแพลตฟอร์มของ Bazel จะเสร็จสมบูรณ์เมื่อโปรเจ็กต์ทั้งหมดสร้างด้วยรูปแบบต่อไปนี้
bazel build //:myproject --platforms=//:myplatform
ซึ่งหมายความว่า
- กฎที่โปรเจ็กต์ใช้สามารถอนุมาน Toolchain ที่ถูกต้องจาก
//:myplatform
- กฎที่การขึ้นต่อกันของโปรเจ็กต์ใช้จะอนุมาน Toolchain ที่ถูกต้องได้
จาก
//:myplatform
- ไม่ว่าโปรเจ็กต์ที่ขึ้นอยู่กับโปรเจ็กต์ของคุณจะรองรับ
//:myplatform
หรือโปรเจ็กต์ของคุณจะรองรับ API เดิม (เช่น--crosstool_top
) //:myplatform
references [common declarations][Common Platform Declaration]{: .external} ofCPU
,OS
, and other generic concepts that support automatic cross-project compatibility.- โปรเจ็กต์ที่เกี่ยวข้องทั้งหมด
select()
เข้าใจพร็อพเพอร์ตี้ของเครื่องที่//:myplatform
ระบุ //:myplatform
มีการกำหนดไว้ในที่ที่ชัดเจนและนำกลับมาใช้ใหม่ได้ นั่นคือ ใน ที่เก็บของโปรเจ็กต์หากแพลตฟอร์มนั้นเป็นของโปรเจ็กต์ของคุณโดยเฉพาะ หรือในที่ที่โปรเจ็กต์ทั้งหมด ที่อาจใช้แพลตฟอร์มนี้ค้นหาได้
เราจะนำ API เวอร์ชันเก่าออกทันทีที่บรรลุเป้าหมายนี้ จากนั้นวิธีนี้จะเป็นวิธีมาตรฐานที่โปรเจ็กต์เลือกแพลตฟอร์มและเชนเครื่องมือ
ฉันควรใช้แพลตฟอร์มไหม
หากต้องการเพียงแค่สร้างหรือคอมไพล์ข้ามโปรเจ็กต์ คุณควรทำตาม เอกสารประกอบอย่างเป็นทางการของโปรเจ็กต์
หากคุณเป็นผู้ดูแลโปรเจ็กต์ ภาษา หรือเครื่องมือ คุณจะต้องรองรับ API ใหม่ในที่สุด คุณจะรอจนกว่าการย้ายข้อมูลทั่วโลกจะเสร็จสมบูรณ์ หรือเลือกใช้ก่อนก็ได้ ทั้งนี้ขึ้นอยู่กับความต้องการด้านมูลค่า / ต้นทุนของคุณ
ค่า
- คุณสามารถ
select()
หรือเลือก Toolchain ในพร็อพเพอร์ตี้ที่ต้องการแทนที่จะใช้แฟล็กที่ฮาร์ดโค้ด เช่น--cpu
เช่น CPU หลายตัว สามารถรองรับชุดคำสั่งเดียวกันได้ - การสร้างที่ถูกต้องมากขึ้น หากคุณ
select()
ด้วย--cpu
ในตัวอย่างข้างต้น จากนั้น เพิ่ม CPU ใหม่ที่รองรับชุดคำสั่งเดียวกันselect()
จะจดจำ CPU ใหม่ไม่ได้ แต่select()
บนแพลตฟอร์มจะยังคงถูกต้อง - ประสบการณ์ของผู้ใช้ที่ง่ายขึ้น โปรเจ็กต์ทั้งหมดเข้าใจข้อกำหนดต่อไปนี้
--platforms=//:myplatform
ไม่จำเป็นต้องใช้แฟล็กเฉพาะภาษาหลายรายการ ในบรรทัดคำสั่ง - การออกแบบภาษาที่เรียบง่ายขึ้น ทุกภาษาใช้ API ร่วมกันในการกำหนด เครื่องมือทางเทคนิค การใช้เครื่องมือทางเทคนิค และการเลือกเครื่องมือทางเทคนิคที่เหมาะสมสำหรับแพลตฟอร์ม
- คุณข้ามเป้าหมายได้ใน ระยะการสร้างและการทดสอบหากเป้าหมายไม่เข้ากันกับแพลตฟอร์มเป้าหมาย
ค่าใช้จ่าย
- โปรเจ็กต์ที่ขึ้นต่อกันซึ่งยังไม่รองรับแพลตฟอร์มอาจไม่ทำงานร่วมกับโปรเจ็กต์ของคุณโดยอัตโนมัติ
- การทำให้ฟีเจอร์เหล่านี้ทำงานอาจต้องการบำรุงรักษาชั่วคราวเพิ่มเติม
- การใช้ API ใหม่และ API เดิมร่วมกันต้องมีคำแนะนำสำหรับผู้ใช้ที่รอบคอบมากขึ้นเพื่อ หลีกเลี่ยงความสับสน
- คำจำกัดความที่แน่นอนสำหรับพร็อพเพอร์ตี้ทั่วไป เช่น
OS
และCPU
ยังคงมีการพัฒนาอยู่ และอาจต้องมีการมีส่วนร่วมเพิ่มเติมในตอนแรก - คำจำกัดความที่แน่นอนสำหรับเครื่องมือเฉพาะภาษาจะยังคงมีการพัฒนาต่อไปและ อาจต้องมีการมีส่วนร่วมเพิ่มเติมในตอนแรก
การตรวจสอบ API
platform
คือคอลเล็กชันของconstraint_value
เป้าหมาย
platform(
name = "myplatform",
constraint_values = [
"@platforms//os:linux",
"@platforms//cpu:arm",
],
)
constraint_value
คือพร็อพเพอร์ตี้ของเครื่อง ระบบจะจัดกลุ่มค่าที่มี "ประเภท" เดียวกันไว้ภายใต้constraint_setting
ทั่วไป ดังนี้
constraint_setting(name = "os")
constraint_value(
name = "linux",
constraint_setting = ":os",
)
constraint_value(
name = "mac",
constraint_setting = ":os",
)
toolchain
คือกฎ Starlark แอตทริบิวต์ของ
ประกาศเครื่องมือของภาษา (เช่น compiler =
"//mytoolchain:custom_gcc"
) ส่วนผู้ให้บริการจะส่ง
ข้อมูลนี้ไปยังกฎที่ต้องสร้างด้วยเครื่องมือเหล่านี้
Toolchain จะประกาศ constraint_value
ของเครื่องที่สามารถ
กำหนดเป้าหมาย
(target_compatible_with = ["@platforms//os:linux"]
) และเครื่องที่เครื่องมือสามารถ
เรียกใช้
(exec_compatible_with = ["@platforms//os:mac"]
)
เมื่อสร้าง $ bazel build //:myproject --platforms=//:myplatform
, Bazel
จะเลือก Toolchain ที่สามารถเรียกใช้ในเครื่องบิลด์และ
สร้างไบนารีสำหรับ //:myplatform
โดยอัตโนมัติ การดำเนินการนี้เรียกว่าการแก้ปัญหา Toolchain
คุณสามารถลงทะเบียนชุดเครื่องมือที่ใช้ได้ใน WORKSPACE
ด้วย
register_toolchains
หรือใน
บรรทัดคำสั่งด้วย --extra_toolchains
ดูข้อมูลเพิ่มเติมที่นี่
สถานะ
การรองรับแพลตฟอร์มในปัจจุบันจะแตกต่างกันไปในแต่ละภาษา กฎหลักทั้งหมดของ Bazel กำลังย้ายไปใช้แพลตฟอร์ม แต่กระบวนการนี้จะใช้เวลาสักระยะ ซึ่งมีสาเหตุหลัก 3 ประการ ดังนี้
ต้องอัปเดตตรรกะของกฎเพื่อรับข้อมูลเครื่องมือจาก toolchain API ใหม่ (
ctx.toolchains
) และหยุดอ่านการตั้งค่าเดิม เช่น--cpu
และ--crosstool_top
ซึ่งค่อนข้างตรงไปตรงมาผู้ดูแลเครื่องมือต้องกำหนด Toolchain และทำให้ผู้ใช้เข้าถึงได้ (ในที่เก็บ GitHub และรายการ
WORKSPACE
) แม้ว่าในทางเทคนิคแล้วจะตรงไปตรงมา แต่ก็ต้องจัดระเบียบอย่างชาญฉลาดเพื่อ รักษาประสบการณ์ของผู้ใช้ให้ง่ายนอกจากนี้ คุณยังต้องมีคำจำกัดความของแพลตฟอร์มด้วย (เว้นแต่คุณจะสร้างสำหรับเครื่องเดียวกับที่ Bazel ทำงาน) โดยทั่วไปแล้ว โปรเจ็กต์ควรกำหนดแพลตฟอร์มของตนเอง
คุณต้องย้ายข้อมูลโปรเจ็กต์ที่มีอยู่
select()
และการเปลี่ยนรุ่นด้วย นี่เป็นความท้าทายที่ยิ่งใหญ่ที่สุด โดยเฉพาะอย่างยิ่งสำหรับโปรเจ็กต์หลายภาษา (ซึ่งอาจล้มเหลวหากทุกภาษาอ่าน--platforms
ไม่ได้)
หากออกแบบชุดกฎใหม่ คุณต้องรองรับแพลตฟอร์มตั้งแต่ เริ่มต้น ซึ่งจะทำให้กฎของคุณใช้งานร่วมกับกฎและโปรเจ็กต์อื่นๆ ได้โดยอัตโนมัติ และจะมีประโยชน์มากขึ้นเมื่อ API ของแพลตฟอร์มแพร่หลายมากขึ้น
พร็อพเพอร์ตี้แพลตฟอร์มทั่วไป
พร็อพเพอร์ตี้แพลตฟอร์ม เช่น OS
และ CPU
ที่ใช้ร่วมกันในหลายโปรเจ็กต์ควร
ประกาศไว้ในที่เดียวที่เป็นมาตรฐานและส่วนกลาง ซึ่งจะช่วยส่งเสริมความเข้ากันได้ข้ามโปรเจ็กต์
และข้ามภาษา
เช่น หาก MyApp มี select()
ใน constraint_value
@myapp//cpus:arm
และ SomeCommonLib มี select()
ใน
@commonlib//constraints:arm
ทริกเกอร์เหล่านี้จะเปิดโหมด "arm" ที่มีเกณฑ์
ที่ไม่เข้ากัน
พร็อพเพอร์ตี้ที่ใช้กันทั่วไปทั่วโลกจะประกาศในที่เก็บ @platforms
(ดังนั้นป้ายกำกับ Canonical สำหรับตัวอย่างข้างต้นคือ @platforms//cpu:arm
)
ส่วนพร็อพเพอร์ตี้ที่ใช้กันทั่วไปในภาษาต่างๆ ควรประกาศในที่เก็บของภาษาที่เกี่ยวข้อง
แพลตฟอร์มเริ่มต้น
โดยทั่วไปแล้ว เจ้าของโปรเจ็กต์ควรกำหนดแพลตฟอร์มที่ชัดเจนเพื่ออธิบาย
ประเภทของเครื่องที่ต้องการสร้าง จากนั้นจะทริกเกอร์ด้วย
--platforms
เมื่อไม่ได้ตั้งค่า --platforms
Bazel จะใช้ค่าเริ่มต้นเป็น platform
ซึ่งแสดงถึง
เครื่องบิลด์ในเครื่อง ระบบจะสร้างโดยอัตโนมัติที่ @local_config_platform//:host
จึงไม่จำเป็นต้องกำหนดอย่างชัดเจน โดยจะแมป OS
และ CPU
ของเครื่องในพื้นที่กับ constraint_value
ที่ประกาศไว้ใน
@platforms
C++
กฎ C++ ของ Bazel ใช้แพลตฟอร์มเพื่อเลือก Toolchain เมื่อคุณตั้งค่า
--incompatible_enable_cc_toolchain_resolution
(#7260)
ซึ่งหมายความว่าคุณสามารถกำหนดค่าโปรเจ็กต์ C++ ด้วยสิ่งต่อไปนี้ได้
bazel build //:my_cpp_project --platforms=//:myplatform
แทนที่จะเป็นรุ่นเดิม
bazel build //:my_cpp_project` --cpu=... --crosstool_top=... --compiler=...
หากโปรเจ็กต์ของคุณเป็น C++ ล้วนๆ และไม่ได้ขึ้นอยู่กับโปรเจ็กต์ที่ไม่ใช่ C++ คุณจะใช้
แพลตฟอร์มได้อย่างปลอดภัยตราบใดที่select
และ
การเปลี่ยนเข้ากันได้ ดูคําแนะนําเพิ่มเติมได้ที่
#7260 และ
การกําหนดค่าเครื่องมือ C++
โหมดนี้จะไม่ได้เปิดใช้โดยค่าเริ่มต้น เนื่องจากโปรเจ็กต์ Apple ยังคงกำหนดค่าการอ้างอิง C++ ด้วย --cpu
และ --crosstool_top
(ตัวอย่าง) ดังนั้นเรื่องนี้จึงขึ้นอยู่กับกฎของ Apple ที่จะย้ายไปยังแพลตฟอร์ม
Java
กฎ Java ของ Bazel ใช้แพลตฟอร์ม
ซึ่งจะแทนที่ฟีเจอร์เดิม --java_toolchain
, --host_java_toolchain
,
--javabase
และ --host_javabase
ดูวิธีใช้ Flag การกำหนดค่าได้ที่คู่มือ Bazel และ Java ดูข้อมูลเพิ่มเติมได้ที่เอกสารการออกแบบ
หากยังใช้ฟีเจอร์ที่เลิกใช้งานแล้ว ให้ทำตามกระบวนการย้ายข้อมูลในปัญหา #7849
Android
กฎ Android ของ Bazel ใช้แพลตฟอร์มเพื่อเลือก Toolchain เมื่อคุณตั้งค่า
--incompatible_enable_android_toolchain_resolution
ซึ่งจะไม่ได้เปิดใช้โดยค่าเริ่มต้น แต่การย้ายข้อมูลก็กำลังดำเนินการอยู่
Apple
กฎของ Apple ใน Bazel ยังไม่รองรับแพลตฟอร์มในการเลือกเครื่องมือ Apple
นอกจากนี้ ยังไม่รองรับการขึ้นต่อกันของ C++ ที่เปิดใช้แพลตฟอร์มเนื่องจากใช้ --crosstool_top
รุ่นเดิมเพื่อตั้งค่า Toolchain ของ C++ ในระหว่างที่ยังไม่ได้ย้ายข้อมูล คุณ
สามารถรวมโปรเจ็กต์ Apple กับ C++ ที่เปิดใช้แพลตฟอร์มด้วยการแมปแพลตฟอร์ม
(ตัวอย่าง)
ภาษาอื่นๆ
- กฎ Rust ของ Bazel รองรับแพลตฟอร์มอย่างเต็มรูปแบบ
- กฎ Go ของ Bazel รองรับแพลตฟอร์มอย่างเต็มรูปแบบ (รายละเอียด)
หากคุณกำลังออกแบบกฎสำหรับภาษาใหม่ ให้ใช้แพลตฟอร์ม เพื่อเลือกเครื่องมือของภาษา ดูคำแนะนำแบบทีละขั้นตอนได้ในเอกสารประกอบเกี่ยวกับชุดเครื่องมือ
select()
คุณselect()
โปรเจ็กต์ในconstraint_value
เป้าหมายได้ แต่ทำในแพลตฟอร์มที่ไม่สมบูรณ์ไม่ได้ เราตั้งใจให้เป็นเช่นนี้เพื่อให้ select()
รองรับเครื่องจักรได้หลากหลายมากที่สุด
ไลบรารีที่มีแหล่งข้อมูลเฉพาะของ ARM
ควรสนับสนุนเครื่องที่ทำงานด้วย ARM
ทั้งหมด เว้นแต่จะมีเหตุผลที่ต้องระบุให้เฉพาะเจาะจงมากขึ้น
หากต้องการเลือกใน constraint_value
s อย่างน้อย 1 รายการ ให้ใช้
config_setting(
name = "is_arm",
constraint_values = [
"@platforms//cpu:arm",
],
)
ซึ่งเทียบเท่ากับการเลือกใน --cpu
แบบเดิม
config_setting(
name = "is_arm",
values = {
"cpu": "arm",
},
)
ดูรายละเอียดเพิ่มเติมได้ที่นี่
select
ใน --cpu
, --crosstool_top
ฯลฯ ไม่เข้าใจ --platforms
เมื่อ
ย้ายข้อมูลโปรเจ็กต์ไปยังแพลตฟอร์ม คุณต้องแปลงโปรเจ็กต์เป็น
constraint_values
หรือใช้การแมปแพลตฟอร์มเพื่อรองรับ
ทั้ง 2 รูปแบบผ่านช่วงเวลาการย้ายข้อมูล
ทรานซิชัน
ทรานซิชัน Starlark เปลี่ยน
แฟล็กในส่วนต่างๆ ของกราฟการสร้าง หากโปรเจ็กต์ใช้การเปลี่ยนฉากที่
ตั้งค่า --cpu
, --crossstool_top
หรือแฟล็กเดิมอื่นๆ กฎที่อ่าน
--platforms
จะไม่เห็นการเปลี่ยนแปลงเหล่านี้
เมื่อย้ายข้อมูลโปรเจ็กต์ไปยังแพลตฟอร์ม คุณต้องแปลงการเปลี่ยนแปลง เช่น
return { "//command_line_option:cpu": "arm" }
เป็น return {
"//command_line_option:platforms": "//:my_arm_platform" }
หรือใช้การแมปแพลตฟอร์มเพื่อรองรับทั้ง 2 รูปแบบผ่านหน้าต่างการย้ายข้อมูล
วิธีใช้แพลตฟอร์มในปัจจุบัน
หากต้องการเพียงแค่สร้างหรือคอมไพล์ข้ามโปรเจ็กต์ คุณควรทำตามเอกสารประกอบอย่างเป็นทางการของโปรเจ็กต์ ผู้ดูแลภาษาและโปรเจ็กต์จะเป็นผู้กำหนดวิธีและเวลาที่จะผสานรวมกับแพลตฟอร์ม รวมถึงคุณค่าที่ได้รับ
หากคุณเป็นผู้ดูแลโปรเจ็กต์ ภาษา หรือทูลเชน และบิลด์ของคุณไม่ได้ ใช้แพลตฟอร์มโดยค่าเริ่มต้น คุณจะมี 3 ตัวเลือก (นอกเหนือจากการรอการย้ายข้อมูลทั่วโลก) ดังนี้
เปิดค่าสถานะ "ใช้แพลตฟอร์ม" สำหรับภาษาของโปรเจ็กต์ (หากมี) และทำการทดสอบที่จำเป็นเพื่อดูว่าโปรเจ็กต์ที่คุณสนใจทำงานได้หรือไม่
หากโปรเจ็กต์ที่คุณสนใจยังคงต้องใช้แฟล็กเดิม เช่น
--cpu
และ--crosstool_top
ให้ใช้แฟล็กเหล่านี้ร่วมกับ--platforms
bazel build //:my_mixed_project --platforms==//:myplatform --cpu=... --crosstool_top=...
ซึ่งจะมีค่าใช้จ่ายในการบำรุงรักษา (คุณต้องตรวจสอบด้วยตนเองว่าการตั้งค่าตรงกัน) แต่ควรใช้ได้ในกรณีที่ไม่มีการเปลี่ยนที่ผิดกฎ
เขียนการแมปแพลตฟอร์มเพื่อรองรับทั้ง 2 รูปแบบโดย การแมปการตั้งค่ารูปแบบ
--cpu
กับแพลตฟอร์มที่เกี่ยวข้อง และในทางกลับกัน
การแมปแพลตฟอร์ม
การแมปแพลตฟอร์มเป็น API ชั่วคราวที่ช่วยให้ตรรกะที่ขับเคลื่อนด้วยแพลตฟอร์มและตรรกะที่ขับเคลื่อนด้วยระบบเดิมอยู่ร่วมกันได้ในการสร้างเดียวกันผ่านช่วงการเลิกใช้งานของตรรกะที่ขับเคลื่อนด้วยระบบเดิม
การแมปแพลตฟอร์มคือการแมปplatform()
กับชุดฟีเจอร์เดิมที่เกี่ยวข้องหรือในทางกลับกัน เช่น
platforms:
# Maps "--platforms=//platforms:ios" to "--cpu=ios_x86_64 --apple_platform_type=ios".
//platforms:ios
--cpu=ios_x86_64
--apple_platform_type=ios
flags:
# Maps "--cpu=ios_x86_64 --apple_platform_type=ios" to "--platforms=//platforms:ios".
--cpu=ios_x86_64
--apple_platform_type=ios
//platforms:ios
# Maps "--cpu=darwin --apple_platform_type=macos" to "//platform:macos".
--cpu=darwin
--apple_platform_type=macos
//platforms:macos
Bazel ใช้สิ่งนี้เพื่อรับประกันว่าการตั้งค่าทั้งหมด ทั้งที่อิงตามแพลตฟอร์มและแบบเดิม จะได้รับการใช้ในบิลด์อย่างสม่ำเสมอ รวมถึงผ่านการเปลี่ยน
โดยค่าเริ่มต้น Bazel จะอ่านการแมปจากไฟล์ platform_mappings
ในรูทของพื้นที่ทำงาน
นอกจากนี้ คุณยังตั้งค่า
--platform_mappings=//:my_custom_mapping
ได้ด้วย
ดูรายละเอียดทั้งหมดได้ ที่นี่
คำถาม
หากต้องการความช่วยเหลือทั่วไปและมีคำถามเกี่ยวกับไทม์ไลน์การย้ายข้อมูล โปรดติดต่อ bazel-discuss@googlegroups.com หรือเจ้าของกฎที่เกี่ยวข้อง
หากต้องการพูดคุยเกี่ยวกับการออกแบบและวิวัฒนาการของ API แพลตฟอร์ม/เครื่องมือ โปรดติดต่อ bazel-dev@googlegroups.com