กฎการดำเนินการเพิ่มเติม

กฎ

action_listener

ดูแหล่งที่มาของกฎ
action_listener(name, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, extra_actions, features, licenses, mnemonics, restricted_to, tags, target_compatible_with, testonly, visibility)

คำเตือน: ระบบไม่รองรับการดำเนินการเพิ่มเติมแล้ว ให้ใช้ แง่มุม แทน

กฎ action_listener จะไม่สร้างเอาต์พุตใดๆ ด้วยตัวเอง แต่จะช่วยให้นักพัฒนาเครื่องมือสามารถแทรก extra_actionลงในระบบบิลด์ได้ โดยการระบุการแมปจากการดำเนินการไปยัง extra_action

อาร์กิวเมนต์ของกฎนี้จะแมปตัวช่วยจำการดำเนินการกับ extra_action กฎ

เมื่อระบุตัวเลือก --experimental_action_listener=<label>, บิลด์จะใช้ action_listener ที่ระบุเพื่อแทรก extra_action ลงในกราฟบิลด์

ตัวอย่าง

action_listener(
    name = "index_all_languages",
    mnemonics = [
        "Javac",
        "CppCompile",
        "Python",
    ],
    extra_actions = [":indexer"],
)

action_listener(
    name = "index_java",
    mnemonics = ["Javac"],
    extra_actions = [":indexer"],
)

extra_action(
    name = "indexer",
    tools = ["//my/tools:indexer"],
    cmd = "$(location //my/tools:indexer)" +
          "--extra_action_file=$(EXTRA_ACTION_FILE)",
)

อาร์กิวเมนต์

Attributes
name

ชื่อ (ต้องระบุ)

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

extra_actions

รายการป้ายกำกับ (ต้องระบุ)

รายการเป้าหมาย extra_action ที่ action_listener ควรเพิ่มลงในกราฟบิลด์ เช่น [ "//my/tools:analyzer" ]
mnemonics

รายการสตริง (ต้องระบุ)

รายการตัวช่วยจำการดำเนินการที่ action_listener นี้ควรตรวจสอบ เช่น [ "Javac" ]

ตัวช่วยจำไม่ใช่อินเทอร์เฟซสาธารณะ จึงไม่มีการรับประกันว่าตัวช่วยจำและการดำเนินการที่เกี่ยวข้องจะไม่เปลี่ยนแปลง

extra_action

ดูแหล่งที่มาของกฎ
extra_action(name, data, cmd, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, out_templates, requires_action_output, restricted_to, tags, target_compatible_with, testonly, toolchains, tools, visibility)

คำเตือน: ระบบไม่รองรับการดำเนินการเพิ่มเติมแล้ว ให้ใช้ แง่มุม แทน

กฎ extra_action จะไม่สร้างเอาต์พุตที่มีความหมาย เมื่อระบุเป็นเป้าหมายบิลด์ปกติ แต่จะช่วยให้นักพัฒนาเครื่องมือ สามารถแทรกการดำเนินการเพิ่มเติมลงในกราฟบิลด์ที่ซ่อนการดำเนินการที่มีอยู่ได้

ดูรายละเอียดเกี่ยวกับวิธีเปิดใช้ extra_action ได้ที่ action_listener

extra_action จะทำงานเป็นบรรทัดคำสั่ง เครื่องมือบรรทัดคำสั่งจะได้รับสิทธิ์เข้าถึงไฟล์ที่มีบัฟเฟอร์โปรโตคอลเป็น $(EXTRA_ACTION_FILE) พร้อมข้อมูลโดยละเอียดเกี่ยวกับการดำเนินการเดิมที่ซ่อนอยู่ นอกจากนี้ ยังมีสิทธิ์เข้าถึงไฟล์อินพุตทั้งหมดที่การดำเนินการเดิมมีสิทธิ์เข้าถึง ดูรายละเอียดเกี่ยวกับข้อมูลที่จัดเก็บไว้ในบัฟเฟอร์โปรโตคอลได้ที่ extra_actions_base.proto ไฟล์โปรโตแต่ละไฟล์จะมีข้อความ ExtraActionInfo

