diff --git a/CMakeLists.txt b/CMakeLists.txt
index f1f938142e16fb9804510842f0bd7397c255433a..770b404d86abd6731d769cfbfb0b75adb59f6aff 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -199,6 +199,9 @@ endif()
 
 # Enable Hmat-OSS kernels
 option(CHAMELEON_USE_HMAT "Enable hmat kernels" OFF)
+cmake_dependent_option(CHAMELEON_HMAT_EXTERNAL
+                    "Use external hmat-oss library" OFF
+                    "CHAMELEON_USE_HMAT" OFF)
 
 option(CHAMELEON_RUNTIME_SYNC "Enable synchronous task submission when available to debug the code without parallelism" OFF)
 if (CHAMELEON_RUNTIME_SYNC)
@@ -269,17 +272,23 @@ add_subdirectory(hqr)
 # Build dependency HMAT-OSS library #
 #####################################
 if ( CHAMELEON_USE_HMAT )
-  find_package(HMAT REQUIRED)
-  if(HMAT_FOUND)
-    set_target_properties(HMAT::hmat PROPERTIES
-      INTERFACE_INCLUDE_DIRECTORIES "${HMAT_INCLUDE_DIRS}"
-      INTERFACE_COMPILE_DEFINITIONS "${HMAT_DEFINITIONS}"
-      INTERFACE_LINK_DIRECTORIES "${HMAT_LIBRARY_DIRS}"
-      INTERFACE_LINK_LIBRARIES "hmat"
-      )
-    message( STATUS "HMAT: Found" )
+  if ( CHAMELEON_HMAT_EXTERNAL )
+    find_package(HMAT REQUIRED)
+    if(HMAT_FOUND)
+      if( NOT TARGET HMAT::hmat )
+        set_target_properties(HMAT::hmat PROPERTIES
+          INTERFACE_INCLUDE_DIRECTORIES "${HMAT_INCLUDE_DIRS}"
+          INTERFACE_COMPILE_DEFINITIONS "${HMAT_DEFINITIONS}"
+          INTERFACE_LINK_DIRECTORIES "${HMAT_LIBRARY_DIRS}"
+          INTERFACE_LINK_LIBRARIES "hmat"
+          )
+      endif()
+      message( STATUS "HMAT: Found" )
+    else()
+      message( ERROR "HMAT: Not found" )
+    endif()
   else()
-    message( ERROR "HMAT: Not found" )
+    message( STATUS "HMAT: Use internal HMat-OSS" )
   endif()
 endif()
 
diff --git a/cmake_modules/CHAMELEONConfig.cmake.in b/cmake_modules/CHAMELEONConfig.cmake.in
index 89ae753b1d741dd90c70b31a36aaa2daaa0fcfe6..4817a7aa022d75f6459e8c1a93a1430c046468de 100644
--- a/cmake_modules/CHAMELEONConfig.cmake.in
+++ b/cmake_modules/CHAMELEONConfig.cmake.in
@@ -57,6 +57,15 @@ if (@CHAMELEON_USE_CUDA@ AND NOT @CHAMELEON_SIMULATION@)
 endif()
 
 # add the targets file
+if (@CHAMELEON_USE_HMAT@)
+  if ( @CHAMELEON_HMAT_EXTERNAL@ )
+    # Should be a find_dependency() but we fix it to make sure we use
+    # the correct path in higher level projects.
+    include("@HMAT_DIR@/HMATTargets.cmake")
+  else()
+    include("${CMAKE_CURRENT_LIST_DIR}/../hmat/HMATTargets.cmake")
+  endif()
+endif()
 include("${CMAKE_CURRENT_LIST_DIR}/../hqr/hqrTargets.cmake")
 if (NOT @CHAMELEON_SIMULATION@)
   include("${CMAKE_CURRENT_LIST_DIR}/coreblasTargets.cmake")
diff --git a/coreblas/CMakeLists.txt b/coreblas/CMakeLists.txt
index 91eeb09f45a6b22caf41d1aa3b1d611d7b8817ed..9b660293997dede6e9ee6da546760a6ae3a2db5f 100644
--- a/coreblas/CMakeLists.txt
+++ b/coreblas/CMakeLists.txt
@@ -26,6 +26,9 @@
 #
 ###
 
+if (CHAMELEON_USE_HMAT AND NOT CHAMELEON_HMAT_EXTERNAL)
+  add_subdirectory(hmat-oss)
+endif()
 add_subdirectory(include)
 add_subdirectory(compute)
 add_subdirectory(eztrace_module)