Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a00065ba authored by Henri Chataing's avatar Henri Chataing Committed by Gerrit Code Review
Browse files

Merge "pdl: Migrate to external/rust/crates/pdl-compiler"

parents f75e1fe4 d15a41ae
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -874,7 +874,7 @@ cc_library_host_shared {
genrule {
    name: "gd_hci_packets_python3_gen",
    defaults: ["pdl_python_generator_defaults"],
    cmd: "$(location :pdl) $(in) |" +
    cmd: "$(location :pdlc) $(in) |" +
        " $(location :pdl_python_generator)" +
        " --output $(out) --custom-type-location blueberry.utils.bluetooth",
    srcs: [
+3 −3
Original line number Diff line number Diff line
//! Build file to generate packets
//!
//! Run `cargo install .` in `tools/pdl` to ensure `pdl` is in your
//! path.
//! Run `cargo install --path .` in `external/rust/crates/pdl-compiler` to ensure `pdlc`
//! is in your path.
use std::{
    env,
    fs::File,
@@ -14,7 +14,7 @@ fn main() {
    let dest_path = Path::new(&out_dir).join("_packets.rs");
    let dest_file = File::create(dest_path).unwrap();

    let pdl = Command::new("pdl")
    let pdl = Command::new("pdlc")
        .args(["--output-format", "rust_no_alloc", "src/packets.pdl"])
        .stdout(Stdio::piped())
        .spawn()

tools/pdl/Android.bp

deleted100644 → 0
+0 −538
Original line number Diff line number Diff line
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: [
        "libargh",
        "libcodespan_reporting",
        "libheck",
        "libpest",
        "libprettyplease",
        "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"],
    visibility: [
        "//external/uwb/src",
        "//packages/modules/Bluetooth:__subpackages__",
    ],
}

filegroup {
    name: "pdl_generated_files",
    srcs: [
        "tests/generated/custom_field_declaration_big_endian.rs",
        "tests/generated/custom_field_declaration_little_endian.rs",
        "tests/generated/enum_declaration_big_endian.rs",
        "tests/generated/enum_declaration_little_endian.rs",
        "tests/generated/packet_decl_8bit_enum_array_big_endian.rs",
        "tests/generated/packet_decl_8bit_enum_array_little_endian.rs",
        "tests/generated/packet_decl_8bit_enum_big_endian.rs",
        "tests/generated/packet_decl_8bit_enum_little_endian.rs",
        "tests/generated/packet_decl_8bit_scalar_array_big_endian.rs",
        "tests/generated/packet_decl_8bit_scalar_array_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_array_big_endian.rs",
        "tests/generated/packet_decl_24bit_enum_array_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_array_big_endian.rs",
        "tests/generated/packet_decl_24bit_scalar_array_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_array_big_endian.rs",
        "tests/generated/packet_decl_64bit_enum_array_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_array_big_endian.rs",
        "tests/generated/packet_decl_64bit_scalar_array_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_array_dynamic_count_big_endian.rs",
        "tests/generated/packet_decl_array_dynamic_count_little_endian.rs",
        "tests/generated/packet_decl_array_dynamic_size_big_endian.rs",
        "tests/generated/packet_decl_array_dynamic_size_little_endian.rs",
        "tests/generated/packet_decl_array_unknown_element_width_dynamic_count_big_endian.rs",
        "tests/generated/packet_decl_array_unknown_element_width_dynamic_count_little_endian.rs",
        "tests/generated/packet_decl_array_unknown_element_width_dynamic_size_big_endian.rs",
        "tests/generated/packet_decl_array_unknown_element_width_dynamic_size_little_endian.rs",
        "tests/generated/packet_decl_array_with_padding_big_endian.rs",
        "tests/generated/packet_decl_array_with_padding_little_endian.rs",
        "tests/generated/packet_decl_child_packets_big_endian.rs",
        "tests/generated/packet_decl_child_packets_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_custom_field_big_endian.rs",
        "tests/generated/packet_decl_custom_field_little_endian.rs",
        "tests/generated/packet_decl_empty_big_endian.rs",
        "tests/generated/packet_decl_empty_little_endian.rs",
        "tests/generated/packet_decl_fixed_enum_field_big_endian.rs",
        "tests/generated/packet_decl_fixed_enum_field_little_endian.rs",
        "tests/generated/packet_decl_fixed_scalar_field_big_endian.rs",
        "tests/generated/packet_decl_fixed_scalar_field_little_endian.rs",
        "tests/generated/packet_decl_grand_children_big_endian.rs",
        "tests/generated/packet_decl_grand_children_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_parent_with_alias_child_big_endian.rs",
        "tests/generated/packet_decl_parent_with_alias_child_little_endian.rs",
        "tests/generated/packet_decl_parent_with_no_payload_big_endian.rs",
        "tests/generated/packet_decl_parent_with_no_payload_little_endian.rs",
        "tests/generated/packet_decl_payload_field_unknown_size_big_endian.rs",
        "tests/generated/packet_decl_payload_field_unknown_size_little_endian.rs",
        "tests/generated/packet_decl_payload_field_unknown_size_terminal_big_endian.rs",
        "tests/generated/packet_decl_payload_field_unknown_size_terminal_little_endian.rs",
        "tests/generated/packet_decl_payload_field_variable_size_big_endian.rs",
        "tests/generated/packet_decl_payload_field_variable_size_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",
    ],
}

rust_test_host {
    name: "pdl_tests",
    defaults: ["pdl_defaults"],
    srcs: ["src/main.rs"],
    proc_macros: [
        "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"],
    test_suites: ["general-tests"],
    clippy_lints: "none",
    lints: "none",
    defaults: ["pdl_backend_defaults"],
}

genrule_defaults {
    name: "pdl_rust_generator_defaults",
    cmd: "$(location :pdl) --output-format rust $(in) > $(out)",
    tools: [":pdl"],
    defaults_visibility: [
        "//external/uwb/src",
        "//packages/modules/Bluetooth:__subpackages__",
    ],
}

// 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_rust_test_file",
    defaults: ["pdl_be_test_file_defaults"],
    srcs: ["tests/canonical/le_rust_test_file.pdl"],
    out: ["be_rust_test_file.pdl"],
}

genrule {
    name: "pdl_be_test_file",
    defaults: ["pdl_be_test_file_defaults"],
    srcs: ["tests/canonical/le_test_file.pdl"],
    out: ["be_test_file.pdl"],
}

// 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: [":pdl_be_rust_test_file"],
    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"],
    clippy_lints: "none",
    lints: "none",
}

rust_library_host {
    name: "libpdl_be_backend",
    crate_name: "pdl_be_backend",
    srcs: [":pdl_be_backend"],
    defaults: ["pdl_backend_defaults"],
    clippy_lints: "none",
    lints: "none",
}

rust_binary_host {
    name: "pdl_generate_tests",
    srcs: ["src/bin/generate-canonical-tests.rs"],
    rustlibs: [
        "libprettyplease",
        "libproc_macro2",
        "libquote",
        "libserde",
        "libserde_json",
        "libsyn",
        "libtempfile",
    ],
}

genrule {
    name: "pdl_rust_generator_tests_le_src",
    cmd: "$(location :pdl_generate_tests) $(in) pdl_le_backend > $(out)",
    srcs: ["tests/canonical/le_test_vectors.json"],
    out: ["le_canonical.rs"],
    tools: [":pdl_generate_tests"],
}

genrule {
    name: "pdl_rust_generator_tests_be_src",
    cmd: "$(location :pdl_generate_tests) $(in) pdl_be_backend > $(out)",
    srcs: ["tests/canonical/be_test_vectors.json"],
    out: ["be_canonical.rs"],
    tools: [":pdl_generate_tests"],
}

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",
    ],
    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"],
    rustlibs: [
        "libnum_traits",
        "libpdl_be_backend",
        "libserde_json",
    ],
    clippy_lints: "none",
    lints: "none",
}

