blob: 1160ea95b99737766a6ba9e0505583d4ce73cb53 [file] [log] [blame]
// This file is generated by cargo_embargo.
// Do not modify this file as changes will be overridden on upgrade.
rust_binary_host {
name: "generate_canonical_tests",
crate_name: "generate_canonical_tests",
cargo_env_compat: true,
cargo_pkg_version: "0.2.3",
srcs: ["src/bin/generate-canonical-tests.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",
}
rust_library_host {
name: "libpdl_compiler",
crate_name: "pdl_compiler",
cargo_env_compat: true,
cargo_pkg_version: "0.2.3",
srcs: ["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",
crate_name: "pdlc",
cargo_env_compat: true,
cargo_pkg_version: "0.2.3",
srcs: ["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__",
],
}
// 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/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",
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"],
test_suites: ["general-tests"],
clippy_lints: "none",
lints: "none",
defaults: ["pdl_backend_defaults"],
}
// 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"],
}
// Generate the Rust parser+serializer backends.
genrule {
name: "pdl_le_backend",
tools: [":pdlc"],
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" +
" $(in) > $(out)",
srcs: ["tests/canonical/le_test_file.pdl"],
out: ["le_backend.rs"],
}
genrule {
name: "pdl_be_backend",
tools: [":pdlc"],
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" +
" $(in) > $(out)",
srcs: [":pdl_be_test_file"],
out: ["be_backend.rs"],
}
rust_defaults {
name: "pdl_backend_defaults",
features: ["serde"],
rustlibs: [
"libbytes",
"libserde",
"libtempfile",
"libpdl_runtime",
],
}
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",
}
genrule {
name: "pdl_rust_generator_tests_le_src",
cmd: "$(location :generate_canonical_tests) $(in) pdl_le_backend > $(out)",
srcs: ["tests/canonical/le_test_vectors.json"],
out: ["le_canonical.rs"],
tools: [":generate_canonical_tests"],
}
genrule {
name: "pdl_rust_generator_tests_be_src",
cmd: "$(location :generate_canonical_tests) $(in) pdl_be_backend > $(out)",
srcs: ["tests/canonical/be_test_vectors.json"],
out: ["be_canonical.rs"],
tools: [":generate_canonical_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",
"libpdl_runtime",
"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",
"libpdl_runtime",
"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)" +
" --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)" +
" --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)" +
" --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)" +
" --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",
],
}