# 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")

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",
    ],
    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"],
)

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

# This test can't be built in bazel because it depends on detokenize_proto_test_pb2.
filegroup(
    name = "detokenize_proto_test",
    srcs = [
        "detokenize_proto_test.py",
    ],
    # deps = [
    #   ":pw_tokenizer",
    #   ":detokenize_proto_test_pb2",
    # ],
)

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

# TODO(b/241456982): This target can't be built due to limitations of
# py_proto_library.
# py_proto_library(
#  name = "detokenize_proto_test_pb2",
#  srcs = ["detokenize_proto_test.proto"],
#  deps = [
#    "//pw_tokenizer:tokenizer_pb2",
#  ],
#)

py_test(
    name = "detokenize_test",
    srcs = ["detokenize_test.py"],
    data = [
        "example_binary_with_tokenized_strings.elf",
    ],
    deps = [
        ":pw_tokenizer",
        "@rules_python//python/runfiles",
    ],
)

py_test(
    name = "elf_reader_test",
    srcs = ["elf_reader_test.py"],
    data = [
        "elf_reader_test_binary.elf",
    ],
    deps = [
        ":pw_tokenizer",
        "@rules_python//python/runfiles",
    ],
)

# 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",
    ],
)

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

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