// Defaults for PDL python backend generation.
genrule_defaults {
    name: "pdl_python_generator_defaults",
    tools: [
        ":pdl",
        ":pdl_python_generator",
    ],
}

// Defaults for PDL python backend generation.
genrule_defaults {
    name: "pdl_cxx_generator_defaults",
    tools: [
        ":pdl",
        ":pdl_cxx_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 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 :pdl) $(in) |" +
        " $(location :pdl_python_generator)" +
        " --output $(out) --custom-type-location tests.custom_types",
    tool_files: [
        "tests/custom_types.py",
    ],
    srcs: [
        ":pdl_be_test_file",
    ],
    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,
        },
    },
}

// Defaults for the rust_noalloc backend
genrule_defaults {
    name: "pdl_rust_noalloc_generator_defaults",
    cmd: "$(location :pdl) --output-format rust_no_alloc $(in) > $(out)",
    tools: [":pdl"],
}

// 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 rust_noalloc test harness srcs for the supplied test vectors
genrule {
    name: "pdl_rust_noalloc_le_test_gen_harness",
    cmd: "set -o pipefail;" +
        " $(location :pdl) $(in) --output-format rust_no_alloc_test" +
        " > $(out)",
    srcs: ["tests/canonical/le_rust_noalloc_test_file.pdl"],
    out: ["test_rust_noalloc_parser.rs"],
    tools: [":pdl"],
}

