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