From 7facb78e174141d67cc74215d5e013093651b08d Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Fri, 23 Apr 2021 15:50:44 +0200
Subject: [PATCH] Add hmat-oss to the cmake configuration

---
 CMakeLists.txt                         | 29 +++++++++++++++++---------
 cmake_modules/CHAMELEONConfig.cmake.in |  9 ++++++++
 coreblas/CMakeLists.txt                |  3 +++
 3 files changed, 31 insertions(+), 10 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index f1f938142..770b404d8 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 89ae753b1..4817a7aa0 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 91eeb09f4..9b6602939 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)
-- 
GitLab