diff --git a/upstream_utils/update_eigen.py b/upstream_utils/update_eigen.py
new file mode 100755
index 0000000..0df72a8
--- /dev/null
+++ b/upstream_utils/update_eigen.py
@@ -0,0 +1,121 @@
+#!/usr/bin/env python3
+
+import os
+import re
+import shutil
+
+from upstream_utils import setup_upstream_repo, comment_out_invalid_includes, walk_cwd_and_copy_if, apply_patches
+
+
+def eigen_inclusions(dp, f):
+    """Returns true if the given file in the "Eigen" include directory of the
+    Eigen git repo should be copied into allwpilib
+
+    Keyword arguments:
+    dp -- directory path
+    f -- filename
+    """
+    if not dp.startswith("./Eigen"):
+        return False
+
+    abspath = os.path.join(dp, f)
+
+    # Exclude NonMPL2.h since all non-MPL2 code will be excluded anyway
+    if f == "NonMPL2.h":
+        return False
+
+    # Exclude BLAS support
+    if f.endswith("_BLAS.h") or "blas" in f:
+        return False
+
+    # Exclude LAPACK support
+    if f.endswith("_LAPACKE.h") or "lapack" in f:
+        return False
+
+    # Exclude MKL support
+    if "MKL" in f:
+        return False
+
+    # Include architectures we care about
+    if "Core/arch/" in abspath:
+        return ("arch/AVX/" in abspath or "arch/Default" in abspath or
+                "arch/NEON" in abspath or "arch/SSE" in abspath)
+
+    # Include the following modules
+    modules = [
+        "Cholesky",
+        "Core",
+        "Eigenvalues",
+        "Householder",
+        "Jacobi",
+        "LU",
+        "QR",
+        "SVD",
+        "StlSupport",
+        "misc",
+        "plugins",
+    ]
+    modules_rgx = r"|".join("/" + m for m in modules)
+
+    # "Std" matches StdDeque, StdList, and StdVector headers
+    if re.search(modules_rgx, abspath) or "Std" in f:
+        return True
+    else:
+        # Exclude all other modules
+        return False
+
+
+def unsupported_inclusions(dp, f):
+    """Returns true if the given file in the "unsupported" include directory of
+    the Eigen git repo should be copied into allwpilib
+
+    Keyword arguments:
+    dp -- directory path
+    f -- filename
+    """
+    if not dp.startswith("./unsupported"):
+        return False
+
+    abspath = os.path.join(dp, f)
+
+    # Exclude build system and READMEs
+    if f == "CMakeLists.txt" or "README" in f:
+        return False
+
+    # Include the AutoDiff and MatrixFunctions modules
+    return "AutoDiff" in abspath or "MatrixFunctions" in abspath
+
+
+def main():
+    root, repo = setup_upstream_repo("https://gitlab.com/libeigen/eigen.git",
+                                     "3.4.0")
+    wpimath = os.path.join(root, "wpimath")
+
+    # Delete old install
+    for d in [
+            "src/main/native/eigeninclude/Eigen",
+            "src/main/native/eigeninclude/unsupported"
+    ]:
+        shutil.rmtree(os.path.join(wpimath, d), ignore_errors=True)
+
+    # Copy Eigen headers into allwpilib
+    eigen_files = walk_cwd_and_copy_if(
+        eigen_inclusions, os.path.join(wpimath, "src/main/native/eigeninclude"))
+
+    # Copy unsupported headers into allwpilib
+    unsupported_files = walk_cwd_and_copy_if(
+        unsupported_inclusions,
+        os.path.join(wpimath, "src/main/native/eigeninclude"))
+
+    for f in eigen_files:
+        comment_out_invalid_includes(
+            f, [os.path.join(wpimath, "src/main/native/eigeninclude")])
+    for f in unsupported_files:
+        comment_out_invalid_includes(
+            f, [os.path.join(wpimath, "src/main/native/eigeninclude")])
+
+    apply_patches(root, ["upstream_utils/eigen-maybe-uninitialized.patch"])
+
+
+if __name__ == "__main__":
+    main()
