From 0effd3dc59621d79c2535e2d928d0cf41db94d3c Mon Sep 17 00:00:00 2001
From: Christian Sigg <csigg@google.com>
Date: Tue, 23 Feb 2021 21:43:04 -0800
Subject: [PATCH] Move Eigen repository macro to its own file.

PiperOrigin-RevId: 359206609
Change-Id: I6b1f2359b683c0c9d85b7fd50603460ff7690c30
---
 .../lite/tools/make/download_dependencies.sh  |  6 ++++--
 tensorflow/opensource_only.files              |  2 +-
 tensorflow/workspace.bzl                      | 12 ++---------
 third_party/eigen3/BUILD                      |  1 +
 .../eigen_archive.BUILD}                      |  1 +
 third_party/eigen3/workspace.bzl              | 21 +++++++++++++++++++
 6 files changed, 30 insertions(+), 13 deletions(-)
 rename third_party/{eigen.BUILD => eigen3/eigen_archive.BUILD} (95%)
 create mode 100644 third_party/eigen3/workspace.bzl

diff --git a/tensorflow/lite/tools/make/download_dependencies.sh b/tensorflow/lite/tools/make/download_dependencies.sh
index ee7d333bb4f..b607213a7b7 100755
--- a/tensorflow/lite/tools/make/download_dependencies.sh
+++ b/tensorflow/lite/tools/make/download_dependencies.sh
@@ -33,8 +33,10 @@ if [ ! -f $BZL_FILE_PATH ]; then
   exit 1;
 fi
 
-EIGEN_URL="$(grep -o 'https.*gitlab.com/libeigen/eigen/-/archive/.*tar\.gz' "${BZL_FILE_PATH}" | grep -v mirror.tensorflow | head -n1)"
-EIGEN_SHA="$(eval echo $(grep '# SHARED_EIGEN_SHA' "${BZL_FILE_PATH}" | grep -o '\".*\"'))"
+EIGEN_WORKSPACE_BZL_PATH="third_party/eigen3/workspace.bzl"
+EIGEN_COMMIT="$(grep -oP 'EIGEN_COMMIT = "\K[0-9a-f]{40}' "${EIGEN_WORKSPACE_BZL_PATH}")"
+EIGEN_URL="https://gitlab.com/libeigen/eigen/-/archive/"${EIGEN_COMMIT}"/eigen-"${EIGEN_COMMIT}".tar.gz"
+EIGEN_SHA="$(grep -oP 'EIGEN_SHA256 = "\K[0-9a-f]{64}' "${EIGEN_WORKSPACE_BZL_PATH}")"
 GEMMLOWP_WORKSPACE_BZL_PATH="third_party/gemmlowp/workspace.bzl"
 GEMMLOWP_COMMIT="$(grep -oP 'GEMMLOWP_COMMIT = "\K[0-9a-f]{40}' "${GEMMLOWP_WORKSPACE_BZL_PATH}")"
 GEMMLOWP_URL="https://storage.googleapis.com/mirror.tensorflow.org/github.com/google/gemmlowp/archive/"${GEMMLOWP_COMMIT}".zip"
diff --git a/tensorflow/opensource_only.files b/tensorflow/opensource_only.files
index f198fca69f2..e473136dc46 100644
--- a/tensorflow/opensource_only.files
+++ b/tensorflow/opensource_only.files
@@ -61,7 +61,6 @@ tensorflow/third_party/curl.BUILD
 tensorflow/third_party/cython.BUILD
 tensorflow/third_party/dill.BUILD
 tensorflow/third_party/double_conversion.BUILD
-tensorflow/third_party/eigen.BUILD
 tensorflow/third_party/eigen3/BUILD
 tensorflow/third_party/eigen3/Eigen/Cholesky
 tensorflow/third_party/eigen3/Eigen/Core
@@ -73,6 +72,7 @@ tensorflow/third_party/eigen3/Eigen/SVD
 tensorflow/third_party/eigen3/Eigen/SparseCholesky
 tensorflow/third_party/eigen3/Eigen/SparseCore
 tensorflow/third_party/eigen3/LICENSE
+tensorflow/third_party/eigen3/eigen_archive.BUILD
 tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/FixedPoint
 tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/Tensor
 tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/ThreadPool
