diff --git a/CMakeLists.txt b/CMakeLists.txt
index ddad6ab292083638bf3a78953b238d43812c91e0..5b7a6af285fa99b383a5fdee6c8eea95ce913917 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -108,6 +108,24 @@ option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
 set( RP_CHAMELEON_DICTIONNARY ${CMAKE_SOURCE_DIR}/cmake_modules/local_subs.py )
 set( RP_CHAMELEON_PRECISIONS  "s;d;c;z" )
 include(RulesPrecisions)
+# Check that at least one option CHAMELEON_PREC_ is set to ON
+# count number of CHAMELEON_PREC_ sets to ON
+math(EXPR number_of_active_prec 0)
+set(CHAMELEON_PRECISIONS "")
+foreach (prec ${RP_CHAMELEON_PRECISIONS})
+    string(TOUPPER ${prec} PREC)
+    if (CHAMELEON_PREC_${PREC})
+        math(EXPR number_of_active_prec "${number_of_active_prec}+1")
+        list(APPEND CHAMELEON_PRECISIONS ${PREC})
+    endif()
+endforeach()
+message("-- ${BoldGreen}Floating point precisions enabled (${number_of_active_prec}): ${CHAMELEON_PRECISIONS}.")
+if (number_of_active_prec STREQUAL 0)
+    message(FATAL_ERROR
+            "Number of active precision is ${number_of_active_prec}, "
+            "the user should activate at least one precision in the list: "
+            "CHAMELEON_PREC_S;CHAMELEON_PREC_D;CHAMELEON_PREC_C;CHAMELEON_PREC_Z.")
+endif()
 
 # Options to select the runtime
 # -----------------------------
diff --git a/cmake_modules/PrintOpts.cmake b/cmake_modules/PrintOpts.cmake
index c439626b1739980c5201303e9826f723f6b4d792..a8b10c3bbf28d0a9800d8f3511d805a9f93d96d1 100644
--- a/cmake_modules/PrintOpts.cmake
+++ b/cmake_modules/PrintOpts.cmake
@@ -69,6 +69,9 @@ set(dep_message "${dep_message}"
 "       LDFlags .............: ${CMAKE_C_LINK_FLAGS}\n"
 "       EXE LDFlags .........: ${CMAKE_EXE_LINKER_FLAGS}\n"
 "\n"
+"       Floating points precisions enabled\n"
+"       CHAMELEON_PRECISIONS : ${CHAMELEON_PRECISIONS}\n"
+"\n"
 "       Implementation paradigm\n"
 "       CUDA ................: ${CHAMELEON_USE_CUDA}\n"
 "       MPI .................: ${CHAMELEON_USE_MPI}\n"
diff --git a/control/tile.c b/control/tile.c
index 6437d6cb971ff2a8e2e8fde65e07c0d23b19ea59..2cb446643fdb123486a0501740c25ba31d788bf4 100644
--- a/control/tile.c
+++ b/control/tile.c
@@ -117,20 +117,29 @@ CHAMELEON_Tile_to_Lapack( CHAM_desc_t *A, void *Af77, int LDA )
 int CHAMELEON_Lap2Desc( cham_uplo_t uplo, void *Af77, int LDA, CHAM_desc_t *A )
 {
     switch( A->dtyp ) {
+#if defined(PRECISION_z)
     case ChamComplexDouble:
         return CHAMELEON_zLap2Desc( uplo, (CHAMELEON_Complex64_t *)Af77, LDA, A );
         break;
+#endif
+#if defined(PRECISION_c)
     case ChamComplexFloat:
         return CHAMELEON_cLap2Desc( uplo, (CHAMELEON_Complex32_t *)Af77, LDA, A );
         break;
+#endif
+#if defined(PRECISION_s)
     case ChamRealFloat:
         return CHAMELEON_sLap2Desc( uplo, (float *)Af77, LDA, A );
         break;
+#endif
+#if defined(PRECISION_d)
     case ChamRealDouble:
-    default:
         return CHAMELEON_dLap2Desc( uplo, (double *)Af77, LDA, A );
+        break;
+#endif
+    default:
+        return CHAMELEON_ERR_ILLEGAL_VALUE;
     }
-    return CHAMELEON_ERR_ILLEGAL_VALUE;
 }
 
 /**
@@ -164,18 +173,27 @@ int CHAMELEON_Lap2Desc( cham_uplo_t uplo, void *Af77, int LDA, CHAM_desc_t *A )
 int CHAMELEON_Desc2Lap( cham_uplo_t uplo, CHAM_desc_t *A, void *Af77, int LDA )
 {
     switch( A->dtyp ) {
+#if defined(PRECISION_z)
     case ChamComplexDouble:
         return CHAMELEON_zDesc2Lap( uplo, A, (CHAMELEON_Complex64_t *)Af77, LDA );
         break;
+#endif
+#if defined(PRECISION_c)
     case ChamComplexFloat:
         return CHAMELEON_cDesc2Lap( uplo, A, (CHAMELEON_Complex32_t *)Af77, LDA );
         break;
+#endif
+#if defined(PRECISION_s)
     case ChamRealFloat:
         return CHAMELEON_sDesc2Lap( uplo, A, (float *)Af77, LDA );
         break;
+#endif
+#if defined(PRECISION_d)
     case ChamRealDouble:
-    default:
         return CHAMELEON_dDesc2Lap( uplo, A, (double *)Af77, LDA );
+        break;
+#endif
+    default:
+        return CHAMELEON_ERR_ILLEGAL_VALUE;
     }
-    return CHAMELEON_ERR_ILLEGAL_VALUE;
 }