// The test target for rust_noalloc
rust_test_host {
    name: "pdl_rust_noalloc_le_test",
    srcs: [
        ":pdl_rust_noalloc_le_test_gen_harness",

        ":pdl_rust_noalloc_le_test_backend_srcs",
    ],
    test_suites: ["general-tests"],
}

// 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 :pdl) $(in) |" +
        " $(location :pdl_cxx_generator)" +
        " --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 :pdl) $${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: [
        ":pdl",
        ":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 :pdl) $(in) |" +
        " $(location :pdl_cxx_generator)" +
        " --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 :pdl) $${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: [
        ":pdl",
        ":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",
    ],
}

tools/pdl/CONTRIBUTING.md

deleted100644 → 0
+0 −33
Original line number Diff line number Diff line
# How to contribute

We'd love to accept your patches and contributions to this project.

## Before you begin

### Sign our Contributor License Agreement

Contributions to this project must be accompanied by a
[Contributor License Agreement](https://cla.developers.google.com/about) (CLA).
You (or your employer) retain the copyright to your contribution; this simply
gives us permission to use and redistribute your contributions as part of the
project.

If you or your current employer have already signed the Google CLA (even if it
was for a different project), you probably don't need to do it again.

Visit <https://cla.developers.google.com/> to see your current agreements or to
sign a new one.

### Review our community guidelines

This project follows
[Google's Open Source Community Guidelines](https://opensource.google/conduct/).

## Contribution process

### Code reviews

All submissions, including submissions by project members, require review. We
use GitHub pull requests for this purpose. Consult
[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
information on using pull requests.

tools/pdl/Cargo.toml

deleted100644 → 0
+0 −35
Original line number Diff line number Diff line
[package]
name = "pdl"
version = "0.1.0"
edition = "2021"
default-run = "pdl"

[workspace]

[features]
default = ["serde"]

[dependencies]
codespan-reporting = "0.11.1"
heck = "0.4.0"
pest = "2.5.5"
pest_derive = "2.5.5"
proc-macro2 = "1.0.46"
quote = "1.0.21"
serde_json = "1.0.86"
argh = "0.1.7"
syn = "2.0.16"
prettyplease = "0.2.6"

[dependencies.serde]
version = "1.0.145"
features = ["default", "derive", "serde_derive", "std", "rc"]
optional = true

[dev-dependencies]
tempfile = "3.3.0"
bytes = { version = "1.2.1", features = ["serde"] }
num-derive = "0.3.3"
num-traits = "0.2.15"
thiserror = "1.0.37"
paste = "1.0.6"
Loading