# 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.

# Emboss C++ code generator.

load(":build_defs.bzl", "emboss_cc_test")

package(
    default_visibility = [
        "//visibility:private",
    ],
    features = ["-layering_check"],
)

py_binary(
    name = "emboss_codegen_cpp",
    srcs = ["emboss_codegen_cpp.py"],
    python_version = "PY3",
    visibility = ["//visibility:public"],
    deps = [
        ":header_generator",
        "//compiler/util:ir_pb2",
    ],
)

py_library(
    name = "header_generator",
    srcs = ["header_generator.py"],
    data = [
        "generated_code_templates",
    ],
    deps = [
        "//compiler/back_end/util:code_template",
        "//compiler/util:attribute_util",
        "//compiler/util:ir_pb2",
        "//compiler/util:ir_util",
        "//compiler/util:name_conversion",
    ],
)

py_test(
    name = "header_generator_test",
    srcs = ["header_generator_test.py"],
    deps = [
        ":header_generator",
        "//compiler/front_end:glue",
        "//compiler/util:test_util",
    ],
)

emboss_cc_test(
    name = "span_se_log_file_status_emb_generated_code_test",
    srcs = [
        "testcode/read_log_file_status_test.cc",
    ],
    deps = [
        "//testdata:span_se_log_file_status_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "nested_structure_test",
    srcs = [
        "testcode/nested_structure_test.cc",
    ],
    deps = [
        "//testdata:nested_structure_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "alignments_test",
    srcs = [
        "testcode/alignments_test.cc",
    ],
    deps = [
        "//testdata:alignments_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "condition_test",
    srcs = [
        "testcode/condition_test.cc",
    ],
    deps = [
        "//testdata:condition_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "enum_test",
    srcs = [
        "testcode/enum_test.cc",
    ],
    deps = [
        "//testdata:enum_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "explicit_sizes_test",
    srcs = [
        "testcode/explicit_sizes_test.cc",
    ],
    deps = [
        "//testdata:explicit_sizes_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "importer_test",
    srcs = [
        "testcode/importer_test.cc",
    ],
    deps = [
        "//testdata:importer_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "importer2_test",
    srcs = [
        "testcode/importer2_test.cc",
    ],
    deps = [
        "//testdata:importer2_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "uint_sizes_test",
    srcs = [
        "testcode/uint_sizes_test.cc",
    ],
    deps = [
        "//testdata:uint_sizes_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "int_sizes_test",
    srcs = [
        "testcode/int_sizes_test.cc",
    ],
    deps = [
        "//testdata:int_sizes_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "float_test",
    srcs = [
        "testcode/float_test.cc",
    ],
    deps = [
        "//testdata:float_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "dynamic_size_test",
    srcs = [
        "testcode/dynamic_size_test.cc",
    ],
    deps = [
        "//testdata:dynamic_size_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "auto_array_size_test",
    srcs = [
        "testcode/auto_array_size_test.cc",
    ],
    deps = [
        "//testdata:auto_array_size_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "start_size_range_test",
    srcs = [
        "testcode/start_size_range_test.cc",
    ],
    deps = [
        "//testdata:start_size_range_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "bcd_test",
    srcs = [
        "testcode/bcd_test.cc",
    ],
    deps = [
        "//testdata:bcd_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "namespace_test",
    srcs = [
        "testcode/namespace_test.cc",
    ],
    deps = [
        "//testdata:absolute_cpp_namespace_emboss",
        "//testdata:cpp_namespace_emboss",
        "//testdata:no_cpp_namespace_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "requires_test",
    srcs = [
        "testcode/requires_test.cc",
    ],
    deps = [
        "//testdata:requires_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "subtypes_test",
    srcs = [
        "testcode/subtypes_test.cc",
    ],
    deps = [
        "//testdata:subtypes_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "inline_type_test",
    srcs = [
        "testcode/inline_type_test.cc",
    ],
    deps = [
        "//testdata:inline_type_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "bits_test",
    srcs = [
        "testcode/bits_test.cc",
    ],
    deps = [
        "//runtime/cpp:cpp_utils",
        "//testdata:bits_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "anonymous_bits_test",
    srcs = [
        "testcode/anonymous_bits_test.cc",
    ],
    deps = [
        "//runtime/cpp:cpp_utils",
        "//testdata:anonymous_bits_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "next_keyword_test",
    srcs = [
        "testcode/next_keyword_test.cc",
    ],
    deps = [
        "//testdata:next_keyword_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "virtual_field_test",
    srcs = [
        "testcode/virtual_field_test.cc",
    ],
    deps = [
        "//testdata:virtual_field_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "text_format_test",
    srcs = [
        "testcode/text_format_test.cc",
    ],
    deps = [
        "//testdata:text_format_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "parameters_test",
    srcs = [
        "testcode/parameters_test.cc",
    ],
    deps = [
        "//testdata:parameters_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "complex_structure_test",
    srcs = ["testcode/complex_structure_test.cc"],
    deps = [
        "//testdata:complex_structure_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)

emboss_cc_test(
    name = "complex_offset_test",
    srcs = ["testcode/complex_offset_test.cc"],
    deps = [
        "//testdata:complex_offset_emboss",
        "@com_google_googletest//:gtest_main",
    ],
)
