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

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

licenses(["notice"])  # Apache License 2.0

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",
        "pw_tokenizer_private/encode_args.h",
        "tokenize.cc",
    ],
    hdrs = [
        "public/pw_tokenizer/hash.h",
        "public/pw_tokenizer/tokenize.h",
    ],
    includes = ["public"],
    deps = [
        "//pw_polyfill",
        "//pw_preprocessor",
        "//pw_span",
        "//pw_varint",
    ],
)

# TODO(pwbug/101): Need to add support for facades/backends to Bazel.
PW_TOKENIZER_GLOBAL_HANDLER_BACKEND = "//pw_tokenizer:test_backend"

PW_TOKENIZER_GLOBAL_HANDLER_WITH_PAYLOAD_BACKEND = "//pw_tokenizer:test_backend"

pw_cc_library(
    name = "test_backend",
    visibility = ["//visibility:private"],
)

pw_cc_library(
    name = "global_handler",
    srcs = ["tokenize_to_global_handler.cc"],
    hdrs = ["public/pw_tokenizer/tokenize_to_global_handler.h"],
    deps = [
        ":pw_tokenizer",
        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",
        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_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_span",
        "//pw_varint",
    ],
)

# 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",
        "tokenize_test_fakes.cc",
    ],
    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.
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",
        "tokenize_test_fakes.cc",
    ],
    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_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",
        "tokenize_test_fakes.cc",
    ],
    deps = [
        ":pw_tokenizer",
        "//pw_preprocessor",
        "//pw_unit_test",
    ],
)

pw_cc_test(
    name = "simple_tokenize_test",
    srcs = [
        "simple_tokenize_test.cc",
    ],
    deps = [
        ":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",
    ],
)
