# Copyright 2020 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(
    "//pw_build:pigweed.bzl",
    "pw_cc_binary",
    "pw_cc_library",
    "pw_cc_test",
)
load("//pw_fuzzer:fuzzer.bzl", "pw_cc_fuzz_test")

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

licenses(["notice"])

pw_cc_library(
    name = "pw_tokenizer",
    srcs = [
        "encode_args.cc",
        "hash.cc",
        "public/pw_tokenizer/config.h",
        "public/pw_tokenizer/internal/argument_types.h",
        "public/pw_tokenizer/internal/argument_types_macro_4_byte.h",
        "public/pw_tokenizer/internal/argument_types_macro_8_byte.h",
        "public/pw_tokenizer/internal/pw_tokenizer_65599_fixed_length_128_hash_macro.h",
        "public/pw_tokenizer/internal/pw_tokenizer_65599_fixed_length_256_hash_macro.h",
        "public/pw_tokenizer/internal/pw_tokenizer_65599_fixed_length_80_hash_macro.h",
        "public/pw_tokenizer/internal/pw_tokenizer_65599_fixed_length_96_hash_macro.h",
        "public/pw_tokenizer/internal/tokenize_string.h",
        "tokenize.cc",
    ],
    hdrs = [
        "public/pw_tokenizer/encode_args.h",
        "public/pw_tokenizer/hash.h",
        "public/pw_tokenizer/tokenize.h",
    ],
    includes = ["public"],
    deps = [
        "//pw_bytes:bit",
        "//pw_containers:to_array",
        "//pw_polyfill",
        "//pw_preprocessor",
        "//pw_span",
        "//pw_varint",
    ],
)

pw_cc_library(
    name = "test_backend",
    visibility = ["@pigweed_config//:__pkg__"],
)

pw_cc_library(
    name = "global_handler",
    srcs = ["tokenize_to_global_handler.cc"],
    hdrs = ["public/pw_tokenizer/tokenize_to_global_handler.h"],
    deps = [
        ":pw_tokenizer",
        "@pigweed_config//:pw_tokenizer_global_handler_backend",
    ],
)

pw_cc_library(
    name = "global_handler_with_payload",
    srcs = ["tokenize_to_global_handler_with_payload.cc"],
    hdrs = ["public/pw_tokenizer/tokenize_to_global_handler_with_payload.h"],
    deps = [
        ":pw_tokenizer",
        "@pigweed_config//:pw_tokenizer_global_handler_with_payload_backend",
    ],
)

pw_cc_library(
    name = "base64",
    srcs = [
        "base64.cc",
    ],
    hdrs = [
        "public/pw_tokenizer/base64.h",
    ],
    includes = ["public"],
    deps = [
        ":pw_tokenizer",
        "//pw_base64",
        "//pw_preprocessor",
        "//pw_span",
    ],
)

pw_cc_library(
    name = "decoder",
    srcs = [
        "decode.cc",
        "detokenize.cc",
        "token_database.cc",
    ],
    hdrs = [
        "public/pw_tokenizer/detokenize.h",
        "public/pw_tokenizer/internal/decode.h",
        "public/pw_tokenizer/token_database.h",
    ],
    includes = ["public"],
    deps = [
        "//pw_bytes",
        "//pw_span",
        "//pw_varint",
    ],
)

proto_library(
    name = "tokenizer_proto",
    srcs = [
        "options.proto",
    ],
    import_prefix = "pw_tokenizer/proto",
    strip_import_prefix = "//pw_tokenizer",
    deps = [
        "@com_google_protobuf//:descriptor_proto",
    ],
)

# Executable for generating test data for the C++ and Python detokenizers. This
# target should only be built for the host.
pw_cc_binary(
    name = "generate_decoding_test_data",
    srcs = [
        "generate_decoding_test_data.cc",
    ],
    target_compatible_with = select(
        {
            "@platforms//os:linux": [],
            "@platforms//os:windows": [],
            "@platforms//os:macos": [],
            "//conditions:default": ["@platforms//:incompatible"],
        },
    ),
    deps = [
        ":decoder",
        ":pw_tokenizer",
        "//pw_preprocessor",
        "//pw_span",
        "//pw_varint",
    ],
)

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

pw_cc_test(
    name = "argument_types_test",
    srcs = [
        "argument_types_test.cc",
        "argument_types_test_c.c",
        "pw_tokenizer_private/argument_types_test.h",
    ],
    deps = [
        ":pw_tokenizer",
        "//pw_preprocessor",
        "//pw_unit_test",
    ],
)

pw_cc_test(
    name = "base64_test",
    srcs = [
        "base64_test.cc",
    ],
    deps = [
        ":base64",
        "//pw_span",
        "//pw_unit_test",
    ],
)

pw_cc_test(
    name = "decode_test",
    srcs = [
        "decode_test.cc",
        "pw_tokenizer_private/tokenized_string_decoding_test_data.h",
        "pw_tokenizer_private/varint_decoding_test_data.h",
    ],
    deps = [
        ":decoder",
        "//pw_unit_test",
        "//pw_varint",
    ],
)

pw_cc_test(
    name = "detokenize_test",
    srcs = [
        "detokenize_test.cc",
    ],
    deps = [
        ":decoder",
        "//pw_unit_test",
    ],
)

pw_cc_fuzz_test(
    name = "detokenize_fuzzer",
    srcs = ["detokenize_fuzzer.cc"],
    deps = [
        ":decoder",
        ":pw_tokenizer",
        "//pw_fuzzer",
    ],
)

pw_cc_test(
    name = "global_handlers_test",
    srcs = [
        "global_handlers_test.cc",
        "global_handlers_test_c.c",
        "pw_tokenizer_private/tokenize_test.h",
    ],
    deps = [
        ":global_handler",
        ":global_handler_with_payload",
    ],
)

pw_cc_test(
    name = "hash_test",
    srcs = [
        "hash_test.cc",
        "pw_tokenizer_private/generated_hash_test_cases.h",
    ],
    deps = [
        ":pw_tokenizer",
        "//pw_preprocessor",
        "//pw_unit_test",
    ],
)

pw_cc_test(
    name = "simple_tokenize_test",
    srcs = [
        "simple_tokenize_test.cc",
    ],
    deps = [
        ":global_handler",
        ":global_handler_with_payload",
        ":pw_tokenizer",
        "//pw_unit_test",
    ],
)

pw_cc_test(
    name = "token_database_test",
    srcs = [
        "token_database_test.cc",
    ],
    deps = [
        ":decoder",
        "//pw_unit_test",
    ],
)

pw_cc_test(
    name = "tokenize_test",
    srcs = [
        "pw_tokenizer_private/tokenize_test.h",
        "tokenize_test.cc",
        "tokenize_test_c.c",
    ],
    deps = [
        ":pw_tokenizer",
        "//pw_preprocessor",
        "//pw_unit_test",
        "//pw_varint",
    ],
)

# Create a shared library for the tokenizer JNI wrapper. The include paths for
# the JNI headers must be available in the system or provided with the
# pw_java_native_interface_include_dirs variable.
filegroup(
    name = "detokenizer_jni",
    srcs = [
        "java/dev/pigweed/tokenizer/detokenizer.cc",
    ],
)