diff --git a/tensorflow/workspace.bzl b/tensorflow/workspace.bzl
index 377723bee2d..ff179120bf5 100755
--- a/tensorflow/workspace.bzl
+++ b/tensorflow/workspace.bzl
@@ -26,6 +26,7 @@ load("//third_party/aws:workspace.bzl", aws = "repo")
 load("//third_party/clog:workspace.bzl", clog = "repo")
 load("//third_party/cpuinfo:workspace.bzl", cpuinfo = "repo")
 load("//third_party/dlpack:workspace.bzl", dlpack = "repo")
+load("//third_party/eigen3:workspace.bzl", eigen3 = "repo")
 load("//third_party/farmhash:workspace.bzl", farmhash = "repo")
 load("//third_party/flatbuffers:workspace.bzl", flatbuffers = "repo")
 load("//third_party/gemmlowp:workspace.bzl", gemmlowp = "repo")
@@ -190,16 +191,7 @@ def tf_repositories(path_prefix = "", tf_repo_name = ""):
 
     absl("com_google_absl")
 
-    tf_http_archive(
-        name = "eigen_archive",
-        build_file = "//third_party:eigen.BUILD",
-        sha256 = "d76992f1972e4ff270221c7ee8125610a8e02bb46708a7295ee646e99287083b",  # SHARED_EIGEN_SHA
-        strip_prefix = "eigen-90ee821c563fa20db4d64d6991ddca256d5c52f2",
-        urls = [
-            "https://storage.googleapis.com/mirror.tensorflow.org/gitlab.com/libeigen/eigen/-/archive/90ee821c563fa20db4d64d6991ddca256d5c52f2/eigen-90ee821c563fa20db4d64d6991ddca256d5c52f2.tar.gz",
-            "https://gitlab.com/libeigen/eigen/-/archive/90ee821c563fa20db4d64d6991ddca256d5c52f2/eigen-90ee821c563fa20db4d64d6991ddca256d5c52f2.tar.gz",
-        ],
-    )
+    eigen3(name = "eigen_archive")
 
     tf_http_archive(
         name = "arm_compiler",
diff --git a/third_party/eigen3/BUILD b/third_party/eigen3/BUILD
index bbe74cf1f24..e0ead1c4eb2 100644
--- a/third_party/eigen3/BUILD
+++ b/third_party/eigen3/BUILD
@@ -1,6 +1,7 @@
 # Description:
 #   Eigen is a C++ template library for linear algebra: vectors,
 #   matrices, and related algorithms.
+# This is the BUILD file with extra code to patch into @eigen_archive.
 
 load("//third_party/mkl:build_defs.bzl", "if_mkl")
 
diff --git a/third_party/eigen.BUILD b/third_party/eigen3/eigen_archive.BUILD
similarity index 95%
rename from third_party/eigen.BUILD
rename to third_party/eigen3/eigen_archive.BUILD
index 25ef570402a..aa4341190e3 100644
--- a/third_party/eigen.BUILD
+++ b/third_party/eigen3/eigen_archive.BUILD
@@ -1,6 +1,7 @@
 # Description:
 #   Eigen is a C++ template library for linear algebra: vectors,
 #   matrices, and related algorithms.
+# This is the BUILD file used for the @eigen_archive external repository.
 
 licenses([
     # Note: Although Eigen also includes GPL V3 and LGPL v2.1+ code, TensorFlow
diff --git a/third_party/eigen3/workspace.bzl b/third_party/eigen3/workspace.bzl
new file mode 100644
index 00000000000..72693c34566
--- /dev/null
+++ b/third_party/eigen3/workspace.bzl
@@ -0,0 +1,21 @@
+"""Provides the repository macro to import Eigen."""
+
+load("//third_party:repo.bzl", "third_party_http_archive")
+
+def repo(name):
+    """Imports Eigen."""
+
+    # Attention: tools parse and update these lines.
+    EIGEN_COMMIT = "90ee821c563fa20db4d64d6991ddca256d5c52f2"
+    EIGEN_SHA256 = "d76992f1972e4ff270221c7ee8125610a8e02bb46708a7295ee646e99287083b"
+
+    third_party_http_archive(
+        name = name,
+        build_file = "//third_party/eigen3:eigen_archive.BUILD",
+        sha256 = EIGEN_SHA256,
+        strip_prefix = "eigen-{commit}".format(commit = EIGEN_COMMIT),
+        urls = [
+            "https://storage.googleapis.com/mirror.tensorflow.org/gitlab.com/libeigen/eigen/-/archive/{commit}/eigen-{commit}.tar.gz".format(commit = EIGEN_COMMIT),
+            "https://gitlab.com/libeigen/eigen/-/archive/{commit}/eigen-{commit}.tar.gz".format(commit = EIGEN_COMMIT),
+        ],
+    )