| ##***************************************************************************** | 
 | #  AUTHOR: | 
 | #    Michael Hinton <hinton@schedmd.com> | 
 | # | 
 | #  SYNOPSIS: | 
 | #    X_AC_NVML | 
 | # | 
 | #  DESCRIPTION: | 
 | #    Determine if NVIDIA's NVML API library exists (CUDA provides stubs) | 
 | ##***************************************************************************** | 
 |  | 
 |  | 
 | AC_DEFUN([X_AC_NVML], | 
 | [ | 
 |   func_check_path () | 
 |   { | 
 |       AS_UNSET([ac_cv_header_nvml_h]) | 
 |       AS_UNSET([ac_cv_lib_nvidia_ml_nvmlInit]) | 
 |       AC_CHECK_HEADER([nvml.h], [ac_nvml_h=yes], [ac_nvml_h=no]) | 
 |       AC_CHECK_LIB([nvidia-ml], [nvmlInit], [ac_nvml=yes], [ac_nvml=no]) | 
 |  | 
 |       if [ test "$ac_nvml" = "yes" && test "$ac_nvml_h" = "yes" ]; then | 
 |           # Check indirectly that CUDA 11.1+ was installed to see if we | 
 | 	  # can build NVML MIG code. Do this by checking for the existence of | 
 | 	  # gpuInstanceSliceCount in the nvmlDeviceAttributes_t struct. | 
 | 	  AC_LINK_IFELSE( | 
 | 	      [AC_LANG_PROGRAM( | 
 | 		   [[ | 
 | 		     #include <nvml.h> | 
 | 		   ]], | 
 | 		   [[ | 
 | 		     nvmlDeviceAttributes_t attributes; | 
 | 		     attributes.gpuInstanceSliceCount = 0; | 
 | 		   ]], | 
 | 	       )], | 
 | 	      [ac_mig_support=yes], | 
 | 	      [ac_mig_support=no]) | 
 |       fi | 
 |   } | 
 |  | 
 |   _x_ac_nvml_dirs="/usr/local/cuda /usr/cuda" | 
 |   _x_ac_nvml_libs="lib/stubs lib64/stubs" | 
 |  | 
 |   AC_ARG_WITH( | 
 |     [nvml], | 
 |     AS_HELP_STRING(--with-nvml=PATH, Specify path to CUDA installation), | 
 |     [AS_IF([test "x$with_nvml" != xno && test "x$with_nvml" != xyes], | 
 |            [_x_ac_nvml_dirs="$with_nvml"])]) | 
 |  | 
 |   if [test "x$with_nvml" = xno]; then | 
 |      AC_MSG_NOTICE([support for nvml disabled]) | 
 |   else | 
 |  | 
 |     # Check if libnvml is already in the system paths | 
 |     func_check_path | 
 |  | 
 |     if [ test "$ac_nvml" = "yes" && test "$ac_nvml_h" = "yes" ]; then | 
 |           # found in system path | 
 |           nvml_includes="" | 
 |           nvml_libs="-lnvidia-ml" | 
 |     else | 
 |       #try to find libnvml | 
 |       # | 
 |       # NOTE: Just because this is where we are looking and finding the | 
 |       # libraries they must be in the ldcache when running as that is what the | 
 |       # card will be using. | 
 |       for d in $_x_ac_nvml_dirs; do | 
 |         if [ ! test -d "$d" ]; then | 
 |           continue | 
 |         fi | 
 |         for bit in $_x_ac_nvml_libs; do | 
 |           if [ ! test -d "$d/$bit" || ! test -d "$d/include" ]; then | 
 |             continue | 
 |           fi | 
 |           _x_ac_nvml_ldflags_save="$LDFLAGS" | 
 |           _x_ac_nvml_cppflags_save="$CPPFLAGS" | 
 |           LDFLAGS="-L$d/$bit -lnvidia-ml" | 
 |           CPPFLAGS="-I$d/include $CPPFLAGS" | 
 |  | 
 |           func_check_path | 
 |  | 
 |           LDFLAGS="$_x_ac_nvml_ldflags_save" | 
 |           CPPFLAGS="$_x_ac_nvml_cppflags_save" | 
 |           if [ test "$ac_nvml" = "yes" && test "$ac_nvml_h" = "yes" ]; then | 
 |             nvml_includes="-I$d/include" | 
 |             break | 
 |           fi | 
 |         done | 
 |         if [ test "$ac_nvml" = "yes" && test "$ac_nvml_h" = "yes" ]; then | 
 |           break | 
 |         fi | 
 |       done | 
 |     fi | 
 |  | 
 |     if [ test "$ac_nvml" = "yes" && test "$ac_nvml_h" = "yes" ]; then | 
 |       NVML_CPPFLAGS="$nvml_includes" | 
 |       AC_DEFINE(HAVE_NVML, 1, [Define to 1 if NVML library found]) | 
 |  | 
 |       if [ test "$ac_mig_support" = "yes" ]; then | 
 | 	AC_DEFINE(HAVE_MIG_SUPPORT, 1, [Define to 1 if NVML library has MIG support]) | 
 |       else | 
 | 	AC_MSG_WARN([NVML was found, but can not support MIG. For MIG support both nvml.h and libnvidia-ml must be 11.1+. Please make sure they are both the same version as well.]) | 
 |       fi | 
 |     else | 
 |       if test -z "$with_nvml"; then | 
 |         AC_MSG_WARN([unable to locate libnvidia-ml.so and/or nvml.h]) | 
 |       else | 
 |         AC_MSG_ERROR([unable to locate libnvidia-ml.so and/or nvml.h]) | 
 |       fi | 
 |     fi | 
 |  | 
 |     AC_SUBST(NVML_CPPFLAGS) | 
 |   fi | 
 |   AM_CONDITIONAL(BUILD_NVML, test "$ac_nvml" = "yes" && test "$ac_nvml_h" = "yes") | 
 | ]) |