]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[nvptx libgomp plugin] Build only in supported configurations
authorThomas Schwinge <thomas@codesourcery.com>
Mon, 30 Nov 2020 14:15:20 +0000 (15:15 +0100)
committerThomas Schwinge <thomas@codesourcery.com>
Thu, 14 Jan 2021 17:54:15 +0000 (18:54 +0100)
As recently again discussed in <https://gcc.gnu.org/PR97436> "[nvptx] -m32
support", nvptx offloading other than for 64-bit host has never been
implemented, tested, supported.  So we simply should buildn't the nvptx libgomp
plugin in this case.

This avoids build problems if, for example, in a (standard) bi-arch
x86_64-pc-linux-gnu '-m64'/'-m32' build, libcuda is available only in a 64-bit
variant but not in a 32-bit one, which, for example, is the case if you build
GCC against the CUDA toolkit's 'stubs/libcuda.so' (see
<https://stackoverflow.com/a/52784819>).

This amends PR65099 commit a92defdab79a1268f4b9dcf42b937e4002a4cf15 (r225560)
"[nvptx offloading] Only 64-bit configurations are currently supported" to
match the way we're doing this for the HSA/GCN plugins.

libgomp/
PR libgomp/65099
* plugin/configfrag.ac (PLUGIN_NVPTX): Restrict to supported
configurations.
* configure: Regenerate.
* plugin/plugin-nvptx.c (nvptx_get_num_devices): Remove 64-bit
check.

(cherry picked from commit 6106dfb9f73a33c87108ad5b2dcd4842bdd7828e)

libgomp/configure
libgomp/plugin/configfrag.ac
libgomp/plugin/plugin-nvptx.c

index 69f57e31521834d99f4970e2472c85873e73dc04..73f4a309f552a4104886107fad4a5bf73b4dd7b3 100755 (executable)
@@ -15294,21 +15294,30 @@ if test x"$enable_offload_targets" != x; then
        tgt_plugin=intelmic
        ;;
       nvptx*)
-       tgt_plugin=nvptx
-       PLUGIN_NVPTX=$tgt
-       if test "x$CUDA_DRIVER_LIB" != xno \
-          && test "x$CUDA_DRIVER_LIB" != xno; then
-         PLUGIN_NVPTX_CPPFLAGS=$CUDA_DRIVER_CPPFLAGS
-         PLUGIN_NVPTX_LDFLAGS=$CUDA_DRIVER_LDFLAGS
-         PLUGIN_NVPTX_LIBS='-lcuda'
-
-         PLUGIN_NVPTX_save_CPPFLAGS=$CPPFLAGS
-         CPPFLAGS="$PLUGIN_NVPTX_CPPFLAGS $CPPFLAGS"
-         PLUGIN_NVPTX_save_LDFLAGS=$LDFLAGS
-         LDFLAGS="$PLUGIN_NVPTX_LDFLAGS $LDFLAGS"
-         PLUGIN_NVPTX_save_LIBS=$LIBS
-         LIBS="$PLUGIN_NVPTX_LIBS $LIBS"
-         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+       case "${target}" in
+         aarch64*-*-* | powerpc64le-*-* | x86_64-*-*)
+           case " ${CC} ${CFLAGS} " in
+             *" -m32 "* | *" -mx32 "*)
+               # PR libgomp/65099: Currently, we only support offloading in
+               # 64-bit configurations.
+               PLUGIN_NVPTX=0
+               ;;
+             *)
+               tgt_plugin=nvptx
+               PLUGIN_NVPTX=$tgt
+               if test "x$CUDA_DRIVER_LIB" != xno \
+                  && test "x$CUDA_DRIVER_LIB" != xno; then
+                 PLUGIN_NVPTX_CPPFLAGS=$CUDA_DRIVER_CPPFLAGS
+                 PLUGIN_NVPTX_LDFLAGS=$CUDA_DRIVER_LDFLAGS
+                 PLUGIN_NVPTX_LIBS='-lcuda'
+
+                 PLUGIN_NVPTX_save_CPPFLAGS=$CPPFLAGS
+                 CPPFLAGS="$PLUGIN_NVPTX_CPPFLAGS $CPPFLAGS"
+                 PLUGIN_NVPTX_save_LDFLAGS=$LDFLAGS
+                 LDFLAGS="$PLUGIN_NVPTX_LDFLAGS $LDFLAGS"
+                 PLUGIN_NVPTX_save_LIBS=$LIBS
+                 LIBS="$PLUGIN_NVPTX_LIBS $LIBS"
+                 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include "cuda.h"
 int
