From bffbb4ffea26ca95b1fd7115acade1ce2e9a971e Mon Sep 17 00:00:00 2001
From: Jiaxun Yang <jiaxun.yang@flygoat.com>
Date: Mon, 17 Jun 2024 14:00:14 +0100
Subject: [PATCH] litex_setup: Implement mips_gcc_install

Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
---
 litex_setup.py | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/litex_setup.py b/litex_setup.py
index 0c0679176..3db73714f 100755
--- a/litex_setup.py
+++ b/litex_setup.py
@@ -363,6 +363,28 @@ def riscv_gcc_install():
     else:
         NotImplementedError(f"RISC-V GCC requires manual installation on {sys.platform}.")
 
+# MIPS toolchain.
+# -----------------
+
+def mips_gcc_install():
+    # Linux.
+    # ------
+    if sys.platform.startswith("linux"):
+        os_release = (open("/etc/os-release").read()).lower()
+        # Fedora.
+        if "fedora" in os_release:
+            os.system("dnf install gcc-mips64-linux-gnu")
+        # Arch (AUR repository).
+        elif "arch" in os_release:
+            os.system("yay -S mips64el-linux-gnu-gcc")
+        # Ubuntu.
+        else:
+            os.system("apt install gcc-mips64el-linux-gnuabi64")
+    # Manual installation.
+    # --------------------
+    else:
+        NotImplementedError(f"MIPS GCC requires manual installation on {sys.platform}.")
+
 # PowerPC toolchain.
 # -----------------
 
@@ -424,7 +446,7 @@ def main():
     parser.add_argument("--tag",       default=None,        help="Use version from release tag.")
 
     # GCC toolchains.
-    parser.add_argument("--gcc", default=None, help="Install GCC Toolchain (riscv, powerpc or openrisc).")
+    parser.add_argument("--gcc", default=None, help="Install GCC Toolchain (riscv, mips, powerpc or openrisc).")
 
     # Development mode.
     parser.add_argument("--dev",     action="store_true", help="Development-Mode (no Auto-Update of litex_setup.py / Switch to git@github.com URLs).")
@@ -474,6 +496,8 @@ def main():
     os.chdir(os.path.join(current_path))
     if args.gcc == "riscv":
         riscv_gcc_install()
+    if args.gcc == "mips":
+        mips_gcc_install()
     if args.gcc == "powerpc":
         powerpc_gcc_install()
     if args.gcc == "openrisc":