Integrate MLGO into CLGEMM and CLGEMMLowpMatrixMultiplyCore: Part3

* Implement a common interface across both functions and across mlgo and
  default heuristics. This interface is implemented as:

  * A set of adaptor functions in new cl_gemm::auto_heuristics namespace
    as:

    * select_default_*: For selecting configs using default heuristics
    * select_mlgo_*:    For selecting configs using mlgo heuristics

    These adaptor functions have the same interface

  * On top of these adaptor functions, a set of auto_select_* functions
    that automatically selects between mlgo and default (prioritize
    mlgo).

    Note that auto_select_gemm_config_* are implemented in each
    individual function. This is because the auto selection depends on
    the validation of its hosting functions.

    When we are able to decouple and abstract the validation logics,
    it's possible to share the core auto_gemm_config_* in
    cl_gemm::auto_heuristics namespace as well.

* Apply this interface in CLGEMM for the selection of gemm config
  reshaped only rhs and gemm kernel type

Resolves: COMPMID-3843, COMPMID-3844

Signed-off-by: SiCong Li <sicong.li@arm.com>
Change-Id: Idf7fb46837a027449aae1e251346b2701866309a
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/4991
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
diff --git a/Android.bp b/Android.bp
index b531457..31bc14b 100644
--- a/Android.bp
+++ b/Android.bp
@@ -613,6 +613,7 @@
         "src/runtime/CL/gemm/CLGEMMDefaultTypeBifrost.cpp",
         "src/runtime/CL/gemm/CLGEMMDefaultTypeMidgard.cpp",
         "src/runtime/CL/gemm/CLGEMMDefaultTypeValhall.cpp",
+        "src/runtime/CL/gemm_auto_heuristics/CLGEMMAutoHeuristics.cpp",
         "src/runtime/CL/mlgo/HeuristicTree.cpp",
         "src/runtime/CL/mlgo/MLGOHeuristics.cpp",
         "src/runtime/CL/mlgo/MLGOParser.cpp",