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

load("//iree/tools:compilation.bzl", "iree_bytecode_module")

package(
    default_visibility = ["//visibility:public"],
    features = ["layering_check"],
    licenses = ["notice"],  # Apache 2.0
)

#===------------------------------------------------------------------------===#
# Public API
#===------------------------------------------------------------------------===#

cc_library(
    name = "vm",
    hdrs = [
        "api.h",
    ],
    deps = [
        ":impl",
        "//iree/base:api",
    ],
)

# TODO(benvanik): make these srcs and only expose an api_cc.h.
cc_library(
    name = "cc",
    hdrs = [
        "module_abi_packing.h",
        "native_module_cc.h",
        "ref_cc.h",
    ],
    deps = [
        ":vm",
        "//iree/base:api",
        "//iree/base:ref_ptr",
        "//iree/base:status",
        "@com_google_absl//absl/base:core_headers",
        "@com_google_absl//absl/container:inlined_vector",
        "@com_google_absl//absl/strings",
        "@com_google_absl//absl/types:optional",
        "@com_google_absl//absl/types:span",
    ],
)

#===------------------------------------------------------------------------===#
# Implementation
#===------------------------------------------------------------------------===#

cc_library(
    name = "impl",
    srcs = [
        "builtin_types.c",
        "context.c",
        "instance.c",
        "invocation.c",
        "list.c",
        "module.c",
        "native_module.c",
        "ref.c",
        "stack.c",
    ],
    hdrs = [
        "builtin_types.h",
        "context.h",
        "instance.h",
        "invocation.h",
        "list.h",
        "module.h",
        "native_module.h",
        "ref.h",
        "stack.h",
        "type_def.h",
        "value.h",
    ],
    deps = [
        "//iree/base:api",
        "//iree/base:core_headers",
        "//iree/base:tracing",
    ],
)

cc_test(
    name = "list_test",
    srcs = ["list_test.cc"],
    deps = [
        ":impl",
        "//iree/base:api",
        "//iree/base:ref_ptr",
        "//iree/testing:gtest",
        "//iree/testing:gtest_main",
    ],
)

cc_test(
    name = "native_module_test",
    srcs = ["native_module_test.cc"],
    deps = [
        ":cc",
        ":impl",
        ":native_module_test_hdrs",
        "//iree/base:api",
        "//iree/base:status",
        "//iree/testing:gtest",
        "//iree/testing:gtest_main",
    ],
)

cc_library(
    name = "native_module_test_hdrs",
    hdrs = [
        "native_module_test.h",
    ],
    deps = [
        ":impl",
        "//iree/base:api",
    ],
)

cc_test(
    name = "native_module_benchmark",
    srcs = ["native_module_benchmark.cc"],
    deps = [
        ":impl",
        ":native_module_test_hdrs",
        "//iree/base:api",
        "//iree/base:logging",
        "//iree/testing:benchmark_main",
        "@com_google_benchmark//:benchmark",
    ],
)

cc_test(
    name = "ref_test",
    srcs = ["ref_test.cc"],
    deps = [
        ":impl",
        "//iree/base:api",
        "//iree/base:ref_ptr",
        "//iree/testing:gtest",
        "//iree/testing:gtest_main",
    ],
)

cc_test(
    name = "stack_test",
    srcs = ["stack_test.cc"],
    deps = [
        ":impl",
        "//iree/base:api",
        "//iree/base:ref_ptr",
        "//iree/testing:gtest",
        "//iree/testing:gtest_main",
    ],
)

#===------------------------------------------------------------------------===#
# Bytecode interpreter module
#===------------------------------------------------------------------------===#

cc_library(
    name = "bytecode_module",
    srcs = [
        "bytecode_dispatch.c",
        "bytecode_dispatch_util.h",
        "bytecode_module.c",
        "bytecode_module_impl.h",
        "generated/bytecode_op_table.h",
    ],
    hdrs = [
        "bytecode_module.h",
    ],
    deps = [
        ":vm",
        "//iree/base:api",
        "//iree/base:core_headers",
        "//iree/base:flatcc",
        "//iree/base:tracing",
        "//iree/schemas:bytecode_module_def_c_fbs",
    ],
)

# TODO(#357): Add a script to update bytecode_op_table.h.
# gentbl(
#     name = "bytecode_op_table_gen",
#     tbl_outs = [
#         ("-gen-iree-vm-op-table-defs", "bytecode_op_table.h"),
#     ],
#     tblgen = "//iree/tools:iree-tblgen",
#     td_file = "//iree/compiler/Dialect/VM/IR:VMOps.td",
#     td_srcs = [
#         "//iree/compiler/Dialect/IREE/IR:td_files",
#         "//iree/compiler/Dialect/VM/IR:td_files",
#         "@llvm-project//mlir:OpBaseTdFiles",
#         "@llvm-project//mlir:include/mlir/IR/SymbolInterfaces.td",
#         "@llvm-project//mlir:include/mlir/Interfaces/CallInterfaces.td",
#         "@llvm-project//mlir:include/mlir/Interfaces/ControlFlowInterfaces.td",
#         "@llvm-project//mlir:SideEffectTdFiles",
#     ],
# )

cc_test(
    name = "bytecode_module_test",
    srcs = [
        "bytecode_dispatch_test.cc",
        "bytecode_module_test.cc",
    ],
    deps = [
        ":bytecode_module",
        ":vm",
        "//iree/base:logging",
        "//iree/base:status",
        "//iree/testing:gtest",
        "//iree/testing:gtest_main",
        "//iree/vm/test:all_bytecode_modules_cc",
        "@com_google_absl//absl/strings",
    ],
)

cc_test(
    name = "bytecode_module_benchmark",
    srcs = ["bytecode_module_benchmark.cc"],
    deps = [
        ":bytecode_module",
        ":bytecode_module_benchmark_module_cc",
        ":vm",
        "//iree/base:api",
        "//iree/base:logging",
        "//iree/testing:benchmark_main",
        "@com_google_absl//absl/container:inlined_vector",
        "@com_google_absl//absl/strings",
        "@com_google_benchmark//:benchmark",
    ],
)

iree_bytecode_module(
    name = "bytecode_module_benchmark_module",
    src = "bytecode_module_benchmark.mlir",
    cc_namespace = "iree::vm",
    flags = ["-iree-vm-ir-to-bytecode-module"],
)

cc_test(
    name = "bytecode_module_size_benchmark",
    srcs = ["bytecode_module_size_benchmark.cc"],
    deps = [
        ":bytecode_module",
        ":bytecode_module_size_benchmark_module_cc",
        ":vm",
        "//iree/base:api",
    ],
)

iree_bytecode_module(
    name = "bytecode_module_size_benchmark_module",
    src = "bytecode_module_size_benchmark.mlir",
    cc_namespace = "iree::vm",
    flags = ["-iree-vm-ir-to-bytecode-module"],
)

#===------------------------------------------------------------------------===#
# Emit-C modules
#===------------------------------------------------------------------------===#

cc_library(
    name = "c_funcs",
    hdrs = [
        "c_funcs.h",
    ],
)
