diff --git a/src/sage/config.py.in b/src/sage/config.py.in
index 3a95538d313..f75e951f3b8 100644
--- a/src/sage/config.py.in
+++ b/src/sage/config.py.in
@@ -48,6 +48,11 @@ FOURTITWO_PPI = "@FOURTITWO_PPI@"
 FOURTITWO_CIRCUITS = "@FOURTITWO_CIRCUITS@"
 FOURTITWO_GROEBNER = "@FOURTITWO_GROEBNER@"
 
+# Colon-separated list of pkg-config modules to search for cblas functionality.
+# We hard-code it here as cblas because configure (build/pkgs/openblas/spkg-configure.m4)
+# always provides cblas.pc, if necessary by creating a facade pc file for a system BLAS.
+CBLAS_PC_MODULES = "cblas"
+
 # for sage_setup.setenv
 SAGE_ARCHFLAGS = "@SAGE_ARCHFLAGS@"
 SAGE_PKG_CONFIG_PATH = "@SAGE_PKG_CONFIG_PATH@".replace("$SAGE_LOCAL", SAGE_LOCAL)
diff --git a/src/sage/env.py b/src/sage/env.py
index f6c198a8617..dc45d11fb46 100644
--- a/src/sage/env.py
+++ b/src/sage/env.py
@@ -218,6 +218,7 @@ FOURTITWO_RAYS = var("FOURTITWO_RAYS")
 FOURTITWO_PPI = var("FOURTITWO_PPI")
 FOURTITWO_CIRCUITS = var("FOURTITWO_CIRCUITS")
 FOURTITWO_GROEBNER = var("FOURTITWO_GROEBNER")
+CBLAS_PC_MODULES = var("CBLAS_PC_MODULES", "cblas:openblas:blas")
 ECL_CONFIG = var("ECL_CONFIG", "ecl-config")
 NTL_INCDIR = var("NTL_INCDIR")
 NTL_LIBDIR = var("NTL_LIBDIR")
@@ -322,8 +323,17 @@ def sage_include_directories(use_sources=False):
     return dirs
 
 
+def get_cblas_pc_module_name() -> str:
+    """
+    Return the name of the BLAS libraries to be used.
+    """
+    import pkgconfig
+    cblas_pc_modules = CBLAS_PC_MODULES.split(':')
+    return next(blas_lib for blas_lib in cblas_pc_modules if pkgconfig.exists(blas_lib))
+
+
 default_required_modules = ('fflas-ffpack', 'givaro', 'gsl', 'linbox', 'Singular',
-                            'libpng', 'gdlib', 'm4ri', 'zlib', 'ecl')
+                            'libpng', 'gdlib', 'm4ri', 'zlib', 'cblas', 'ecl')
 
 
 default_optional_modules = ('lapack',)
@@ -348,7 +358,7 @@ def cython_aliases(required_modules=None, optional_modules=None):
         sage: cython_aliases()
         {...}
         sage: sorted(cython_aliases().keys())
-        ['ECL_CFLAGS',
+        ['CBLAS_CFLAGS',
          ...,
          'ZLIB_LIBRARIES']
         sage: cython_aliases(required_modules=('module-that-is-assumed-to-not-exist'))
@@ -395,6 +405,8 @@ def cython_aliases(required_modules=None, optional_modules=None):
     for lib, required in itertools.chain(((lib, True) for lib in required_modules),
                                          ((lib, False) for lib in optional_modules)):
         var = lib.upper().replace("-", "") + "_"
+        if lib == 'cblas':
+            lib = get_cblas_pc_module_name()
         if lib == 'zlib':
             aliases[var + "CFLAGS"] = ""
             try:
diff --git a/src/sage/misc/cython.py b/src/sage/misc/cython.py
index 6d30189ae89..830a744c1aa 100644
--- a/src/sage/misc/cython.py
+++ b/src/sage/misc/cython.py
@@ -50,12 +50,16 @@ def _standard_libs_libdirs_incdirs_aliases():
          {...})
     """
     aliases = cython_aliases()
-    standard_libs = ["mpfr", "gmp", "gmpxx", "pari", "m", "ec", "gsl", "ntl"]
+    standard_libs = [
+        'mpfr', 'gmp', 'gmpxx', 'pari', 'm',
+        'ec', 'gsl',
+    ] + aliases["CBLAS_LIBRARIES"] + [
+        'ntl']
     standard_libdirs = []
     if SAGE_LOCAL:
         standard_libdirs.append(os.path.join(SAGE_LOCAL, "lib"))
-    standard_libdirs.extend(aliases["NTL_LIBDIR"])
-    standard_incdirs = [dir.as_posix() for dir in get_include_dirs()] + aliases["NTL_INCDIR"]
+    standard_libdirs.extend(aliases["CBLAS_LIBDIR"] + aliases["NTL_LIBDIR"])
+    standard_incdirs = [dir.as_posix() for dir in get_include_dirs()] + aliases["CBLAS_INCDIR"] + aliases["NTL_INCDIR"]
     return standard_libs, standard_libdirs, standard_incdirs, aliases
 
 ################################################################
