| package { |
| // See: http://go/android-license-faq |
| // A large-scale-change added 'default_applicable_licenses' to import |
| // all of the 'license_kinds' from "system_bt_license" |
| // to get the below license kinds: |
| // SPDX-license-identifier-Apache-2.0 |
| default_applicable_licenses: ["system_bt_license"], |
| } |
| |
| rust_defaults { |
| name: "pdl_defaults", |
| // LINT.IfChange |
| rustlibs: [ |
| "libclap", |
| "libcodespan_reporting", |
| "libpest", |
| "libproc_macro2", |
| "libquote", |
| "libserde", |
| "libserde_json", |
| "libsyn", |
| "libtempfile", |
| ], |
| proc_macros: [ |
| "libpest_derive", |
| ], |
| // LINT.ThenChange(Cargo.toml) |
| } |
| |
| rust_binary_host { |
| name: "pdl", |
| defaults: ["pdl_defaults"], |
| srcs: ["src/main.rs"], |
| } |
| |
| rust_test_host { |
| name: "pdl_tests", |
| defaults: ["pdl_defaults"], |
| srcs: ["src/main.rs"], |
| proc_macros: [ |
| "libpaste", |
| ], |
| test_suites: ["general-tests"], |
| enabled: false, // rustfmt is only available on x86. |
| arch: { |
| x86_64: { |
| enabled: true, |
| }, |
| }, |
| data: [ |
| ":rustfmt", |
| ":rustfmt.toml", |
| "tests/generated/packet_decl_8bit_enum_big_endian.rs", |
| "tests/generated/packet_decl_8bit_enum_little_endian.rs", |
| "tests/generated/packet_decl_8bit_scalar_big_endian.rs", |
| "tests/generated/packet_decl_8bit_scalar_little_endian.rs", |
| "tests/generated/packet_decl_24bit_enum_big_endian.rs", |
| "tests/generated/packet_decl_24bit_enum_little_endian.rs", |
| "tests/generated/packet_decl_24bit_scalar_big_endian.rs", |
| "tests/generated/packet_decl_24bit_scalar_little_endian.rs", |
| "tests/generated/packet_decl_64bit_enum_big_endian.rs", |
| "tests/generated/packet_decl_64bit_enum_little_endian.rs", |
| "tests/generated/packet_decl_64bit_scalar_big_endian.rs", |
| "tests/generated/packet_decl_64bit_scalar_little_endian.rs", |
| "tests/generated/packet_decl_complex_scalars_big_endian.rs", |
| "tests/generated/packet_decl_complex_scalars_little_endian.rs", |
| "tests/generated/packet_decl_empty_big_endian.rs", |
| "tests/generated/packet_decl_empty_little_endian.rs", |
| "tests/generated/packet_decl_mask_scalar_value_big_endian.rs", |
| "tests/generated/packet_decl_mask_scalar_value_little_endian.rs", |
| "tests/generated/packet_decl_mixed_scalars_enums_big_endian.rs", |
| "tests/generated/packet_decl_mixed_scalars_enums_little_endian.rs", |
| "tests/generated/packet_decl_reserved_field_big_endian.rs", |
| "tests/generated/packet_decl_reserved_field_little_endian.rs", |
| "tests/generated/packet_decl_simple_scalars_big_endian.rs", |
| "tests/generated/packet_decl_simple_scalars_little_endian.rs", |
| "tests/generated/preamble.rs", |
| "tests/generated/struct_decl_complex_scalars_big_endian.rs", |
| "tests/generated/struct_decl_complex_scalars_little_endian.rs", |
| ], |
| } |
| |
| genrule_defaults { |
| name: "pdl_rust_generator_defaults", |
| cmd: "set -o pipefail;" + |
| " $(location :pdl) --output-format rust $(in) |" + |
| " $(location :rustfmt) > $(out)", |
| tools: [ |
| ":pdl", |
| ":rustfmt", |
| ], |
| } |
| |
| // Generate the Rust parser+serializer backends. |
| genrule { |
| name: "pdl_le_backend", |
| defaults: ["pdl_rust_generator_defaults"], |
| srcs: ["tests/canonical/le_rust_test_file.pdl"], |
| out: ["le_backend.rs"], |
| } |
| |
| genrule { |
| name: "pdl_be_backend", |
| defaults: ["pdl_rust_generator_defaults"], |
| srcs: ["tests/canonical/be_rust_test_file.pdl"], |
| out: ["be_backend.rs"], |
| } |
| |
| rust_defaults { |
| name: "pdl_backend_defaults", |
| features: ["serde"], |
| rustlibs: [ |
| "libbytes", |
| "libnum_traits", |
| "libserde", |
| "libtempfile", |
| "libthiserror", |
| ], |
| proc_macros: [ |
| "libnum_derive", |
| "libserde_derive", |
| ], |
| } |
| |
| rust_library_host { |
| name: "libpdl_le_backend", |
| crate_name: "pdl_le_backend", |
| srcs: [":pdl_le_backend"], |
| defaults: ["pdl_backend_defaults"], |
| } |
| |
| rust_library_host { |
| name: "libpdl_be_backend", |
| crate_name: "pdl_be_backend", |
| srcs: [":pdl_be_backend"], |
| defaults: ["pdl_backend_defaults"], |
| } |
| |
| rust_binary_host { |
| name: "pdl_generate_tests", |
| srcs: ["src/bin/generate-canonical-tests.rs"], |
| rustlibs: [ |
| "libproc_macro2", |
| "libquote", |
| "libserde", |
| "libserde_json", |
| "libsyn", |
| "libtempfile", |
| ], |
| } |
| |
| genrule_defaults { |
| name: "pdl_rust_generator_src_defaults", |
| tools: [ |
| ":pdl_generate_tests", |
| ":rustfmt", |
| ], |
| } |
| |
| genrule { |
| name: "pdl_rust_generator_tests_le_src", |
| cmd: "set -o pipefail;" + |
| " $(location :pdl_generate_tests) $(in) pdl_le_backend |" + |
| " $(location :rustfmt) > $(out)", |
| srcs: ["tests/canonical/le_test_vectors.json"], |
| out: ["le_canonical.rs"], |
| defaults: ["pdl_rust_generator_src_defaults"], |
| } |
| |
| genrule { |
| name: "pdl_rust_generator_tests_be_src", |
| cmd: "set -o pipefail;" + |
| " $(location :pdl_generate_tests) $(in) pdl_be_backend |" + |
| " $(location :rustfmt) > $(out)", |
| srcs: ["tests/canonical/be_test_vectors.json"], |
| out: ["be_canonical.rs"], |
| defaults: ["pdl_rust_generator_src_defaults"], |
| } |
| |
| rust_test_host { |
| name: "pdl_rust_generator_tests_le", |
| srcs: [":pdl_rust_generator_tests_le_src"], |
| test_suites: ["general-tests"], |
| rustlibs: [ |
| "libnum_traits", |
| "libpdl_le_backend", |
| "libserde_json", |
| ], |
| } |
| |
| rust_test_host { |
| name: "pdl_rust_generator_tests_be", |
| srcs: [":pdl_rust_generator_tests_be_src"], |
| test_suites: ["general-tests"], |
| rustlibs: [ |
| "libnum_traits", |
| "libpdl_be_backend", |
| "libserde_json", |
| ], |
| } |
| |
| // Defaults for PDL python backend generation. |
| genrule_defaults { |
| name: "pdl_python_generator_defaults", |
| tools: [ |
| ":pdl", |
| ":pdl_python_generator", |
| ], |
| } |
| |
| // 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 :pdl) $(in) |" + |
| " $(location :pdl_python_generator)" + |
| " --output $(out) --custom-type-location tests.custom_types", |
| tool_files: [ |
| "tests/custom_types.py", |
| ], |
| srcs: [ |
| "tests/canonical/le_test_file.pdl", |
| ], |
| out: [ |
| "le_pdl_test.py", |
| ], |
| } |
| |
| // Generate the python parser+serializer backend for the |
| // big endian test file located at tests/canonical/be_test_file.pdl. |
| genrule { |
| name: "pdl_python_generator_be_test_gen", |
| defaults: ["pdl_python_generator_defaults"], |
| cmd: "set -o pipefail;" + |
| " $(location :pdl) $(in) |" + |
| " $(location :pdl_python_generator)" + |
| " --output $(out) --custom-type-location tests.custom_types", |
| tool_files: [ |
| "tests/custom_types.py", |
| ], |
| srcs: [ |
| "tests/canonical/be_test_file.pdl", |
| ], |
| out: [ |
| "be_pdl_test.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, |
| }, |
| }, |
| } |
| |
| // Test the python parser against the rust parser |
| // on selected PDL source files. |
| python_test_host { |
| name: "pdl_python_parser_test", |
| main: "tests/python_parser_test.py", |
| srcs: ["tests/python_parser_test.py"], |
| data: [ |
| ":BluetoothHciPackets", |
| ":RootCanalLinkLayerPackets", |
| ":pdl", |
| ":pypdl", |
| ], |
| } |