การดำเนินการเพิ่มเติมจะอยู่ในแซนด์บ็อกซ์และควรได้รับการออกแบบมาเพื่อจัดการกับแซนด์บ็อกซ์เช่นเดียวกับการดำเนินการอื่นๆ ทั้งหมด

อาร์กิวเมนต์

Attributes
name

ชื่อ (ต้องระบุ)

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

คุณอาจอ้างอิงกฎนี้ด้วย label ในอาร์กิวเมนต์ extra_actions ของกฎ action_listener
cmd

สตริง (ต้องระบุ)

คำสั่งที่จะเรียกใช้

เช่น แอตทริบิวต์ cmd ของ genrule ที่มีความแตกต่างดังนี้

  1. ไม่มีการขยายป้ายกำกับแบบฮิวริสติก ระบบจะขยายเฉพาะป้ายกำกับที่ใช้ $(location ...)

  2. ระบบจะใช้การส่งผ่านเพิ่มเติมกับสตริงเพื่อแทนที่เอาต์พุตทั้งหมดที่สร้างจากแอตทริบิวต์ out_templates ระบบจะแทนที่อินสแตนซ์ทั้งหมดของ $(output out_template) ด้วยเส้นทางไปยังไฟล์ที่ระบุโดย label

    เช่น out_template $(ACTION_ID).analysis สามารถจับคู่กับ $(output $(ACTION_ID).analysis) ได้

    ซึ่งเป็นการแทนที่แบบเดียวกับ $(location) แต่มีขอบเขตที่แตกต่างกัน

out_templates

รายการสตริง (ค่าเริ่มต้นคือ [])

รายการเทมเพลตสำหรับไฟล์ที่สร้างโดยคำสั่ง extra_action

เทมเพลตสามารถใช้ตัวแปรต่อไปนี้ได้

  • $(ACTION_ID) ซึ่งเป็นรหัสที่ระบุ extra_action นี้โดยไม่ซ้ำกัน ใช้เพื่อสร้างไฟล์เอาต์พุตที่ไม่ซ้ำกัน

requires_action_output

บูลีน (ค่าเริ่มต้นคือ False)

ระบุว่า extra_action นี้ต้องมีเอาต์พุตของ การดำเนินการเดิมเป็นอินพุตสำหรับ extra_action นี้

เมื่อเป็น "จริง" (ค่าเริ่มต้นคือ "เท็จ") extra_action จะถือว่าเอาต์พุตของการดำเนินการเดิมพร้อมใช้งานเป็นส่วนหนึ่งของอินพุต

tools

รายการป้ายกำกับ (ค่าเริ่มต้นคือ [])

รายการการขึ้นต่อกันของ tool สำหรับกฎนี้

ดูข้อมูลเพิ่มเติมได้ที่คำจำกัดความของ การขึ้นต่อกัน

ระบบบิลด์จะสร้างข้อกำหนดเบื้องต้นเหล่านี้ก่อนที่จะเรียกใช้ extra_action คำสั่ง โดยจะสร้างขึ้นโดยใช้ execการกำหนดค่า, เนื่องจากต้องทำงานเป็นเครื่องมือระหว่างบิลด์เอง คุณรับเส้นทางของเป้าหมายแต่ละรายการ tools //x:y ได้โดยใช้ $(location //x:y)

เครื่องมือทั้งหมดและการขึ้นต่อกันของข้อมูลจะรวมกันเป็นแผนผังเดียว ซึ่งคำสั่งสามารถใช้เส้นทางแบบสัมพัทธ์ได้ ไดเรกทอรีการทำงานจะเป็นรูทของแผนผังแบบรวม