xref: /netbsd-src/external/gpl3/gcc.old/dist/libgomp/plugin/configfrag.ac (revision 8feb0f0b7eaff0608f8350bbfa3098827b4bb91b)
11debfc3dSmrg# Plugins for offload execution, configure.ac fragment.  -*- mode: autoconf -*-
21debfc3dSmrg#
3*8feb0f0bSmrg# Copyright (C) 2014-2020 Free Software Foundation, Inc.
41debfc3dSmrg#
51debfc3dSmrg# Contributed by Mentor Embedded.
61debfc3dSmrg#
71debfc3dSmrg# This file is part of the GNU Offloading and Multi Processing Library
81debfc3dSmrg# (libgomp).
91debfc3dSmrg#
101debfc3dSmrg# Libgomp is free software; you can redistribute it and/or modify it
111debfc3dSmrg# under the terms of the GNU General Public License as published by
121debfc3dSmrg# the Free Software Foundation; either version 3, or (at your option)
131debfc3dSmrg# any later version.
141debfc3dSmrg#
151debfc3dSmrg# Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
161debfc3dSmrg# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
171debfc3dSmrg# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
181debfc3dSmrg# more details.
191debfc3dSmrg#
201debfc3dSmrg# Under Section 7 of GPL version 3, you are granted additional
211debfc3dSmrg# permissions described in the GCC Runtime Library Exception, version
221debfc3dSmrg# 3.1, as published by the Free Software Foundation.
231debfc3dSmrg#
241debfc3dSmrg# You should have received a copy of the GNU General Public License and
251debfc3dSmrg# a copy of the GCC Runtime Library Exception along with this program;
261debfc3dSmrg# see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
271debfc3dSmrg# <http://www.gnu.org/licenses/>.
281debfc3dSmrg
291debfc3dSmrgplugin_support=yes
301debfc3dSmrgAC_CHECK_LIB(dl, dlsym, , [plugin_support=no])
311debfc3dSmrgif test x"$plugin_support" = xyes; then
321debfc3dSmrg  AC_DEFINE(PLUGIN_SUPPORT, 1,
331debfc3dSmrg    [Define if all infrastructure, needed for plugins, is supported.])
341debfc3dSmrgelif test "x${enable_offload_targets-no}" != xno; then
351debfc3dSmrg  AC_MSG_ERROR([Can't support offloading without support for plugins])
361debfc3dSmrgfi
371debfc3dSmrgAC_CHECK_HEADERS_ONCE(unistd.h)
381debfc3dSmrgAC_CHECK_FUNCS_ONCE(secure_getenv __secure_getenv getuid geteuid getgid getegid)
391debfc3dSmrg
401debfc3dSmrg
411debfc3dSmrg# Look for the CUDA driver package.
421debfc3dSmrgCUDA_DRIVER_INCLUDE=
431debfc3dSmrgCUDA_DRIVER_LIB=
441debfc3dSmrgAC_SUBST(CUDA_DRIVER_INCLUDE)
451debfc3dSmrgAC_SUBST(CUDA_DRIVER_LIB)
461debfc3dSmrgCUDA_DRIVER_CPPFLAGS=
471debfc3dSmrgCUDA_DRIVER_LDFLAGS=
481debfc3dSmrgAC_ARG_WITH(cuda-driver,
491debfc3dSmrg	[AS_HELP_STRING([--with-cuda-driver=PATH],
501debfc3dSmrg		[specify prefix directory for installed CUDA driver package.
511debfc3dSmrg		 Equivalent to --with-cuda-driver-include=PATH/include
521debfc3dSmrg		 plus --with-cuda-driver-lib=PATH/lib])])
531debfc3dSmrgAC_ARG_WITH(cuda-driver-include,
541debfc3dSmrg	[AS_HELP_STRING([--with-cuda-driver-include=PATH],
551debfc3dSmrg		[specify directory for installed CUDA driver include files])])
561debfc3dSmrgAC_ARG_WITH(cuda-driver-lib,
571debfc3dSmrg	[AS_HELP_STRING([--with-cuda-driver-lib=PATH],
581debfc3dSmrg		[specify directory for the installed CUDA driver library])])
591debfc3dSmrgcase "x$with_cuda_driver" in
60c0a68be4Smrg  x) ;;
61c0a68be4Smrg  xno)
62c0a68be4Smrg    CUDA_DRIVER_INCLUDE=no
63c0a68be4Smrg    CUDA_DRIVER_LIB=no
64c0a68be4Smrg    ;;
651debfc3dSmrg  *) CUDA_DRIVER_INCLUDE=$with_cuda_driver/include
661debfc3dSmrg     CUDA_DRIVER_LIB=$with_cuda_driver/lib
671debfc3dSmrg     ;;
681debfc3dSmrgesac
691debfc3dSmrgif test "x$with_cuda_driver_include" != x; then
701debfc3dSmrg  CUDA_DRIVER_INCLUDE=$with_cuda_driver_include
711debfc3dSmrgfi
721debfc3dSmrgif test "x$with_cuda_driver_lib" != x; then
731debfc3dSmrg  CUDA_DRIVER_LIB=$with_cuda_driver_lib
741debfc3dSmrgfi
75c0a68be4Smrgif test "x$CUDA_DRIVER_INCLUDE" != x \
76c0a68be4Smrg   && test "x$CUDA_DRIVER_INCLUDE" != xno; then
771debfc3dSmrg  CUDA_DRIVER_CPPFLAGS=-I$CUDA_DRIVER_INCLUDE
781debfc3dSmrgfi
79c0a68be4Smrgif test "x$CUDA_DRIVER_LIB" != x \
80c0a68be4Smrg   && test "x$CUDA_DRIVER_LIB" != xno; then
811debfc3dSmrg  CUDA_DRIVER_LDFLAGS=-L$CUDA_DRIVER_LIB
821debfc3dSmrgfi
831debfc3dSmrg
841debfc3dSmrgPLUGIN_NVPTX=0
851debfc3dSmrgPLUGIN_NVPTX_CPPFLAGS=
861debfc3dSmrgPLUGIN_NVPTX_LDFLAGS=
871debfc3dSmrgPLUGIN_NVPTX_LIBS=
881debfc3dSmrgPLUGIN_NVPTX_DYNAMIC=0
891debfc3dSmrgAC_SUBST(PLUGIN_NVPTX)
901debfc3dSmrgAC_SUBST(PLUGIN_NVPTX_CPPFLAGS)
911debfc3dSmrgAC_SUBST(PLUGIN_NVPTX_LDFLAGS)
921debfc3dSmrgAC_SUBST(PLUGIN_NVPTX_LIBS)
931debfc3dSmrg
941debfc3dSmrg# Look for HSA run-time, its includes and libraries
951debfc3dSmrg
961debfc3dSmrgHSA_RUNTIME_INCLUDE=
971debfc3dSmrgHSA_RUNTIME_LIB=
981debfc3dSmrgAC_SUBST(HSA_RUNTIME_INCLUDE)
991debfc3dSmrgAC_SUBST(HSA_RUNTIME_LIB)
1001debfc3dSmrgHSA_RUNTIME_CPPFLAGS=
1011debfc3dSmrgHSA_RUNTIME_LDFLAGS=
1021debfc3dSmrg
1031debfc3dSmrgAC_ARG_WITH(hsa-runtime,
1041debfc3dSmrg	[AS_HELP_STRING([--with-hsa-runtime=PATH],
1051debfc3dSmrg		[specify prefix directory for installed HSA run-time package.
1061debfc3dSmrg		 Equivalent to --with-hsa-runtime-include=PATH/include
1071debfc3dSmrg		 plus --with-hsa-runtime-lib=PATH/lib])])
1081debfc3dSmrgAC_ARG_WITH(hsa-runtime-include,
1091debfc3dSmrg	[AS_HELP_STRING([--with-hsa-runtime-include=PATH],
1101debfc3dSmrg		[specify directory for installed HSA run-time include files])])
1111debfc3dSmrgAC_ARG_WITH(hsa-runtime-lib,
1121debfc3dSmrg	[AS_HELP_STRING([--with-hsa-runtime-lib=PATH],
1131debfc3dSmrg		[specify directory for the installed HSA run-time library])])
1141debfc3dSmrgif test "x$with_hsa_runtime" != x; then
1151debfc3dSmrg  HSA_RUNTIME_INCLUDE=$with_hsa_runtime/include
1161debfc3dSmrg  HSA_RUNTIME_LIB=$with_hsa_runtime/lib
1171debfc3dSmrgfi
1181debfc3dSmrgif test "x$with_hsa_runtime_include" != x; then
1191debfc3dSmrg  HSA_RUNTIME_INCLUDE=$with_hsa_runtime_include
1201debfc3dSmrgfi
1211debfc3dSmrgif test "x$with_hsa_runtime_lib" != x; then
1221debfc3dSmrg  HSA_RUNTIME_LIB=$with_hsa_runtime_lib
1231debfc3dSmrgfi
1241debfc3dSmrgif test "x$HSA_RUNTIME_INCLUDE" != x; then
1251debfc3dSmrg  HSA_RUNTIME_CPPFLAGS=-I$HSA_RUNTIME_INCLUDE
1261debfc3dSmrgfi
1271debfc3dSmrgif test "x$HSA_RUNTIME_LIB" != x; then
1281debfc3dSmrg  HSA_RUNTIME_LDFLAGS=-L$HSA_RUNTIME_LIB
1291debfc3dSmrgfi
1301debfc3dSmrg
1311debfc3dSmrgPLUGIN_HSA=0
1321debfc3dSmrgPLUGIN_HSA_CPPFLAGS=
1331debfc3dSmrgPLUGIN_HSA_LDFLAGS=
1341debfc3dSmrgPLUGIN_HSA_LIBS=
1351debfc3dSmrgAC_SUBST(PLUGIN_HSA)
1361debfc3dSmrgAC_SUBST(PLUGIN_HSA_CPPFLAGS)
1371debfc3dSmrgAC_SUBST(PLUGIN_HSA_LDFLAGS)
1381debfc3dSmrgAC_SUBST(PLUGIN_HSA_LIBS)
1391debfc3dSmrg
140*8feb0f0bSmrgPLUGIN_GCN=0
141*8feb0f0bSmrgPLUGIN_GCN_CPPFLAGS=
142*8feb0f0bSmrgPLUGIN_GCN_LDFLAGS=
143*8feb0f0bSmrgPLUGIN_GCN_LIBS=
144*8feb0f0bSmrgAC_SUBST(PLUGIN_GCN)
145*8feb0f0bSmrgAC_SUBST(PLUGIN_GCN_CPPFLAGS)
146*8feb0f0bSmrgAC_SUBST(PLUGIN_GCN_LDFLAGS)
147*8feb0f0bSmrgAC_SUBST(PLUGIN_GCN_LIBS)
148*8feb0f0bSmrg
149c0a68be4Smrg# Parse '--enable-offload-targets', figure out the corresponding libgomp
150c0a68be4Smrg# plugins, and configure to find the corresponding offload compilers.
151c0a68be4Smrg# 'offload_plugins' and 'offload_targets' will be populated in the same order.
152c0a68be4Smrgoffload_plugins=
153c0a68be4Smrgoffload_targets=
154c0a68be4SmrgAC_SUBST(offload_plugins)
155c0a68be4SmrgAC_SUBST(offload_targets)
1561debfc3dSmrgoffload_additional_options=
1571debfc3dSmrgoffload_additional_lib_paths=
1581debfc3dSmrgAC_SUBST(offload_additional_options)
1591debfc3dSmrgAC_SUBST(offload_additional_lib_paths)
1601debfc3dSmrgif test x"$enable_offload_targets" != x; then
1611debfc3dSmrg  for tgt in `echo $enable_offload_targets | sed -e 's#,# #g'`; do
1621debfc3dSmrg    tgt_dir=`echo $tgt | grep '=' | sed 's/.*=//'`
1631debfc3dSmrg    tgt=`echo $tgt | sed 's/=.*//'`
164c0a68be4Smrg    tgt_plugin=
1651debfc3dSmrg    case $tgt in
1661debfc3dSmrg      *-intelmic-* | *-intelmicemul-*)
167c0a68be4Smrg	tgt_plugin=intelmic
1681debfc3dSmrg	;;
1691debfc3dSmrg      nvptx*)
170*8feb0f0bSmrg	case "${target}" in
171*8feb0f0bSmrg	  aarch64*-*-* | powerpc64le-*-* | x86_64-*-*)
172*8feb0f0bSmrg	    case " ${CC} ${CFLAGS} " in
173*8feb0f0bSmrg	      *" -m32 "* | *" -mx32 "*)
174*8feb0f0bSmrg		# PR libgomp/65099: Currently, we only support offloading in
175*8feb0f0bSmrg		# 64-bit configurations.
176*8feb0f0bSmrg		PLUGIN_NVPTX=0
177*8feb0f0bSmrg		;;
178*8feb0f0bSmrg	      *)
179c0a68be4Smrg		tgt_plugin=nvptx
1801debfc3dSmrg		PLUGIN_NVPTX=$tgt
181c0a68be4Smrg		if test "x$CUDA_DRIVER_LIB" != xno \
182c0a68be4Smrg		   && test "x$CUDA_DRIVER_LIB" != xno; then
1831debfc3dSmrg		  PLUGIN_NVPTX_CPPFLAGS=$CUDA_DRIVER_CPPFLAGS
1841debfc3dSmrg		  PLUGIN_NVPTX_LDFLAGS=$CUDA_DRIVER_LDFLAGS
1851debfc3dSmrg		  PLUGIN_NVPTX_LIBS='-lcuda'
1861debfc3dSmrg
1871debfc3dSmrg		  PLUGIN_NVPTX_save_CPPFLAGS=$CPPFLAGS
1881debfc3dSmrg		  CPPFLAGS="$PLUGIN_NVPTX_CPPFLAGS $CPPFLAGS"
1891debfc3dSmrg		  PLUGIN_NVPTX_save_LDFLAGS=$LDFLAGS
1901debfc3dSmrg		  LDFLAGS="$PLUGIN_NVPTX_LDFLAGS $LDFLAGS"
1911debfc3dSmrg		  PLUGIN_NVPTX_save_LIBS=$LIBS
1921debfc3dSmrg		  LIBS="$PLUGIN_NVPTX_LIBS $LIBS"
1931debfc3dSmrg		  AC_LINK_IFELSE(
1941debfc3dSmrg		    [AC_LANG_PROGRAM(
1951debfc3dSmrg		      [#include "cuda.h"],
1961debfc3dSmrg			[CUresult r = cuCtxPushCurrent (NULL);])],
1971debfc3dSmrg		    [PLUGIN_NVPTX=1])
1981debfc3dSmrg		  CPPFLAGS=$PLUGIN_NVPTX_save_CPPFLAGS
1991debfc3dSmrg		  LDFLAGS=$PLUGIN_NVPTX_save_LDFLAGS
2001debfc3dSmrg		  LIBS=$PLUGIN_NVPTX_save_LIBS
201c0a68be4Smrg		fi
2021debfc3dSmrg		case $PLUGIN_NVPTX in
2031debfc3dSmrg		  nvptx*)
204c0a68be4Smrg		    if (test "x$CUDA_DRIVER_INCLUDE" = x \
205c0a68be4Smrg			|| test "x$CUDA_DRIVER_INCLUDE" = xno) \
206c0a68be4Smrg		       && (test "x$CUDA_DRIVER_LIB" = x \
207c0a68be4Smrg			   || test "x$CUDA_DRIVER_LIB" = xno); then
2081debfc3dSmrg		      PLUGIN_NVPTX=1
2091debfc3dSmrg		      PLUGIN_NVPTX_CPPFLAGS='-I$(srcdir)/plugin/cuda'
2101debfc3dSmrg		      PLUGIN_NVPTX_LIBS='-ldl'
2111debfc3dSmrg		      PLUGIN_NVPTX_DYNAMIC=1
2121debfc3dSmrg		    else
2131debfc3dSmrg		      PLUGIN_NVPTX=0
2141debfc3dSmrg		      AC_MSG_ERROR([CUDA driver package required for nvptx support])
2151debfc3dSmrg		    fi
2161debfc3dSmrg		    ;;
2171debfc3dSmrg		esac
2181debfc3dSmrg		;;
219*8feb0f0bSmrg	    esac
220*8feb0f0bSmrg	    ;;
221*8feb0f0bSmrg	  *-*-*)
222*8feb0f0bSmrg	    # Target architecture not supported.
223*8feb0f0bSmrg	    PLUGIN_NVPTX=0
224*8feb0f0bSmrg	    ;;
225*8feb0f0bSmrg	esac
226*8feb0f0bSmrg	;;
2271debfc3dSmrg      hsa*)
2281debfc3dSmrg	case "${target}" in
2291debfc3dSmrg	  x86_64-*-*)
2301debfc3dSmrg	    case " ${CC} ${CFLAGS} " in
231*8feb0f0bSmrg	      *" -m32 "*|*" -mx32 "*)
2321debfc3dSmrg	        PLUGIN_HSA=0
2331debfc3dSmrg		;;
2341debfc3dSmrg	      *)
235c0a68be4Smrg		tgt_plugin=hsa
2361debfc3dSmrg	        PLUGIN_HSA=$tgt
2371debfc3dSmrg	        PLUGIN_HSA_CPPFLAGS=$HSA_RUNTIME_CPPFLAGS
2381debfc3dSmrg	        PLUGIN_HSA_LDFLAGS="$HSA_RUNTIME_LDFLAGS"
2391debfc3dSmrg	        PLUGIN_HSA_LIBS="-ldl"
2401debfc3dSmrg
2411debfc3dSmrg	        PLUGIN_HSA_save_CPPFLAGS=$CPPFLAGS
2421debfc3dSmrg	        CPPFLAGS="$PLUGIN_HSA_CPPFLAGS $CPPFLAGS"
2431debfc3dSmrg	        PLUGIN_HSA_save_LDFLAGS=$LDFLAGS
2441debfc3dSmrg	        LDFLAGS="$PLUGIN_HSA_LDFLAGS $LDFLAGS"
2451debfc3dSmrg	        PLUGIN_HSA_save_LIBS=$LIBS
2461debfc3dSmrg	        LIBS="$PLUGIN_HSA_LIBS $LIBS"
2471debfc3dSmrg
2481debfc3dSmrg	        PLUGIN_HSA=1
2491debfc3dSmrg	        CPPFLAGS=$PLUGIN_HSA_save_CPPFLAGS
2501debfc3dSmrg	        LDFLAGS=$PLUGIN_HSA_save_LDFLAGS
2511debfc3dSmrg	        LIBS=$PLUGIN_HSA_save_LIBS
2521debfc3dSmrg	        case $PLUGIN_HSA in
2531debfc3dSmrg		  hsa*)
2541debfc3dSmrg	            HSA_PLUGIN=0
2551debfc3dSmrg	            AC_MSG_ERROR([HSA run-time package required for HSA support])
2561debfc3dSmrg	            ;;
2571debfc3dSmrg	        esac
2581debfc3dSmrg		;;
2591debfc3dSmrg	      esac
2601debfc3dSmrg    	    ;;
2611debfc3dSmrg	  *-*-*)
2621debfc3dSmrg	    PLUGIN_HSA=0
2631debfc3dSmrg            ;;
2641debfc3dSmrg        esac
2651debfc3dSmrg        ;;
266*8feb0f0bSmrg
267*8feb0f0bSmrg      amdgcn*)
268*8feb0f0bSmrg	case "${target}" in
269*8feb0f0bSmrg	  x86_64-*-*)
270*8feb0f0bSmrg	    case " ${CC} ${CFLAGS} " in
271*8feb0f0bSmrg	      *" -m32 "*|*" -mx32 "*)
272*8feb0f0bSmrg		PLUGIN_GCN=0
273*8feb0f0bSmrg		;;
274*8feb0f0bSmrg	      *)
275*8feb0f0bSmrg		tgt_plugin=gcn
276*8feb0f0bSmrg		PLUGIN_GCN=$tgt
277*8feb0f0bSmrg		PLUGIN_GCN_CPPFLAGS=$HSA_RUNTIME_CPPFLAGS
278*8feb0f0bSmrg		PLUGIN_GCN_LDFLAGS="$HSA_RUNTIME_LDFLAGS"
279*8feb0f0bSmrg		PLUGIN_GCN_LIBS="-ldl"
280*8feb0f0bSmrg		PLUGIN_GCN=1
281*8feb0f0bSmrg		;;
282*8feb0f0bSmrg	      esac
283*8feb0f0bSmrg	    ;;
284*8feb0f0bSmrg	  *-*-*)
285*8feb0f0bSmrg	    PLUGIN_GCN=0
286*8feb0f0bSmrg	     ;;
287*8feb0f0bSmrg	esac
288*8feb0f0bSmrg	;;
2891debfc3dSmrg      *)
2901debfc3dSmrg	AC_MSG_ERROR([unknown offload target specified])
2911debfc3dSmrg	;;
2921debfc3dSmrg    esac
293c0a68be4Smrg    if test x"$tgt_plugin" = x; then
294c0a68be4Smrg      # Not configuring libgomp for this offload target if we're not building
295c0a68be4Smrg      # the corresponding offload plugin.
2961debfc3dSmrg      continue
297c0a68be4Smrg    elif test x"$offload_plugins" = x; then
298c0a68be4Smrg      offload_plugins=$tgt_plugin
299c0a68be4Smrg      offload_targets=$tgt
3001debfc3dSmrg    else
301c0a68be4Smrg      offload_plugins=$offload_plugins,$tgt_plugin
302c0a68be4Smrg      offload_targets=$offload_targets,$tgt
3031debfc3dSmrg    fi
304c0a68be4Smrg    # Configure additional search paths.
305c0a68be4Smrg    if test "$tgt_plugin" = hsa; then
3061debfc3dSmrg      # Offloading compilation is all handled by the target compiler.
3071debfc3dSmrg      :
3081debfc3dSmrg    elif test x"$tgt_dir" != x; then
3091debfc3dSmrg      offload_additional_options="$offload_additional_options -B$tgt_dir/libexec/gcc/\$(target_alias)/\$(gcc_version) -B$tgt_dir/bin"
3101debfc3dSmrg      offload_additional_lib_paths="$offload_additional_lib_paths:$tgt_dir/lib64:$tgt_dir/lib:$tgt_dir/lib32"
3111debfc3dSmrg    else
3121debfc3dSmrg      offload_additional_options="$offload_additional_options -B\$(libexecdir)/gcc/\$(target_alias)/\$(gcc_version) -B\$(bindir)"
3131debfc3dSmrg      offload_additional_lib_paths="$offload_additional_lib_paths:$toolexeclibdir"
3141debfc3dSmrg    fi
3151debfc3dSmrg  done
3161debfc3dSmrgfi
317c0a68be4SmrgAC_DEFINE_UNQUOTED(OFFLOAD_PLUGINS, "$offload_plugins",
318c0a68be4Smrg  [Define to offload plugins, separated by commas.])
3191debfc3dSmrgAM_CONDITIONAL([PLUGIN_NVPTX], [test $PLUGIN_NVPTX = 1])
3201debfc3dSmrgAC_DEFINE_UNQUOTED([PLUGIN_NVPTX], [$PLUGIN_NVPTX],
3211debfc3dSmrg  [Define to 1 if the NVIDIA plugin is built, 0 if not.])
3221debfc3dSmrgAC_DEFINE_UNQUOTED([PLUGIN_NVPTX_DYNAMIC], [$PLUGIN_NVPTX_DYNAMIC],
3231debfc3dSmrg  [Define to 1 if the NVIDIA plugin should dlopen libcuda.so.1, 0 if it should be linked against it.])
3241debfc3dSmrgAM_CONDITIONAL([PLUGIN_HSA], [test $PLUGIN_HSA = 1])
3251debfc3dSmrgAC_DEFINE_UNQUOTED([PLUGIN_HSA], [$PLUGIN_HSA],
3261debfc3dSmrg  [Define to 1 if the HSA plugin is built, 0 if not.])
327*8feb0f0bSmrgAM_CONDITIONAL([PLUGIN_GCN], [test $PLUGIN_GCN = 1])
328*8feb0f0bSmrgAC_DEFINE_UNQUOTED([PLUGIN_GCN], [$PLUGIN_GCN],
329*8feb0f0bSmrg  [Define to 1 if the GCN plugin is built, 0 if not.])
330