diff --git a/mpcdf_common.py b/mpcdf_common.py
index f1e952dd048b73a7d9fbf962a2e2c17770dd094f..21430a21fa9807676a858959a84b7bf7d4cec841 100644
--- a/mpcdf_common.py
+++ b/mpcdf_common.py
@@ -20,7 +20,7 @@ known_microarchs = {"skylake", "znver2", "znver4"}
 default_microarch = "skylake"
 
 package_attributes = ["MPCDF:enable_repositories"]
-config_attributes = ["MPCDF:compiler_modules", "MPCDF:cuda_modules", "MPCDF:rocm_modules", "MPCDF:mpi_modules", "MPCDF:pgi_modules", "MPCDF:openmpi_flavors"]
+config_attributes = ["MPCDF:compiler_modules", "MPCDF:cuda_modules", "MPCDF:rocm_modules", "MPCDF:mpi_modules", "MPCDF:pgi_modules", "MPCDF:amd_modules", "MPCDF:openmpi_flavors"]
 
 intel_parallel_studio = {
     "mpcdf_intel_parallel_studio_2017_7": {"compiler": "intel_17_0_7", "impi": "impi_2017_4", "mkl": "mkl_2017_4-module", },
@@ -229,6 +229,13 @@ def valid_pgi_mpi(pgi, mpi):
     return False
 
 
+def valid_amd_mpi(amd, mpi):
+    if "openmpi" in mpi:
+        return True
+
+    return False
+
+
 def is_intel_compiler(compiler: str) -> bool:
     return compiler.startswith("intel")
 
@@ -241,6 +248,10 @@ def is_pgi_compiler(compiler: str) -> bool:
     return compiler.startswith("pgi")
 
 
+def is_amd_compiler(compiler: str) -> bool:
+    return compiler.startswith("amd")
+
+
 def is_intel_mpi(mpi: str) -> bool:
     return mpi.startswith("impi")
 
@@ -264,6 +275,8 @@ def valid_mpi(compiler, mpi):
         return mpi == compiler_parallel_studio[compiler]["impi"]
     if is_pgi_compiler(compiler):
         return valid_pgi_mpi(compiler, mpi)
+    if is_amd_compiler(compiler):
+        return valid_amd_mpi(compiler, mpi)
     if is_gcc_compiler(compiler) and is_intel_mpi(mpi):
         gcc_version = int(compiler[len("gcc_"):])
         impi_major_version, impi_minor_version = map(int, mpi[len("impi_"):].split("_"))
@@ -335,6 +348,10 @@ def valid_cuda(cuda, compiler):
     return compiler in compiler_cuda.get(cuda, [])
 
 
+def valid_rocm(compiler):
+    return is_gcc_compiler(compiler) or is_amd_compiler(compiler)
+
+
 project_meta_caches = {}
 
 
@@ -569,6 +586,7 @@ def mpcdf_enable_repositories(api_url, project, package, verbose=False, dry_run=
         cudas = overloaded_package_attribute(api_url, project, package, "MPCDF:cuda_modules")
         rocms = overloaded_package_attribute(api_url, project, package, "MPCDF:rocm_modules")
         pgis = overloaded_package_attribute(api_url, project, package, "MPCDF:pgi_modules")
+        amds = overloaded_package_attribute(api_url, project, package, "MPCDF:amd_modules")
         openmpi_flavors = overloaded_package_attribute(api_url, project, package, "MPCDF:openmpi_flavors")
 
         all_compilers = overloaded_project_attribute(api_url, project, "MPCDF:compiler_modules")
@@ -576,6 +594,7 @@ def mpcdf_enable_repositories(api_url, project, package, verbose=False, dry_run=
         all_cudas = overloaded_project_attribute(api_url, project, "MPCDF:cuda_modules")
         all_rocms = overloaded_project_attribute(api_url, project, "MPCDF:rocm_modules")
         all_pgis = overloaded_project_attribute(api_url, project, "MPCDF:pgi_modules")
+        all_amds = overloaded_project_attribute(api_url, project, "MPCDF:amd_modules")
         all_openmpi_flavors = overloaded_project_attribute(api_url, project, "MPCDF:openmpi_flavors")
 
         latest_intel = latest_package(filter(is_intel_compiler, all_compilers))
@@ -628,6 +647,10 @@ def mpcdf_enable_repositories(api_url, project, package, verbose=False, dry_run=
         for pgi in (p for p in pgis if p in all_pgis):
             yield pgi
 
+    def actual_amds():
+        for amd in (a for a in amds if a in all_amds):
+            yield amd
+
     def actual_openmpi_flavors():
         for of in (f for f in openmpi_flavors if f in all_openmpi_flavors):
             yield of
@@ -659,6 +682,10 @@ def mpcdf_enable_repositories(api_url, project, package, verbose=False, dry_run=
                     if "openmpi" in mpi and valid_pgi_mpi(compiler, mpi):
                         for of in actual_openmpi_flavors():
                             enable(mpi + "_" + compiler + "_" + of)
+                for mpi, compiler in product(actual_mpis(), actual_amds()):
+                    if "openmpi" in mpi and valid_amd_mpi(compiler, mpi):
+                        for of in actual_openmpi_flavors():
+                            enable(mpi + "_" + compiler + "_" + of)
 
             if flag == "cuda":
                 for cuda, compiler in product(actual_cudas(), all_compilers + all_pgis):
@@ -670,24 +697,33 @@ def mpcdf_enable_repositories(api_url, project, package, verbose=False, dry_run=
                     if valid_cuda(cuda, compiler) and valid_mpi(compiler, mpi):
                         enable(cuda + "_" + mpi + "_" + compiler)
 
+            if flag == "amd":
+                for amd in actual_amds():
+                    enable(amd)
+
+            if flag == "amd_mpi":
+                for mpi, amd in product(actual_mpis(), actual_amds()):
+                    if valid_amd_mpi(amd, mpi):
+                        enable(mpi + "_" + amd)
+
             if flag == "rocm":
-                for rocm, compiler in product(actual_rocms(), all_compilers):
-                    if is_gcc_compiler(compiler):
+                for rocm, compiler in product(actual_rocms(), all_compilers + all_amds):
+                    if valid_rocm(compiler):
                         enable(rocm + "_" + compiler)
 
             if flag == "rocm_mpi":
-                for rocm, mpi, compiler in product(actual_rocms(), actual_mpis(), all_compilers):
-                    if is_gcc_compiler(compiler) and is_openmpi(mpi) and valid_mpi(compiler, mpi):
+                for rocm, mpi, compiler in product(actual_rocms(), actual_mpis(), all_compilers + all_amds):
+                    if valid_rocm(compiler) and is_openmpi(mpi) and valid_mpi(compiler, mpi):
                         enable(rocm + "_" + mpi + "_" + compiler)
 
             if flag == "rocm_aware_mpi":
-                for rocm, mpi, compiler in product(actual_rocms(), actual_mpis(), all_compilers):
-                    if is_gcc_compiler(compiler) and is_openmpi(mpi) and valid_mpi(compiler, mpi):
+                for rocm, mpi, compiler in product(actual_rocms(), actual_mpis(), all_compilers + all_amds):
+                    if valid_rocm(compiler) and is_openmpi(mpi) and valid_mpi(compiler, mpi):
                         enable(rocm + "_aware_" + mpi + "_" + compiler)
 
             if flag == "rocm_aware_openmpi_flavors":
-                for rocm, mpi, compiler in product(actual_rocms(), actual_mpis(), all_compilers):
-                    if is_gcc_compiler(compiler) and is_openmpi(mpi) and valid_mpi(compiler, mpi):
+                for rocm, mpi, compiler in product(actual_rocms(), actual_mpis(), all_compilers + all_amds):
+                    if valid_rocm(compiler) and is_openmpi(mpi) and valid_mpi(compiler, mpi):
                         for of in actual_openmpi_flavors():
                             enable(rocm + "_aware_" + mpi + "_" + compiler + "_" + of)
 
@@ -986,12 +1022,13 @@ Macros:
     cudas = overloaded_project_attribute(api_url, project, "MPCDF:cuda_modules")
     rocms = overloaded_project_attribute(api_url, project, "MPCDF:rocm_modules")
     pgis = overloaded_project_attribute(api_url, project, "MPCDF:pgi_modules")
+    amds = overloaded_project_attribute(api_url, project, "MPCDF:amd_modules")
     openmpi_flavors = overloaded_project_attribute(api_url, project, "MPCDF:openmpi_flavors")
 
     if parent:
         repo("System", (("software", distribution),))
 
-    for compiler in compilers + pgis:
+    for compiler in compilers + pgis + amds:
         if project.startswith("home:"):
             dependencies = ((project, "System"),)
         elif project != "software":
@@ -1047,7 +1084,7 @@ Macros:
                              additional_tags=("Prefer: mpcdf_" + cuda_from_compiler(cuda, compiler),))
 
     for rocm in rocms:
-        for compiler in filter(is_gcc_compiler, compilers):
+        for compiler in filter(valid_rocm, compilers + amds):
             repo(rocm + "_" + compiler, ((project, compiler),), rocm=True, rocm_repository=rocm,
                  additional_tags=("Prefer: mpcdf_" + rocm,))
             for mpi in filter(partial(valid_mpi, compiler), filter(is_openmpi, mpis)):
diff --git a/mpcdf_enable_repositories.py b/mpcdf_enable_repositories.py
index ea1b70f10812104b015474fa1e77acec82c63282..151bc6fb266d8352a0d8c13110edbb424a5d2ca4 100644
--- a/mpcdf_enable_repositories.py
+++ b/mpcdf_enable_repositories.py
@@ -21,9 +21,11 @@ import osc.cmdln
                   help="Restrict the set of ROCm implementations to use")
 @osc.cmdln.option('--pgi-modules',
                   help="Restrict the set of PGI compilers to use")
+@osc.cmdln.option('--amd-modules',
+                  help="Restrict the set of AMD compilers to use")
 @osc.cmdln.option('--set', metavar="FLAGS",
                   help="Modify the set of enabled repositories, without this the current setup is displayed. "
-                       "FLAGS is a comma-separated list of a subset of 'system', 'compilers', 'mpi', 'cuda', 'cuda_mpi', 'rocm', 'rocm_mpi', 'pgi', 'pgi_mpi'")
+                       "FLAGS is a comma-separated list of a subset of 'system', 'compilers', 'mpi', 'cuda', 'cuda_mpi', 'rocm', 'rocm_mpi', 'pgi', 'pgi_mpi', 'amd', 'amd_mpi'")
 @osc.cmdln.option('--disable', action="store_true",
                   help="Disable building this package")
 @osc.cmdln.alias("mpcdf_enable_repos")
@@ -93,6 +95,7 @@ def do_mpcdf_enable_repositories(self, subcmd, opts, *args):
         set_or_remove(opts.cuda_modules, "MPCDF:cuda_modules")
         set_or_remove(opts.rocm_modules, "MPCDF:rocm_modules")
         set_or_remove(opts.pgi_modules, "MPCDF:pgi_modules")
+        set_or_remove(opts.amd_modules, "MPCDF:amd_modules")
 
     if opts.recreate or opts.set or opts.disable:
         mpcdf_common.mpcdf_enable_repositories(api_url, project, package, verbose=True, dry_run=opts.dry_run)
@@ -123,5 +126,6 @@ def do_mpcdf_enable_repositories(self, subcmd, opts, *args):
             print_attr("- Subset of CUDA modules set to:", "MPCDF:cuda_modules")
             print_attr("- Subset of ROCm modules set to:", "MPCDF:rocm_modules")
             print_attr("- Subset of PGI modules set to:", "MPCDF:pgi_modules")
+            print_attr("- Subset of AMD modules set to:", "MPCDF:amd_modules")
         else:
             print("Disabled")
diff --git a/mpcdf_info.py b/mpcdf_info.py
index 169ccbc6ae88530d20365d052a36652ee6b146b8..cae576a973e804c653981e32484ecb8e9198663c 100644
--- a/mpcdf_info.py
+++ b/mpcdf_info.py
@@ -47,6 +47,7 @@ def do_mpcdf_info(self, subcmd, opts, *args) -> None:
     print_attribute("CUDA versions", "MPCDF:cuda_modules")
     print_attribute("ROCm versions", "MPCDF:rocm_modules")
     print_attribute("PGI compilers", "MPCDF:pgi_modules")
+    print_attribute("AMD compilers", "MPCDF:amd_modules")
 
     if not opts.details:
         raise SystemExit(0)