aboutsummaryrefslogtreecommitdiff
path: root/libgomp/plugin
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2020-11-30 15:15:20 +0100
committerThomas Schwinge <thomas@codesourcery.com>2021-01-14 18:48:00 +0100
commit6106dfb9f73a33c87108ad5b2dcd4842bdd7828e (patch)
treee630592c2d1f65096bace48916a55b24d1665001 /libgomp/plugin
parent57a4f5e4eacfbbbd0ca5f1e3f946c27d63e2b533 (diff)
[nvptx libgomp plugin] Build only in supported configurations
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.
Diffstat (limited to 'libgomp/plugin')
-rw-r--r--libgomp/plugin/configfrag.ac92
-rw-r--r--libgomp/plugin/plugin-nvptx.c9
2 files changed, 54 insertions, 47 deletions
diff --git a/libgomp/plugin/configfrag.ac b/libgomp/plugin/configfrag.ac
index 2e086c017fe..88550982eab 100644
--- a/libgomp/plugin/configfrag.ac
+++ b/libgomp/plugin/configfrag.ac
@@ -158,47 +158,63 @@ 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
;;
-
amdgcn*)
case "${target}" in
x86_64-*-*)
diff --git a/libgomp/plugin/plugin-nvptx.c b/libgomp/plugin/plugin-nvptx.c
index 681c344b9c2..1215212d501 100644
--- a/libgomp/plugin/plugin-nvptx.c
+++ b/libgomp/plugin/plugin-nvptx.c
@@ -572,15 +572,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