@@ -15324,25 +15333,33 @@ if ac_fn_c_try_link "$LINENO"; then :
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-         CPPFLAGS=$PLUGIN_NVPTX_save_CPPFLAGS
-         LDFLAGS=$PLUGIN_NVPTX_save_LDFLAGS
-         LIBS=$PLUGIN_NVPTX_save_LIBS
-       fi
-       case $PLUGIN_NVPTX in
-         nvptx*)
-           if (test "x$CUDA_DRIVER_INCLUDE" = x \
-               || test "x$CUDA_DRIVER_INCLUDE" = xno) \
-              && (test "x$CUDA_DRIVER_LIB" = x \
-                  || test "x$CUDA_DRIVER_LIB" = xno); then
-             PLUGIN_NVPTX=1
-             PLUGIN_NVPTX_CPPFLAGS='-I$(srcdir)/plugin/cuda'
-             PLUGIN_NVPTX_LIBS='-ldl'
-             PLUGIN_NVPTX_DYNAMIC=1
-           else
-             PLUGIN_NVPTX=0
-             as_fn_error $? "CUDA driver package required for nvptx support" "$LINENO" 5
-           fi
-         ;;
+                 CPPFLAGS=$PLUGIN_NVPTX_save_CPPFLAGS
+                 LDFLAGS=$PLUGIN_NVPTX_save_LDFLAGS
+                 LIBS=$PLUGIN_NVPTX_save_LIBS
+               fi
+               case $PLUGIN_NVPTX in
+                 nvptx*)
+                   if (test "x$CUDA_DRIVER_INCLUDE" = x \
+                       || test "x$CUDA_DRIVER_INCLUDE" = xno) \
+                      && (test "x$CUDA_DRIVER_LIB" = x \
+                          || test "x$CUDA_DRIVER_LIB" = xno); then
+                     PLUGIN_NVPTX=1
+                     PLUGIN_NVPTX_CPPFLAGS='-I$(srcdir)/plugin/cuda'
+                     PLUGIN_NVPTX_LIBS='-ldl'
+                     PLUGIN_NVPTX_DYNAMIC=1
+                   else
+                     PLUGIN_NVPTX=0
+                     as_fn_error $? "CUDA driver package required for nvptx support" "$LINENO" 5
+                   fi
+                   ;;
+               esac
+               ;;
+           esac
+           ;;
+         *-*-*)
+           # Target architecture not supported.
+           PLUGIN_NVPTX=0
+           ;;
        esac
        ;;
       hsa*)
index fc91702a43443548c4469a4a11b0e946c5b3c992..7eb137472c2d8a1eb9d216c891489c4cf7727c20 100644 (file)
@@ -167,44 +167,61 @@ if test x"$enable_offload_targets" != x; then
        tgt_plugin=intelmic
        ;;
       nvptx*)
-       tgt_plugin=nvptx
-       PLUGIN_NVPTX=$tgt
-       if test "x$CUDA_DRIVER_LIB" != xno \
-          && test "x$CUDA_DRIVER_LIB" != xno; then
-         PLUGIN_NVPTX_CPPFLAGS=$CUDA_DRIVER_CPPFLAGS
-         PLUGIN_NVPTX_LDFLAGS=$CUDA_DRIVER_LDFLAGS
-         PLUGIN_NVPTX_LIBS='-lcuda'
+       case "${target}" in
+         aarch64*-*-* | powerpc64le-*-* | x86_64-*-*)
+           case " ${CC} ${CFLAGS} " in
+             *" -m32 "* | *" -mx32 "*)
+               # PR libgomp/65099: Currently, we only support offloading in
+               # 64-bit configurations.
+               PLUGIN_NVPTX=0
+               ;;
+             *)
+               tgt_plugin=nvptx
+               PLUGIN_NVPTX=$tgt
+               if test "x$CUDA_DRIVER_LIB" != xno \
+                  && test "x$CUDA_DRIVER_LIB" != xno; then
+                 PLUGIN_NVPTX_CPPFLAGS=$CUDA_DRIVER_CPPFLAGS
+                 PLUGIN_NVPTX_LDFLAGS=$CUDA_DRIVER_LDFLAGS
+                 PLUGIN_NVPTX_LIBS='-lcuda'
 
