|  | // This file is generated by cargo_embargo. | 
|  | // Do not modify this file because the changes will be overridden on upgrade. | 
|  |  | 
|  | package { | 
|  | default_applicable_licenses: ["external_rust_crates_pdl-compiler_license"], | 
|  | default_team: "trendy_team_android_rust", | 
|  | } | 
|  |  | 
|  | license { | 
|  | name: "external_rust_crates_pdl-compiler_license", | 
|  | visibility: [":__subpackages__"], | 
|  | license_kinds: ["SPDX-license-identifier-Apache-2.0"], | 
|  | license_text: ["LICENSE"], | 
|  | } | 
|  |  | 
|  | rust_library_host { | 
|  | name: "libpdl_compiler", | 
|  | host_cross_supported: false, | 
|  | crate_name: "pdl_compiler", | 
|  | cargo_env_compat: true, | 
|  | cargo_pkg_version: "0.3.1", | 
|  | crate_root: "src/lib.rs", | 
|  | edition: "2021", | 
|  | features: [ | 
|  | "default", | 
|  | "serde", | 
|  | ], | 
|  | rustlibs: [ | 
|  | "libargh", | 
|  | "libcodespan_reporting", | 
|  | "libheck", | 
|  | "libpest", | 
|  | "libprettyplease", | 
|  | "libproc_macro2", | 
|  | "libquote", | 
|  | "libserde", | 
|  | "libserde_json", | 
|  | "libsyn", | 
|  | ], | 
|  | proc_macros: ["libpest_derive"], | 
|  | compile_multilib: "first", | 
|  | } | 
|  |  | 
|  | rust_binary_host { | 
|  | name: "pdlc", | 
|  | host_cross_supported: false, | 
|  | crate_name: "pdlc", | 
|  | cargo_env_compat: true, | 
|  | cargo_pkg_version: "0.3.1", | 
|  | crate_root: "src/main.rs", | 
|  | edition: "2021", | 
|  | features: [ | 
|  | "default", | 
|  | "serde", | 
|  | ], | 
|  | rustlibs: [ | 
|  | "libargh", | 
|  | "libcodespan_reporting", | 
|  | "libheck", | 
|  | "libpdl_compiler", | 
|  | "libpest", | 
|  | "libprettyplease", | 
|  | "libproc_macro2", | 
|  | "libquote", | 
|  | "libserde", | 
|  | "libserde_json", | 
|  | "libsyn", | 
|  | ], | 
|  | proc_macros: ["libpest_derive"], | 
|  | compile_multilib: "first", | 
|  | } | 
|  |  | 
|  | // Defaults for rust backend generation. | 
|  | genrule_defaults { | 
|  | name: "pdl_rust_generator_defaults", | 
|  | cmd: "$(location :pdlc) --output-format rust $(in) > $(out)", | 
|  | tools: [":pdlc"], | 
|  | defaults_visibility: [ | 
|  | "//system/nfc:__subpackages__", | 
|  | "//external/rust/pica", | 
|  | "//external/uwb/src", | 
|  | "//packages/modules/Bluetooth:__subpackages__", | 
|  | "//packages/modules/Nfc:__subpackages__", | 
|  | "//tools/netsim:__subpackages__", | 
|  | "//vendor:__subpackages__", | 
|  | ], | 
|  | } | 
|  |  | 
|  | // Defaults for legacy rust backend generation. | 
|  | genrule_defaults { | 
|  | name: "pdl_rust_legacy_generator_defaults", | 
|  | cmd: "$(location :pdlc) --output-format rust_legacy $(in) > $(out)", | 
|  | tools: [":pdlc"], | 
|  | defaults_visibility: [ | 
|  | "//system/nfc:__subpackages__", | 
|  | "//external/rust/pica", | 
|  | "//external/uwb/src", | 
|  | "//packages/modules/Bluetooth:__subpackages__", | 
|  | "//packages/modules/Nfc:__subpackages__", | 
|  | "//tools/netsim:__subpackages__", | 
|  | ], | 
|  | } | 
|  |  | 
|  | // Defaults for rust_noalloc backend generation. | 
|  | genrule_defaults { | 
|  | name: "pdl_rust_noalloc_generator_defaults", | 
|  | cmd: "$(location :pdlc) --output-format rust_no_alloc $(in) > $(out)", | 
|  | tools: [":pdlc"], | 
|  | } | 
|  |  | 
|  | // Defaults for PDL python backend generation. | 
|  | genrule_defaults { | 
|  | name: "pdl_python_generator_defaults", | 
|  | tools: [ | 
|  | ":pdlc", | 
|  | ":pdl_python_generator", | 
|  | ], | 
|  | } | 
|  |  | 
|  | // Defaults for PDL C++ backend generation. | 
|  | genrule_defaults { | 
|  | name: "pdl_cxx_generator_defaults", | 
|  | tools: [ | 
|  | ":pdlc", | 
|  | ":pdl_cxx_generator", | 
|  | ], | 
|  | } | 
|  |  | 
|  | filegroup { | 
|  | name: "pdl_generated_files", | 
|  | srcs: [ | 
|  | "tests/generated/rust/**/*.rs", | 
|  | ], | 
|  | } | 
|  |  | 
|  | rust_test_host { | 
|  | name: "pdl_tests", | 
|  | host_cross_supported: false, | 
|  | srcs: ["src/main.rs"], | 
|  | rustlibs: [ | 
|  | "libargh", | 
|  | "libcodespan_reporting", | 
|  | "libheck", | 
|  | "libpdl_compiler", | 
|  | "libpest", | 
|  | "libprettyplease", | 
|  | "libproc_macro2", | 
|  | "libquote", | 
|  | "libserde", | 
|  | "libserde_json", | 
|  | "libsyn", | 
|  | "libtempfile", | 
|  | ], | 
|  | proc_macros: [ | 
|  | "libpest_derive", | 
|  | "libpaste", | 
|  | ], | 
|  | test_suites: ["general-tests"], | 
|  | data: [ | 
|  | ":pdl_generated_files", | 
|  | ], | 
|  | } | 
|  |  | 
|  | genrule { | 
|  | name: "pdl_generated_files_compile_rs", | 
|  | cmd: "$(location tests/generated_files_compile.sh) $(in) > $(out)", | 
|  | srcs: [":pdl_generated_files"], | 
|  | out: ["generated_files_compile.rs"], | 
|  | tool_files: ["tests/generated_files_compile.sh"], | 
|  | } | 
|  |  | 
|  | rust_test_host { | 
|  | name: "pdl_generated_files_compile", | 
|  | srcs: [":pdl_generated_files_compile_rs"], | 
|  | features: ["serde"], | 
|  | rustlibs: [ | 
|  | "libbytes", | 
|  | "libserde", | 
|  | "libtempfile", | 
|  | "libpdl_runtime", | 
|  | ], | 
|  | test_suites: ["general-tests"], | 
|  | clippy_lints: "none", | 
|  | lints: "none", | 
|  | } | 
|  |  | 
|  | // The generators support more features for LE packets than for BE | 
|  | // packets. We use a single input written for LE packets and remove | 
|  | // the parts that don't work for BE packets. We do this by removing | 
|  | // everything between | 
|  | // | 
|  | // // Start: little_endian_only | 
|  | // | 
|  | // and | 
|  | // | 
|  | // // End: little_endian_only | 
|  | // | 
|  | // from the LE packet input. | 
|  | genrule_defaults { | 
|  | name: "pdl_be_test_file_defaults", | 
|  | cmd: "sed -e 's/little_endian_packets/big_endian_packets/' " + | 
|  | "     -e '/Start: little_endian_only/,/End: little_endian_only/d' " + | 
|  | " < $(in) > $(out)", | 
|  | } | 
|  |  | 
|  | genrule { | 
|  | name: "pdl_be_test_file", | 
|  | defaults: ["pdl_be_test_file_defaults"], | 
|  | srcs: ["tests/canonical/le_test_file.pdl"], | 
|  | out: ["be_test_file.pdl"], | 
|  | } | 
|  |  | 
|  | genrule { | 
|  | name: "pdl_rust_generator_tests_le_src", | 
|  | cmd: "$(location :pdlc)" + | 
|  | " --output-format rust" + | 
|  | " --exclude-declaration UnsizedCustomField" + | 
|  | " --exclude-declaration Packet_Custom_Field_VariableSize" + | 
|  | " --exclude-declaration Struct_Custom_Field_VariableSize_" + | 
|  | " --exclude-declaration Struct_Custom_Field_VariableSize" + | 
|  | " --exclude-declaration Checksum" + | 
|  | " --exclude-declaration Packet_Checksum_Field_FromStart" + | 
|  | " --exclude-declaration Packet_Checksum_Field_FromEnd" + | 
|  | " --exclude-declaration Struct_Checksum_Field_FromStart_" + | 
|  | " --exclude-declaration Struct_Checksum_Field_FromStart" + | 
|  | " --exclude-declaration Struct_Checksum_Field_FromEnd_" + | 
|  | " --exclude-declaration Struct_Checksum_Field_FromEnd" + | 
|  | " --exclude-declaration PartialParent5" + | 
|  | " --exclude-declaration PartialParent12" + | 
|  | " --exclude-declaration PartialChild5_A" + | 
|  | " --exclude-declaration PartialChild5_B" + | 
|  | " --exclude-declaration PartialChild12_A" + | 
|  | " --exclude-declaration PartialChild12_B" + | 
|  | " --exclude-declaration Packet_Array_Field_UnsizedElement_SizeModifier" + | 
|  | " --exclude-declaration Struct_Array_Field_UnsizedElement_SizeModifier_" + | 
|  | " --exclude-declaration Struct_Array_Field_UnsizedElement_SizeModifier" + | 
|  | " $(location tests/canonical/le_test_file.pdl) > $(out);" + | 
|  | "$(location :pdlc) $(location tests/canonical/le_test_vectors.json) --output-format rust --tests >> $(out)", | 
|  | srcs: [ | 
|  | "tests/canonical/le_test_file.pdl", | 
|  | "tests/canonical/le_test_vectors.json", | 
|  | ], | 
|  | out: ["le_canonical.rs"], | 
|  | tools: [":pdlc"], | 
|  | } | 
|  |  | 
|  | genrule { | 
|  | name: "pdl_rust_generator_tests_be_src", | 
|  | cmd: "$(location :pdlc)" + | 
|  | " --output-format rust" + | 
|  | " --exclude-declaration UnsizedCustomField" + | 
|  | " --exclude-declaration Packet_Custom_Field_VariableSize" + | 
|  | " --exclude-declaration Struct_Custom_Field_VariableSize_" + | 
|  | " --exclude-declaration Struct_Custom_Field_VariableSize" + | 
|  | " --exclude-declaration Checksum" + | 
|  | " --exclude-declaration Packet_Checksum_Field_FromStart" + | 
|  | " --exclude-declaration Packet_Checksum_Field_FromEnd" + | 
|  | " --exclude-declaration Struct_Checksum_Field_FromStart_" + | 
|  | " --exclude-declaration Struct_Checksum_Field_FromStart" + | 
|  | " --exclude-declaration Struct_Checksum_Field_FromEnd_" + | 
|  | " --exclude-declaration Struct_Checksum_Field_FromEnd" + | 
|  | " --exclude-declaration Packet_Array_Field_UnsizedElement_SizeModifier" + | 
|  | " --exclude-declaration Struct_Array_Field_UnsizedElement_SizeModifier_" + | 
|  | " --exclude-declaration Struct_Array_Field_UnsizedElement_SizeModifier" + | 
|  | " $(location :pdl_be_test_file) > $(out);" + | 
|  | "$(location :pdlc) $(location tests/canonical/be_test_vectors.json) --output-format rust --tests >> $(out)", | 
|  | srcs: [ | 
|  | ":pdl_be_test_file", | 
|  | "tests/canonical/be_test_vectors.json", | 
|  | ], | 
|  | out: ["be_canonical.rs"], | 
|  | tools: [":pdlc"], | 
|  | } | 
|  |  | 
|  | rust_test_host { | 
|  | name: "pdl_rust_generator_tests_le", | 
|  | srcs: [":pdl_rust_generator_tests_le_src"], | 
|  | test_suites: ["general-tests"], | 
|  | features: ["serde"], | 
|  | rustlibs: [ | 
|  | "libbytes", | 
|  | "libnum_traits", | 
|  | "libpdl_runtime", | 
|  | "libserde", | 
|  | "libserde_json", | 
|  | ], | 
|  | clippy_lints: "none", | 
|  | lints: "none", | 
|  | } | 
|  |  | 
|  | rust_test_host { | 
|  | name: "pdl_rust_generator_tests_be", | 
|  | srcs: [":pdl_rust_generator_tests_be_src"], | 
|  | test_suites: ["general-tests"], | 
|  | features: ["serde"], | 
|  | rustlibs: [ | 
|  | "libbytes", | 
|  | "libnum_traits", | 
|  | "libpdl_runtime", | 
|  | "libserde", | 
|  | "libserde_json", | 
|  | ], | 
|  | clippy_lints: "none", | 
|  | lints: "none", | 
|  | } | 
|  |  | 
|  | // Generate the python parser+serializer backend for the | 
|  | // little endian test file located at tests/canonical/le_test_file.pdl. | 
|  | genrule { | 
|  | name: "pdl_python_generator_le_test_gen", | 
|  | defaults: ["pdl_python_generator_defaults"], | 
|  | cmd: "set -o pipefail;" + | 
|  | " $(location :pdlc) $(in) |" + | 
|  | " $(location :pdl_python_generator)" + | 
|  | " --exclude-declaration Packet_Array_Field_VariableElementSize_ConstantSize" + | 
|  | " --exclude-declaration Packet_Array_Field_VariableElementSize_VariableSize" + | 
|  | " --exclude-declaration Packet_Array_Field_VariableElementSize_VariableCount" + | 
|  | " --exclude-declaration Packet_Array_Field_VariableElementSize_UnknownSize" + | 
|  | " --output $(out) --custom-type-location tests.custom_types", | 
|  | tool_files: [ | 
|  | "tests/custom_types.py", | 
|  | ], | 
|  | srcs: [ | 
|  | "tests/canonical/le_test_file.pdl", | 
|  | ], | 
|  | out: [ | 
|  | "le_backend.py", | 
|  | ], | 
|  | } | 
|  |  | 
|  | // Generate the python parser+serializer backend for a big endian test | 
|  | // file derived from tests/canonical/le_test_file.pdl. | 
|  | genrule { | 
|  | name: "pdl_python_generator_be_test_gen", | 
|  | defaults: ["pdl_python_generator_defaults"], | 
|  | cmd: "set -o pipefail;" + | 
|  | " $(location :pdlc) $(in) |" + | 
|  | " $(location :pdl_python_generator)" + | 
|  | " --exclude-declaration Packet_Array_Field_VariableElementSize_ConstantSize" + | 
|  | " --exclude-declaration Packet_Array_Field_VariableElementSize_VariableSize" + | 
|  | " --exclude-declaration Packet_Array_Field_VariableElementSize_VariableCount" + | 
|  | " --exclude-declaration Packet_Array_Field_VariableElementSize_UnknownSize" + | 
|  | " --output $(out) --custom-type-location tests.custom_types", | 
|  | tool_files: [ | 
|  | "tests/custom_types.py", | 
|  | ], | 
|  | srcs: [ | 
|  | ":pdl_be_test_file", | 
|  | ], | 
|  | out: [ | 
|  | "be_backend.py", | 
|  | ], | 
|  | } | 
|  |  | 
|  | // Test the generated python parser+serializer against | 
|  | // pre-generated binary inputs. | 
|  | python_test_host { | 
|  | name: "pdl_python_generator_test", | 
|  | main: "tests/python_generator_test.py", | 
|  | srcs: [ | 
|  | ":pdl_python_generator_be_test_gen", | 
|  | ":pdl_python_generator_le_test_gen", | 
|  | "tests/custom_types.py", | 
|  | "tests/python_generator_test.py", | 
|  | ], | 
|  | data: [ | 
|  | "tests/canonical/be_test_vectors.json", | 
|  | "tests/canonical/le_test_vectors.json", | 
|  | ], | 
|  | libs: [ | 
|  | "typing_extensions", | 
|  | ], | 
|  | test_options: { | 
|  | unit_test: true, | 
|  | }, | 
|  | version: { | 
|  | py3: { | 
|  | embedded_launcher: true, | 
|  | }, | 
|  | }, | 
|  | } | 
|  |  | 
|  | // Generate the rust_noalloc backend srcs against the little-endian test vectors | 
|  | genrule { | 
|  | name: "pdl_rust_noalloc_le_test_backend_srcs", | 
|  | defaults: ["pdl_rust_noalloc_generator_defaults"], | 
|  | srcs: ["tests/canonical/le_rust_noalloc_test_file.pdl"], | 
|  | out: ["_packets.rs"], | 
|  | } | 
|  |  | 
|  | // Generate the C++ parser+serializer backend for the | 
|  | // little endian test file located at tests/canonical/le_test_file.pdl. | 
|  | genrule { | 
|  | name: "pdl_cxx_canonical_le_src_gen", | 
|  | defaults: ["pdl_cxx_generator_defaults"], | 
|  | cmd: "set -o pipefail;" + | 
|  | " $(location :pdlc) $(in) |" + | 
|  | " $(location :pdl_cxx_generator)" + | 
|  | " --exclude-declaration Packet_Custom_Field_ConstantSize" + | 
|  | " --exclude-declaration Packet_Custom_Field_VariableSize" + | 
|  | " --exclude-declaration Packet_Checksum_Field_FromStart" + | 
|  | " --exclude-declaration Packet_Checksum_Field_FromEnd" + | 
|  | " --exclude-declaration Struct_Custom_Field_ConstantSize" + | 
|  | " --exclude-declaration Struct_Custom_Field_VariableSize" + | 
|  | " --exclude-declaration Struct_Checksum_Field_FromStart" + | 
|  | " --exclude-declaration Struct_Checksum_Field_FromEnd" + | 
|  | " --exclude-declaration Packet_Array_Field_VariableElementSize_ConstantSize" + | 
|  | " --exclude-declaration Packet_Array_Field_VariableElementSize_VariableSize" + | 
|  | " --exclude-declaration Packet_Array_Field_VariableElementSize_VariableCount" + | 
|  | " --exclude-declaration Packet_Array_Field_VariableElementSize_UnknownSize" + | 
|  | " --exclude-declaration Struct_Custom_Field_ConstantSize_" + | 
|  | " --exclude-declaration Struct_Custom_Field_VariableSize_" + | 
|  | " --exclude-declaration Struct_Checksum_Field_FromStart_" + | 
|  | " --exclude-declaration Struct_Checksum_Field_FromEnd_" + | 
|  | " --exclude-declaration PartialParent5" + | 
|  | " --exclude-declaration PartialChild5_A" + | 
|  | " --exclude-declaration PartialChild5_B" + | 
|  | " --exclude-declaration PartialParent12" + | 
|  | " --exclude-declaration PartialChild12_A" + | 
|  | " --exclude-declaration PartialChild12_B" + | 
|  | " --namespace le_test" + | 
|  | " --output $(out)", | 
|  | srcs: [ | 
|  | "tests/canonical/le_test_file.pdl", | 
|  | ], | 
|  | out: [ | 
|  | "canonical_le_test_file.h", | 
|  | ], | 
|  | } | 
|  |  | 
|  | // Generate the C++ parser+serializer backend tests for the | 
|  | // little endian test file located at tests/canonical/le_test_file.pdl. | 
|  | genrule { | 
|  | name: "pdl_cxx_canonical_le_test_gen", | 
|  | cmd: "set -o pipefail;" + | 
|  | " inputs=( $(in) ) &&" + | 
|  | " $(location :pdlc) $${inputs[0]} |" + | 
|  | " $(location :pdl_cxx_unittest_generator)" + | 
|  | " --output $(out)" + | 
|  | " --test-vectors $${inputs[1]}" + | 
|  | " --include-header $$(basename $${inputs[2]})" + | 
|  | " --using-namespace le_test" + | 
|  | " --namespace le_test" + | 
|  | " --parser-test-suite LeParserTest" + | 
|  | " --serializer-test-suite LeSerializerTest", | 
|  | tools: [ | 
|  | ":pdlc", | 
|  | ":pdl_cxx_unittest_generator", | 
|  | ], | 
|  | srcs: [ | 
|  | "tests/canonical/le_test_file.pdl", | 
|  |  | 
|  | "tests/canonical/le_test_vectors.json", | 
|  |  | 
|  | ":pdl_cxx_canonical_le_src_gen", | 
|  | ], | 
|  | out: [ | 
|  | "canonical_le_test.cc", | 
|  | ], | 
|  | } | 
|  |  | 
|  | // Generate the C++ parser+serializer backend for the | 
|  | // big endian test file. | 
|  | genrule { | 
|  | name: "pdl_cxx_canonical_be_src_gen", | 
|  | defaults: ["pdl_cxx_generator_defaults"], | 
|  | cmd: "set -o pipefail;" + | 
|  | " $(location :pdlc) $(in) |" + | 
|  | " $(location :pdl_cxx_generator)" + | 
|  | " --exclude-declaration Packet_Custom_Field_ConstantSize" + | 
|  | " --exclude-declaration Packet_Custom_Field_VariableSize" + | 
|  | " --exclude-declaration Packet_Checksum_Field_FromStart" + | 
|  | " --exclude-declaration Packet_Checksum_Field_FromEnd" + | 
|  | " --exclude-declaration Struct_Custom_Field_ConstantSize" + | 
|  | " --exclude-declaration Struct_Custom_Field_VariableSize" + | 
|  | " --exclude-declaration Struct_Checksum_Field_FromStart" + | 
|  | " --exclude-declaration Struct_Checksum_Field_FromEnd" + | 
|  | " --exclude-declaration Packet_Array_Field_VariableElementSize_ConstantSize" + | 
|  | " --exclude-declaration Packet_Array_Field_VariableElementSize_VariableSize" + | 
|  | " --exclude-declaration Packet_Array_Field_VariableElementSize_VariableCount" + | 
|  | " --exclude-declaration Packet_Array_Field_VariableElementSize_UnknownSize" + | 
|  | " --exclude-declaration Struct_Custom_Field_ConstantSize_" + | 
|  | " --exclude-declaration Struct_Custom_Field_VariableSize_" + | 
|  | " --exclude-declaration Struct_Checksum_Field_FromStart_" + | 
|  | " --exclude-declaration Struct_Checksum_Field_FromEnd_" + | 
|  | " --exclude-declaration PartialParent5" + | 
|  | " --exclude-declaration PartialChild5_A" + | 
|  | " --exclude-declaration PartialChild5_B" + | 
|  | " --exclude-declaration PartialParent12" + | 
|  | " --exclude-declaration PartialChild12_A" + | 
|  | " --exclude-declaration PartialChild12_B" + | 
|  | " --namespace be_test" + | 
|  | " --output $(out)", | 
|  | srcs: [ | 
|  | ":pdl_be_test_file", | 
|  | ], | 
|  | out: [ | 
|  | "canonical_be_test_file.h", | 
|  | ], | 
|  | } | 
|  |  | 
|  | // Generate the C++ parser+serializer backend tests for the | 
|  | // big endian test file. | 
|  | genrule { | 
|  | name: "pdl_cxx_canonical_be_test_gen", | 
|  | cmd: "set -o pipefail;" + | 
|  | " inputs=( $(in) ) &&" + | 
|  | " $(location :pdlc) $${inputs[0]} |" + | 
|  | " $(location :pdl_cxx_unittest_generator)" + | 
|  | " --output $(out)" + | 
|  | " --test-vectors $${inputs[1]}" + | 
|  | " --include-header $$(basename $${inputs[2]})" + | 
|  | " --using-namespace be_test" + | 
|  | " --namespace be_test" + | 
|  | " --parser-test-suite BeParserTest" + | 
|  | " --serializer-test-suite BeSerializerTest", | 
|  | tools: [ | 
|  | ":pdlc", | 
|  | ":pdl_cxx_unittest_generator", | 
|  | ], | 
|  | srcs: [ | 
|  | ":pdl_be_test_file", | 
|  |  | 
|  | "tests/canonical/be_test_vectors.json", | 
|  |  | 
|  | ":pdl_cxx_canonical_be_src_gen", | 
|  | ], | 
|  | out: [ | 
|  | "canonical_be_test.cc", | 
|  | ], | 
|  | } | 
|  |  | 
|  | // Test the generated C++ parser+serializer against | 
|  | // pre-generated binary inputs. | 
|  | cc_test_host { | 
|  | name: "pdl_cxx_generator_test", | 
|  | local_include_dirs: [ | 
|  | "scripts", | 
|  | ], | 
|  | generated_headers: [ | 
|  | "pdl_cxx_canonical_be_src_gen", | 
|  | "pdl_cxx_canonical_le_src_gen", | 
|  | ], | 
|  | generated_sources: [ | 
|  | "pdl_cxx_canonical_be_test_gen", | 
|  | "pdl_cxx_canonical_le_test_gen", | 
|  | ], | 
|  | static_libs: [ | 
|  | "libgtest", | 
|  | ], | 
|  | } |