# Copyright 2022 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

load("@rules_python//python:defs.bzl", "py_binary", "py_library")
load("@rules_python//python:proto.bzl", "py_proto_library")
load("//pw_build:python.bzl", "pw_py_test")

package(default_visibility = ["//visibility:public"])

py_library(
    name = "pw_tokenizer",
    srcs = [
        "pw_tokenizer/__init__.py",
        "pw_tokenizer/database.py",
        "pw_tokenizer/decode.py",
        "pw_tokenizer/detokenize.py",
        "pw_tokenizer/elf_reader.py",
        "pw_tokenizer/encode.py",
        "pw_tokenizer/parse_message.py",
        "pw_tokenizer/proto/__init__.py",
        "pw_tokenizer/serial_detokenizer.py",
        "pw_tokenizer/tokens.py",
    ],
    imports = ["."],
    deps = [
        "//pw_cli/py:pw_cli",
    ],
)

py_binary(
    name = "detokenize",
    srcs = [
        "pw_tokenizer/__main__.py",
    ],
    main = "pw_tokenizer/__main__.py",
    deps = [":pw_tokenizer"],
)

# This test attempts to directly access files in the source tree, which is
# incompatible with sandboxing.
# TODO: b/241307309 - Fix this test.
filegroup(
    name = "database_test",
    srcs = ["database_test.py"],
    # deps = [":pw_tokenizer"],
)

pw_py_test(
    name = "decode_test",
    srcs = [
        "decode_test.py",
        "tokenized_string_decoding_test_data.py",
        "varint_test_data.py",
    ],
    deps = [":pw_tokenizer"],
)

pw_py_test(
    name = "detokenize_proto_test",
    srcs = [
        "detokenize_proto_test.py",
    ],
    deps = [
        ":detokenize_proto_test_pb2",
        ":pw_tokenizer",
    ],
)

proto_library(
    name = "detokenize_proto_test_proto",
    srcs = ["detokenize_proto_test.proto"],
    import_prefix = "pw_tokenizer_tests",
    strip_import_prefix = "/pw_tokenizer/py",
    deps = [
        "//pw_tokenizer:tokenizer_proto",
    ],
)

py_proto_library(
    name = "detokenize_proto_test_pb2",
    deps = [":detokenize_proto_test_proto"],
)

filegroup(
    name = "example_binary_with_tokenized_strings",
    srcs = ["example_binary_with_tokenized_strings.elf"],
)

pw_py_test(
    name = "detokenize_test",
    srcs = ["detokenize_test.py"],
    data = [
        "example_binary_with_tokenized_strings.elf",
    ],
    deps = [
        ":pw_tokenizer",
    ],
)

pw_py_test(
    name = "elf_reader_test",
    srcs = ["elf_reader_test.py"],
    data = [
        "elf_reader_test_binary.elf",
    ],
    deps = [
        ":pw_tokenizer",
    ],
)

# Executable for generating a test ELF file for elf_reader_test.py. A host
# version of this binary is checked in for use in elf_reader_test.py.
# Commented out because it fails to compile with bazel, with the error
# ld.lld: error: symbol 'main' has no type. Instead use a filegroup to
# keep pw_presubmit happy.
# cc_binary(
#     name = "elf_reader_test_binary",
#     srcs = [
#         "py/elf_reader_test_binary.c",
#     ],
#     linkopts = ["-Wl,--unresolved-symbols=ignore-all"],  # main is not defined
#     deps = [
#         ":pw_tokenizer",
#         "//pw_varint",
#     ],
# )
filegroup(
    name = "elf_reader_test_binary",
    srcs = [
        "elf_reader_test_binary.c",
    ],
)

pw_py_test(
    name = "encode_test",
    srcs = [
        "encode_test.py",
        "varint_test_data.py",
    ],
    deps = [":pw_tokenizer"],
)

pw_py_test(
    name = "tokens_test",
    srcs = ["tokens_test.py"],
    deps = [":pw_tokenizer"],
)