-         PLUGIN_NVPTX_save_CPPFLAGS=$CPPFLAGS
-         CPPFLAGS="$PLUGIN_NVPTX_CPPFLAGS $CPPFLAGS"
-         PLUGIN_NVPTX_save_LDFLAGS=$LDFLAGS
-         LDFLAGS="$PLUGIN_NVPTX_LDFLAGS $LDFLAGS"
-         PLUGIN_NVPTX_save_LIBS=$LIBS
-         LIBS="$PLUGIN_NVPTX_LIBS $LIBS"
-         AC_LINK_IFELSE(
-           [AC_LANG_PROGRAM(
-             [#include "cuda.h"],
-               [CUresult r = cuCtxPushCurrent (NULL);])],
-           [PLUGIN_NVPTX=1])
-         CPPFLAGS=$PLUGIN_NVPTX_save_CPPFLAGS
-         LDFLAGS=$PLUGIN_NVPTX_save_LDFLAGS
-         LIBS=$PLUGIN_NVPTX_save_LIBS
-       fi
-       case $PLUGIN_NVPTX in
-         nvptx*)
-           if (test "x$CUDA_DRIVER_INCLUDE" = x \
-               || test "x$CUDA_DRIVER_INCLUDE" = xno) \
-              && (test "x$CUDA_DRIVER_LIB" = x \
-                  || test "x$CUDA_DRIVER_LIB" = xno); then
-             PLUGIN_NVPTX=1
-             PLUGIN_NVPTX_CPPFLAGS='-I$(srcdir)/plugin/cuda'
-             PLUGIN_NVPTX_LIBS='-ldl'
-             PLUGIN_NVPTX_DYNAMIC=1
-           else
-             PLUGIN_NVPTX=0
-             AC_MSG_ERROR([CUDA driver package required for nvptx support])
-           fi
-         ;;
+                 PLUGIN_NVPTX_save_CPPFLAGS=$CPPFLAGS
+                 CPPFLAGS="$PLUGIN_NVPTX_CPPFLAGS $CPPFLAGS"
+                 PLUGIN_NVPTX_save_LDFLAGS=$LDFLAGS
+                 LDFLAGS="$PLUGIN_NVPTX_LDFLAGS $LDFLAGS"
+                 PLUGIN_NVPTX_save_LIBS=$LIBS
+                 LIBS="$PLUGIN_NVPTX_LIBS $LIBS"
+                 AC_LINK_IFELSE(
+                   [AC_LANG_PROGRAM(
+                     [#include "cuda.h"],
+                       [CUresult r = cuCtxPushCurrent (NULL);])],
+                   [PLUGIN_NVPTX=1])
+                 CPPFLAGS=$PLUGIN_NVPTX_save_CPPFLAGS
+                 LDFLAGS=$PLUGIN_NVPTX_save_LDFLAGS
+                 LIBS=$PLUGIN_NVPTX_save_LIBS
+               fi
+               case $PLUGIN_NVPTX in
+                 nvptx*)
+                   if (test "x$CUDA_DRIVER_INCLUDE" = x \
+                       || test "x$CUDA_DRIVER_INCLUDE" = xno) \
+                      && (test "x$CUDA_DRIVER_LIB" = x \
+                          || test "x$CUDA_DRIVER_LIB" = xno); then
+                     PLUGIN_NVPTX=1
+                     PLUGIN_NVPTX_CPPFLAGS='-I$(srcdir)/plugin/cuda'
+                     PLUGIN_NVPTX_LIBS='-ldl'
+                     PLUGIN_NVPTX_DYNAMIC=1
+                   else
+                     PLUGIN_NVPTX=0
+                     AC_MSG_ERROR([CUDA driver package required for nvptx support])
+                   fi
+                   ;;
+               esac
+               ;;
+           esac
+           ;;
+         *-*-*)
+           # Target architecture not supported.
+           PLUGIN_NVPTX=0
+           ;;
        esac
        ;;
       hsa*)
index 390804ad1fa2f686ea2ddef85e52d118be3cecd4..ee4a3ed22649f432cfbbbeec10d0f42cc5ecfacb 100644 (file)
@@ -546,15 +546,6 @@ nvptx_get_num_devices (void)
 {
   int n;
 
-  /* PR libgomp/65099: Currently, we only support offloading in 64-bit
-     configurations.  */
-  if (sizeof (void *) != 8)
-    {
-      GOMP_PLUGIN_debug (0, "Disabling nvptx offloading;"
-                        " only 64-bit configurations are supported\n");
-      return 0;
-    }
-
   /* This function will be called before the plugin has been initialized in
      order to enumerate available devices, but CUDA API routines can't be used
      until cuInit has been called.  Just call it now (but don't yet do any