// 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__", "//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__", "//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", ], }