# Plugins for offload execution, Makefile.am fragment.
#
# Copyright (C) 2014-2023 Free Software Foundation, Inc.
#
# Contributed by Mentor Embedded.
#
# This file is part of the GNU Offloading and Multi Processing Library
# (libgomp).
#
# Libgomp is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
# more details.
#
# Under Section 7 of GPL version 3, you are granted additional
# permissions described in the GCC Runtime Library Exception, version
# 3.1, as published by the Free Software Foundation.
#
# You should have received a copy of the GNU General Public License and
# a copy of the GCC Runtime Library Exception along with this program;
# see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
# <http://www.gnu.org/licenses/>.

libgomp_la_LIBADD += $(DL_LIBS)

if PLUGIN_NVPTX
# Nvidia PTX OpenACC plugin.
libgomp_plugin_nvptx_version_info = -version-info $(libtool_VERSION)
toolexeclib_LTLIBRARIES += libgomp-plugin-nvptx.la
libgomp_plugin_nvptx_la_SOURCES = plugin/plugin-nvptx.c
libgomp_plugin_nvptx_la_CPPFLAGS = $(AM_CPPFLAGS)
libgomp_plugin_nvptx_la_LDFLAGS = $(libgomp_plugin_nvptx_version_info) \
	$(lt_host_flags)
libgomp_plugin_nvptx_la_LIBADD = libgomp.la
libgomp_plugin_nvptx_la_LIBTOOLFLAGS = --tag=disable-static

# libgomp nvptx plugin developer's section.
#
# Including the GCC-shipped 'include/cuda/cuda.h' (default) vs. system <cuda.h>:
#libgomp_plugin_nvptx_la_CPPFLAGS += -DPLUGIN_NVPTX_INCLUDE_SYSTEM_CUDA_H
#libgomp_plugin_nvptx_la_CPPFLAGS += -I[CUDA]/include
#
# 'dlopen'ing the CUDA Driver library (default):
libgomp_plugin_nvptx_la_LIBADD += $(DL_LIBS)
# ... vs. linking it:
#libgomp_plugin_nvptx_la_CPPFLAGS += -DPLUGIN_NVPTX_LINK_LIBCUDA
#libgomp_plugin_nvptx_la_LDFLAGS += -L[CUDA]/lib64/stubs
#libgomp_plugin_nvptx_la_LIBADD += -lcuda
endif

if PLUGIN_GCN
# AMD GCN plugin
libgomp_plugin_gcn_version_info = -version-info $(libtool_VERSION)
toolexeclib_LTLIBRARIES += libgomp-plugin-gcn.la
libgomp_plugin_gcn_la_SOURCES = plugin/plugin-gcn.c
libgomp_plugin_gcn_la_CPPFLAGS = $(AM_CPPFLAGS) \
	-D_GNU_SOURCE
libgomp_plugin_gcn_la_LDFLAGS = $(libgomp_plugin_gcn_version_info) \
	$(lt_host_flags)
libgomp_plugin_gcn_la_LIBADD = libgomp.la
libgomp_plugin_gcn_la_LIBTOOLFLAGS = --tag=disable-static

libgomp_plugin_gcn_la_LIBADD += $(DL_LIBS)
endif
