# Copyright 2021 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
"""Configures a separate workspace for IREE's TF integrations.

This is siloed to limit TF complexity from leaking into the main project. It
adds the core IREE project and its submodules as repo aliases based on relative
directory paths."""

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")

IREE_PATH = "../.."

#################################### Skylib ####################################
http_archive(
    name = "bazel_skylib",
    sha256 = "97e70364e9249702246c0e9444bccdc4b847bed1eb03c5a3ece4f83dfe6abc44",
    urls = [
        "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.2/bazel-skylib-1.0.2.tar.gz",
        "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.2/bazel-skylib-1.0.2.tar.gz",
    ],
)

load("@bazel_skylib//lib:paths.bzl", "paths")
################################################################################

################################## TensorFlow ##################################
maybe(
    local_repository,
    name = "org_tensorflow",
    path = paths.join(IREE_PATH, "third_party/tensorflow"),
)

# Import all of the tensorflow dependencies. Note that we are deliberately
# letting TensorFlow take control of all the dependencies it sets up, whereas
# ours are initialized with `maybe`. Actually tracking this with Bazel is PITA
# and for now this gets TF stuff building. This includes, for instance,
# @llvm-project and @com_google_absl.
load("@org_tensorflow//tensorflow:workspace3.bzl", "tf_workspace3")

tf_workspace3()

load("@org_tensorflow//tensorflow:workspace2.bzl", "tf_workspace2")

tf_workspace2()

load("@org_tensorflow//tensorflow:workspace1.bzl", "tf_workspace1")

tf_workspace1()

load("@org_tensorflow//tensorflow:workspace0.bzl", "tf_workspace0")

tf_workspace0()
################################################################################

##################################### IREE #####################################
# We need a shim here to make this use the version of mlir-hlo present in
# TensorFlow. This shim is just alias rules that forward to the TF rule. Note
# that because configure_iree_submodule_deps uses `maybe` and we define this
# first we will use this definition instead of the one there.
maybe(
    local_repository,
    name = "mlir-hlo",
    path = "build_tools/overlay/mlir-hlo",
)

maybe(
    local_repository,
    name = "iree",
    path = IREE_PATH,
)

load("@iree//build_tools/bazel:workspace.bzl", "configure_iree_submodule_deps")

configure_iree_submodule_deps(
    iree_path = IREE_PATH,
    iree_repo_alias = "@iree",
)
################################################################################
