# Copyright 2019 Google LLC
#
# 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.

# Shared test data for Emboss.

load(
    "//:build_defs.bzl",
    "cc_emboss_library",
    "emboss_cc_library",
    "emboss_library",
)

package(
    default_visibility = ["//:__subpackages__"],
)

filegroup(
    name = "golden_files",
    srcs = [
        "golden/__init__.py",
        "golden/span_se_log_file_status.emb",
        "golden/span_se_log_file_status.ir.txt",
        "golden/span_se_log_file_status.parse_tree.txt",
        "golden/span_se_log_file_status.tokens.txt",
    ],
)

filegroup(
    name = "test_embs",
    srcs = [
        "__init__.py",
        "absolute_cpp_namespace.emb",
        "anonymous_bits.emb",
        "bcd.emb",
        "bits.emb",
        "complex_structure.emb",
        "condition.emb",
        "cpp_namespace.emb",
        "dynamic_size.emb",
        "enum.emb",
        "enum_case.emb",
        "explicit_sizes.emb",
        "float.emb",
        "import_dir/project/imported.emb",
        "import_dir/project/importer.emb",
        "imported.emb",
        "imported_genfiles.emb",
        "importer.emb",
        "int_sizes.emb",
        "nested_structure.emb",
        "next_keyword.emb",
        "no_cpp_namespace.emb",
        "parameters.emb",
        "requires.emb",
        "subtypes.emb",
        "text_format.emb",
        "uint_sizes.emb",
        "virtual_field.emb",
    ],
)

filegroup(
    name = "format_embs",
    srcs = glob(["format/**"]),
)

emboss_library(
    name = "span_se_log_file_status_emb_ir",
    srcs = [
        "golden/span_se_log_file_status.emb",
    ],
)

cc_emboss_library(
    name = "span_se_log_file_status_emboss",
    deps = [
        ":span_se_log_file_status_emb_ir",
    ],
)

emboss_cc_library(
    name = "nested_structure_emboss",
    srcs = [
        "nested_structure.emb",
    ],
)

emboss_cc_library(
    name = "condition_emboss",
    srcs = [
        "condition.emb",
    ],
)

emboss_cc_library(
    name = "enum_emboss",
    srcs = [
        "enum.emb",
    ],
    # This tag is arbitrary, and exists to ensure you can pass atributes common
    # to all build rules to the underlying rules.
    tags = ["an_arbitrary_tag"],
)

emboss_cc_library(
    name = "enum_case_emboss",
    srcs = [
        "enum_case.emb",
    ],
)

emboss_cc_library(
    name = "explicit_sizes_emboss",
    srcs = [
        "explicit_sizes.emb",
    ],
)

emboss_cc_library(
    name = "imported_emboss",
    srcs = [
        "imported.emb",
    ],
)

emboss_cc_library(
    name = "import_dir_imported_emboss",
    srcs = [
        "import_dir/project/imported.emb",
    ],
)

# This rule is here to test that the Emboss Skylark macro sets eveything up
# correctly for the Emboss front end to read generated .embs.
#
# TODO(bolms): Should genrules with output_to_bindir = 1 be supported as inputs
# to emboss_cc_library?
genrule(
    name = "imported_genfiles",
    srcs = ["imported.emb"],
    outs = ["imported_genfiles.emb"],
    cmd = "sed -e 's/emboss::test/emboss::test::generated/g' $(SRCS) > $(@)",
)

emboss_cc_library(
    name = "imported_genfiles_emboss",
    srcs = [
        "imported_genfiles.emb",
    ],
)

emboss_cc_library(
    name = "alignments_emboss",
    srcs = [
        "alignments.emb",
    ],
)

emboss_cc_library(
    name = "importer_emboss",
    srcs = [
        "importer.emb",
    ],
    deps = [
        ":imported_emboss",
        ":imported_genfiles_emboss",
    ],
)

# Tests that the `import_dirs` attribute works.
emboss_cc_library(
    name = "import_dir_importer_emboss",
    srcs = [
        "import_dir/project/importer.emb",
    ],
    import_dirs = [
        "import_dir",
    ],
    deps = [
        ":import_dir_imported_emboss",
    ],
)

emboss_cc_library(
    name = "importer2_emboss",
    srcs = [
        "importer2.emb",
    ],
    deps = [
        ":importer_emboss",
    ],
)

emboss_cc_library(
    name = "float_emboss",
    srcs = [
        "float.emb",
    ],
)

emboss_cc_library(
    name = "large_array_emboss",
    srcs = [
        "large_array.emb",
    ],
)

emboss_cc_library(
    name = "uint_sizes_emboss",
    srcs = [
        "uint_sizes.emb",
    ],
)

emboss_cc_library(
    name = "int_sizes_emboss",
    srcs = [
        "int_sizes.emb",
    ],
)

emboss_cc_library(
    name = "dynamic_size_emboss",
    srcs = [
        "dynamic_size.emb",
    ],
)

emboss_cc_library(
    name = "auto_array_size_emboss",
    srcs = [
        "auto_array_size.emb",
    ],
)

emboss_cc_library(
    name = "no_enum_traits_emboss",
    srcs = [
        "no_enum_traits.emb",
    ],
    enable_enum_traits = False,
)

emboss_cc_library(
    name = "start_size_range_emboss",
    srcs = [
        "start_size_range.emb",
    ],
)

emboss_cc_library(
    name = "bcd_emboss",
    srcs = [
        "bcd.emb",
    ],
)

emboss_cc_library(
    name = "no_cpp_namespace_emboss",
    srcs = [
        "no_cpp_namespace.emb",
    ],
)

emboss_cc_library(
    name = "cpp_namespace_emboss",
    srcs = [
        "cpp_namespace.emb",
    ],
)

emboss_cc_library(
    name = "absolute_cpp_namespace_emboss",
    srcs = [
        "absolute_cpp_namespace.emb",
    ],
)

emboss_cc_library(
    name = "requires_emboss",
    srcs = [
        "requires.emb",
    ],
)

emboss_cc_library(
    name = "subtypes_emboss",
    srcs = [
        "subtypes.emb",
    ],
)

emboss_cc_library(
    name = "inline_type_emboss",
    srcs = [
        "inline_type.emb",
    ],
)

emboss_cc_library(
    name = "bits_emboss",
    srcs = [
        "bits.emb",
    ],
)

emboss_cc_library(
    name = "complex_structure_emboss",
    srcs = [
        "complex_structure.emb",
    ],
)

emboss_cc_library(
    name = "anonymous_bits_emboss",
    srcs = [
        "anonymous_bits.emb",
    ],
)

emboss_cc_library(
    name = "text_format_emboss",
    srcs = [
        "text_format.emb",
    ],
)

emboss_cc_library(
    name = "parameters_emboss",
    srcs = [
        "parameters.emb",
    ],
)

emboss_cc_library(
    name = "virtual_field_emboss",
    srcs = [
        "virtual_field.emb",
    ],
)

emboss_cc_library(
    name = "next_keyword_emboss",
    srcs = [
        "next_keyword.emb",
    ],
)

emboss_cc_library(
    name = "complex_offset_emboss",
    srcs = [
        "complex_offset.emb",
    ],
)
