[PATCH 3/4] OpenMP 4.0 offloading to Intel MIC: libgomp plugin.
liboffloadmic/ * Makefile.in: Regenerate. * configure: Regenerate. * configure.ac: Add subdirectory 'plugin'. * plugin/Makefile.am: New file. * plugin/Makefile.in: New file, generated by automake. * plugin/aclocal.m4: New file, generated by aclocal. * plugin/configure: New file, generated by autoconf. * plugin/configure.ac: New file. * plugin/libgomp-plugin-intelmic.cpp: New file. * plugin/offload_target_main.cpp: New file. Co-Authored-By: Andrey Turetskiy <andrey.turetskiy@intel.com> From-SVN: r217499
This commit is contained in:
parent
5f52081962
commit
9d73ec14be
@ -1,3 +1,17 @@
|
||||
2014-11-13 Ilya Verbin <ilya.verbin@intel.com>
|
||||
Andrey Turetskiy <andrey.turetskiy@intel.com>
|
||||
|
||||
* Makefile.in: Regenerate.
|
||||
* configure: Regenerate.
|
||||
* configure.ac: Add subdirectory 'plugin'.
|
||||
* plugin/Makefile.am: New file.
|
||||
* plugin/Makefile.in: New file, generated by automake.
|
||||
* plugin/aclocal.m4: New file, generated by aclocal.
|
||||
* plugin/configure: New file, generated by autoconf.
|
||||
* plugin/configure.ac: New file.
|
||||
* plugin/libgomp-plugin-intelmic.cpp: New file.
|
||||
* plugin/offload_target_main.cpp: New file.
|
||||
|
||||
2014-11-13 Kirill Yukhin <kirill.yukhin@intel.com>
|
||||
|
||||
Initial commit. Imported from upstream:
|
||||
|
@ -353,6 +353,7 @@ psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
subdirs = @subdirs@
|
||||
sysconfdir = @sysconfdir@
|
||||
target = @target@
|
||||
target_alias = @target_alias@
|
||||
|
157
liboffloadmic/configure
vendored
157
liboffloadmic/configure
vendored
@ -561,6 +561,7 @@ PACKAGE_STRING='MIC Offload Runtime Library 1.0'
|
||||
PACKAGE_BUGREPORT=''
|
||||
PACKAGE_URL=''
|
||||
|
||||
enable_option_checking=no
|
||||
# Factoring default headers for most tests.
|
||||
ac_includes_default="\
|
||||
#include <stdio.h>
|
||||
@ -629,6 +630,7 @@ EGREP
|
||||
GREP
|
||||
CPP
|
||||
ALLOCA
|
||||
subdirs
|
||||
multi_basedir
|
||||
am__fastdepCXX_FALSE
|
||||
am__fastdepCXX_TRUE
|
||||
@ -755,7 +757,7 @@ CXXFLAGS
|
||||
CCC
|
||||
CPP
|
||||
CXXCPP'
|
||||
|
||||
ac_subdirs_all='plugin'
|
||||
|
||||
# Initialize some variables set by options.
|
||||
ac_init_help=
|
||||
@ -4329,6 +4331,10 @@ fi
|
||||
ac_config_commands="$ac_config_commands default-1"
|
||||
|
||||
|
||||
|
||||
subdirs="$subdirs plugin"
|
||||
|
||||
|
||||
ac_ext=c
|
||||
ac_cpp='$CPP $CPPFLAGS'
|
||||
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||
@ -11094,7 +11100,7 @@ else
|
||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
#line 11097 "configure"
|
||||
#line 11103 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
@ -11200,7 +11206,7 @@ else
|
||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
#line 11203 "configure"
|
||||
#line 11209 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
@ -16950,6 +16956,151 @@ if test "$no_create" != yes; then
|
||||
# would make configure fail if this is the last instruction.
|
||||
$ac_cs_success || as_fn_exit $?
|
||||
fi
|
||||
|
||||
#
|
||||
# CONFIG_SUBDIRS section.
|
||||
#
|
||||
if test "$no_recursion" != yes; then
|
||||
|
||||
# Remove --cache-file, --srcdir, and --disable-option-checking arguments
|
||||
# so they do not pile up.
|
||||
ac_sub_configure_args=
|
||||
ac_prev=
|
||||
eval "set x $ac_configure_args"
|
||||
shift
|
||||
for ac_arg
|
||||
do
|
||||
if test -n "$ac_prev"; then
|
||||
ac_prev=
|
||||
continue
|
||||
fi
|
||||
case $ac_arg in
|
||||
-cache-file | --cache-file | --cache-fil | --cache-fi \
|
||||
| --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
|
||||
ac_prev=cache_file ;;
|
||||
-cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
|
||||
| --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
|
||||
| --c=*)
|
||||
;;
|
||||
--config-cache | -C)
|
||||
;;
|
||||
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
|
||||
ac_prev=srcdir ;;
|
||||
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
|
||||
;;
|
||||
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
|
||||
ac_prev=prefix ;;
|
||||
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
|
||||
;;
|
||||
--disable-option-checking)
|
||||
;;
|
||||
*)
|
||||
case $ac_arg in
|
||||
*\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
|
||||
esac
|
||||
as_fn_append ac_sub_configure_args " '$ac_arg'" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Always prepend --prefix to ensure using the same prefix
|
||||
# in subdir configurations.
|
||||
ac_arg="--prefix=$prefix"
|
||||
case $ac_arg in
|
||||
*\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
|
||||
esac
|
||||
ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args"
|
||||
|
||||
# Pass --silent
|
||||
if test "$silent" = yes; then
|
||||
ac_sub_configure_args="--silent $ac_sub_configure_args"
|
||||
fi
|
||||
|
||||
# Always prepend --disable-option-checking to silence warnings, since
|
||||
# different subdirs can have different --enable and --with options.
|
||||
ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args"
|
||||
|
||||
ac_popdir=`pwd`
|
||||
for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue
|
||||
|
||||
# Do not complain, so a configure script can configure whichever
|
||||
# parts of a large source tree are present.
|
||||
test -d "$srcdir/$ac_dir" || continue
|
||||
|
||||
ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)"
|
||||
$as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5
|
||||
$as_echo "$ac_msg" >&6
|
||||
as_dir="$ac_dir"; as_fn_mkdir_p
|
||||
ac_builddir=.
|
||||
|
||||
case "$ac_dir" in
|
||||
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
|
||||
*)
|
||||
ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
|
||||
# A ".." for each directory in $ac_dir_suffix.
|
||||
ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
|
||||
case $ac_top_builddir_sub in
|
||||
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
|
||||
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
|
||||
esac ;;
|
||||
esac
|
||||
ac_abs_top_builddir=$ac_pwd
|
||||
ac_abs_builddir=$ac_pwd$ac_dir_suffix
|
||||
# for backward compatibility:
|
||||
ac_top_builddir=$ac_top_build_prefix
|
||||
|
||||
case $srcdir in
|
||||
.) # We are building in place.
|
||||
ac_srcdir=.
|
||||
ac_top_srcdir=$ac_top_builddir_sub
|
||||
ac_abs_top_srcdir=$ac_pwd ;;
|
||||
[\\/]* | ?:[\\/]* ) # Absolute name.
|
||||
ac_srcdir=$srcdir$ac_dir_suffix;
|
||||
ac_top_srcdir=$srcdir
|
||||
ac_abs_top_srcdir=$srcdir ;;
|
||||
*) # Relative name.
|
||||
ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
|
||||
ac_top_srcdir=$ac_top_build_prefix$srcdir
|
||||
ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
|
||||
esac
|
||||
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
|
||||
|
||||
|
||||
cd "$ac_dir"
|
||||
|
||||
# Check for guested configure; otherwise get Cygnus style configure.
|
||||
if test -f "$ac_srcdir/configure.gnu"; then
|
||||
ac_sub_configure=$ac_srcdir/configure.gnu
|
||||
elif test -f "$ac_srcdir/configure"; then
|
||||
ac_sub_configure=$ac_srcdir/configure
|
||||
elif test -f "$ac_srcdir/configure.in"; then
|
||||
# This should be Cygnus configure.
|
||||
ac_sub_configure=$ac_aux_dir/configure
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5
|
||||
$as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;}
|
||||
ac_sub_configure=
|
||||
fi
|
||||
|
||||
# The recursion is here.
|
||||
if test -n "$ac_sub_configure"; then
|
||||
# Make the cache file name correct relative to the subdirectory.
|
||||
case $cache_file in
|
||||
[\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;;
|
||||
*) # Relative name.
|
||||
ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
|
||||
esac
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5
|
||||
$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
|
||||
# The eval makes quoting arguments work.
|
||||
eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \
|
||||
--cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
|
||||
as_fn_error "$ac_sub_configure failed for $ac_dir" "$LINENO" 5
|
||||
fi
|
||||
|
||||
cd "$ac_popdir"
|
||||
done
|
||||
fi
|
||||
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
|
||||
$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
|
||||
|
@ -42,6 +42,7 @@ AC_PROG_CC
|
||||
AC_PROG_CXX
|
||||
AC_CONFIG_FILES([Makefile liboffloadmic_host.spec liboffloadmic_target.spec])
|
||||
AM_ENABLE_MULTILIB(, ..)
|
||||
AC_CONFIG_SUBDIRS(plugin)
|
||||
AC_FUNC_ALLOCA
|
||||
AC_CHECK_HEADERS([mm_malloc.h], [], [AC_MSG_ERROR(["Couldn't find mm_malloc.h"])])
|
||||
AC_CHECK_FUNCS([__secure_getenv secure_getenv])
|
||||
|
123
liboffloadmic/plugin/Makefile.am
Normal file
123
liboffloadmic/plugin/Makefile.am
Normal file
@ -0,0 +1,123 @@
|
||||
# Plugin for offload execution on Intel MIC devices.
|
||||
#
|
||||
# Copyright (C) 2014 Free Software Foundation, Inc.
|
||||
#
|
||||
# Contributed by Ilya Verbin <ilya.verbin@intel.com> and
|
||||
# Andrey Turetskiy <andrey.turetskiy@intel.com>.
|
||||
#
|
||||
# This file is part of the GNU OpenMP 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/>.
|
||||
|
||||
|
||||
AUTOMAKE_OPTIONS = foreign
|
||||
ACLOCAL_AMFLAGS = -I ../.. -I ../../config
|
||||
|
||||
# Directories
|
||||
build_dir = $(top_builddir)
|
||||
source_dir = $(top_srcdir)
|
||||
coi_inc_dir = $(top_srcdir)/../include/coi
|
||||
myo_inc_dir = $(top_srcdir)/../include/myo
|
||||
libgomp_src_dir = $(top_srcdir)/../../libgomp
|
||||
libgomp_dir = $(build_dir)/../../libgomp
|
||||
liboffload_src_dir = $(top_srcdir)/../runtime
|
||||
liboffload_dir = $(top_builddir)/..
|
||||
|
||||
# May be used by toolexeclibdir.
|
||||
gcc_version := $(shell cat $(top_srcdir)/../../gcc/BASE-VER)
|
||||
libsubincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/include
|
||||
# Search for main_target_image.h in these directories
|
||||
target_prefix_dir = $(libdir)/gcc/$(accel_target)/$(gcc_version)$(MULTISUBDIR)
|
||||
target_build_dir = $(accel_search_dir)/$(accel_target)$(MULTISUBDIR)/liboffloadmic/plugin
|
||||
target_install_dir = $(accel_search_dir)/lib/gcc/$(accel_target)/$(gcc_version)$(MULTISUBDIR)
|
||||
|
||||
if PLUGIN_HOST
|
||||
toolexeclib_LTLIBRARIES = libgomp-plugin-intelmic.la
|
||||
libgomp_plugin_intelmic_la_SOURCES = libgomp-plugin-intelmic.cpp
|
||||
libgomp_plugin_intelmic_la_CPPFLAGS = $(CPPFLAGS) -DLINUX -DCOI_LIBRARY_VERSION=2 -DMYO_SUPPORT -DOFFLOAD_DEBUG=1 -DSEP_SUPPORT -DTIMING_SUPPORT -DHOST_LIBRARY=1 -I$(coi_inc_dir) -I$(myo_inc_dir) -I$(liboffload_src_dir) -I$(libgomp_src_dir) -I$(libgomp_dir) -I$(target_prefix_dir)/include -I$(target_build_dir) -I$(target_install_dir)/include
|
||||
libgomp_plugin_intelmic_la_LDFLAGS = -L$(liboffload_dir)/.libs -loffloadmic_host -version-info 1:0:0
|
||||
else # PLUGIN_TARGET
|
||||
plugin_includedir = $(libsubincludedir)
|
||||
plugin_include_HEADERS = main_target_image.h
|
||||
AM_CPPFLAGS = $(CPPFLAGS) -DLINUX -DCOI_LIBRARY_VERSION=2 -DMYO_SUPPORT -DOFFLOAD_DEBUG=1 -DSEP_SUPPORT -DTIMING_SUPPORT -DHOST_LIBRARY=0 -I$(coi_inc_dir) -I$(myo_inc_dir) -I$(liboffload_src_dir) -I$(libgomp_dir)
|
||||
AM_CXXFLAGS = $(CXXFLAGS)
|
||||
AM_LDFLAGS = -L$(liboffload_dir)/.libs -L$(libgomp_dir)/.libs -loffloadmic_target -lcoi_device -lmyo-service -lgomp -rdynamic
|
||||
endif
|
||||
|
||||
main_target_image.h: offload_target_main
|
||||
@echo -n "const int image_size = " > $@
|
||||
@stat -c '%s' $< >> $@
|
||||
@echo ";" >> $@
|
||||
@echo "struct MainTargetImage {" >> $@
|
||||
@echo " int64_t size;" >> $@
|
||||
@echo " char name[sizeof \"offload_target_main\"];" >> $@
|
||||
@echo " char data[image_size];" >> $@
|
||||
@echo "};" >> $@
|
||||
@echo "extern \"C\" const MainTargetImage main_target_image = {" >> $@
|
||||
@echo " image_size, \"offload_target_main\"," >> $@
|
||||
@cat $< | xxd -include >> $@
|
||||
@echo "};" >> $@
|
||||
|
||||
offload_target_main: $(liboffload_dir)/ofldbegin.o offload_target_main.o $(liboffload_dir)/ofldend.o
|
||||
$(CXX) $(AM_LDFLAGS) $^ -o $@
|
||||
|
||||
offload_target_main.o: offload_target_main.cpp
|
||||
$(CXX) $(AM_CXXFLAGS) $(AM_CPPFLAGS) -c $< -o $@
|
||||
|
||||
# Work around what appears to be a GNU make bug handling MAKEFLAGS
|
||||
# values defined in terms of make variables, as is the case for CC and
|
||||
# friends when we are called from the top level Makefile.
|
||||
AM_MAKEFLAGS = \
|
||||
"AR_FLAGS=$(AR_FLAGS)" \
|
||||
"CC_FOR_BUILD=$(CC_FOR_BUILD)" \
|
||||
"CFLAGS=$(CFLAGS)" \
|
||||
"CXXFLAGS=$(CXXFLAGS)" \
|
||||
"CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
|
||||
"CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \
|
||||
"INSTALL=$(INSTALL)" \
|
||||
"INSTALL_DATA=$(INSTALL_DATA)" \
|
||||
"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
|
||||
"INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
|
||||
"JC1FLAGS=$(JC1FLAGS)" \
|
||||
"LDFLAGS=$(LDFLAGS)" \
|
||||
"LIBCFLAGS=$(LIBCFLAGS)" \
|
||||
"LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \
|
||||
"MAKE=$(MAKE)" \
|
||||
"MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \
|
||||
"PICFLAG=$(PICFLAG)" \
|
||||
"PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \
|
||||
"SHELL=$(SHELL)" \
|
||||
"RUNTESTFLAGS=$(RUNTESTFLAGS)" \
|
||||
"exec_prefix=$(exec_prefix)" \
|
||||
"infodir=$(infodir)" \
|
||||
"libdir=$(libdir)" \
|
||||
"prefix=$(prefix)" \
|
||||
"includedir=$(includedir)" \
|
||||
"AR=$(AR)" \
|
||||
"AS=$(AS)" \
|
||||
"LD=$(LD)" \
|
||||
"LIBCFLAGS=$(LIBCFLAGS)" \
|
||||
"NM=$(NM)" \
|
||||
"PICFLAG=$(PICFLAG)" \
|
||||
"RANLIB=$(RANLIB)" \
|
||||
"DESTDIR=$(DESTDIR)"
|
||||
|
||||
MAKEOVERRIDES =
|
||||
|
697
liboffloadmic/plugin/Makefile.in
Normal file
697
liboffloadmic/plugin/Makefile.in
Normal file
@ -0,0 +1,697 @@
|
||||
# Makefile.in generated by automake 1.11.1 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
|
||||
# Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
# Plugin for offload execution on Intel MIC devices.
|
||||
#
|
||||
# Copyright (C) 2014 Free Software Foundation, Inc.
|
||||
#
|
||||
# Contributed by Ilya Verbin <ilya.verbin@intel.com> and
|
||||
# Andrey Turetskiy <andrey.turetskiy@intel.com>.
|
||||
#
|
||||
# This file is part of the GNU OpenMP 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/>.
|
||||
|
||||
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = .
|
||||
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
|
||||
$(top_srcdir)/configure $(am__configure_deps) \
|
||||
$(srcdir)/../../mkinstalldirs $(srcdir)/../../depcomp \
|
||||
$(am__plugin_include_HEADERS_DIST)
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/../../config/depstand.m4 \
|
||||
$(top_srcdir)/../../config/lead-dot.m4 \
|
||||
$(top_srcdir)/../../config/multi.m4 \
|
||||
$(top_srcdir)/../../config/override.m4 \
|
||||
$(top_srcdir)/../../libtool.m4 \
|
||||
$(top_srcdir)/../../ltoptions.m4 \
|
||||
$(top_srcdir)/../../ltsugar.m4 \
|
||||
$(top_srcdir)/../../ltversion.m4 \
|
||||
$(top_srcdir)/../../lt~obsolete.m4 $(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno config.status.lineno
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/../../mkinstalldirs
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
|
||||
am__install_max = 40
|
||||
am__nobase_strip_setup = \
|
||||
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
|
||||
am__nobase_strip = \
|
||||
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
|
||||
am__nobase_list = $(am__nobase_strip_setup); \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
|
||||
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
|
||||
if (++n[$$2] == $(am__install_max)) \
|
||||
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
|
||||
END { for (dir in files) print dir, files[dir] }'
|
||||
am__base_list = \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
|
||||
am__installdirs = "$(DESTDIR)$(toolexeclibdir)" \
|
||||
"$(DESTDIR)$(plugin_includedir)"
|
||||
LTLIBRARIES = $(toolexeclib_LTLIBRARIES)
|
||||
libgomp_plugin_intelmic_la_LIBADD =
|
||||
@PLUGIN_HOST_TRUE@am_libgomp_plugin_intelmic_la_OBJECTS = libgomp_plugin_intelmic_la-libgomp-plugin-intelmic.lo
|
||||
libgomp_plugin_intelmic_la_OBJECTS = \
|
||||
$(am_libgomp_plugin_intelmic_la_OBJECTS)
|
||||
libgomp_plugin_intelmic_la_LINK = $(LIBTOOL) --tag=CXX \
|
||||
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
|
||||
$(AM_CXXFLAGS) $(CXXFLAGS) \
|
||||
$(libgomp_plugin_intelmic_la_LDFLAGS) $(LDFLAGS) -o $@
|
||||
@PLUGIN_HOST_TRUE@am_libgomp_plugin_intelmic_la_rpath = -rpath \
|
||||
@PLUGIN_HOST_TRUE@ $(toolexeclibdir)
|
||||
DEFAULT_INCLUDES = -I.@am__isrc@
|
||||
depcomp = $(SHELL) $(top_srcdir)/../../depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
am__mv = mv -f
|
||||
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
CXXLD = $(CXX)
|
||||
CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@
|
||||
SOURCES = $(libgomp_plugin_intelmic_la_SOURCES)
|
||||
MULTISRCTOP =
|
||||
MULTIBUILDTOP =
|
||||
MULTIDIRS =
|
||||
MULTISUBDIR =
|
||||
MULTIDO = true
|
||||
MULTICLEAN = true
|
||||
am__plugin_include_HEADERS_DIST = main_target_image.h
|
||||
HEADERS = $(plugin_include_HEADERS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DSYMUTIL = @DSYMUTIL@
|
||||
DUMPBIN = @DUMPBIN@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GREP = @GREP@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
NM = @NM@
|
||||
NMEDIT = @NMEDIT@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
OTOOL = @OTOOL@
|
||||
OTOOL64 = @OTOOL64@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
accel_search_dir = @accel_search_dir@
|
||||
accel_target = @accel_target@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
multi_basedir = @multi_basedir@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target = @target@
|
||||
target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
toolexecdir = @toolexecdir@
|
||||
toolexeclibdir = @toolexeclibdir@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
AUTOMAKE_OPTIONS = foreign
|
||||
ACLOCAL_AMFLAGS = -I ../.. -I ../../config
|
||||
|
||||
# Directories
|
||||
build_dir = $(top_builddir)
|
||||
source_dir = $(top_srcdir)
|
||||
coi_inc_dir = $(top_srcdir)/../include/coi
|
||||
myo_inc_dir = $(top_srcdir)/../include/myo
|
||||
libgomp_src_dir = $(top_srcdir)/../../libgomp
|
||||
libgomp_dir = $(build_dir)/../../libgomp
|
||||
liboffload_src_dir = $(top_srcdir)/../runtime
|
||||
liboffload_dir = $(top_builddir)/..
|
||||
|
||||
# May be used by toolexeclibdir.
|
||||
gcc_version := $(shell cat $(top_srcdir)/../../gcc/BASE-VER)
|
||||
libsubincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/include
|
||||
# Search for main_target_image.h in these directories
|
||||
target_prefix_dir = $(libdir)/gcc/$(accel_target)/$(gcc_version)$(MULTISUBDIR)
|
||||
target_build_dir = $(accel_search_dir)/$(accel_target)$(MULTISUBDIR)/liboffloadmic/plugin
|
||||
target_install_dir = $(accel_search_dir)/lib/gcc/$(accel_target)/$(gcc_version)$(MULTISUBDIR)
|
||||
@PLUGIN_HOST_TRUE@toolexeclib_LTLIBRARIES = libgomp-plugin-intelmic.la
|
||||
@PLUGIN_HOST_TRUE@libgomp_plugin_intelmic_la_SOURCES = libgomp-plugin-intelmic.cpp
|
||||
@PLUGIN_HOST_TRUE@libgomp_plugin_intelmic_la_CPPFLAGS = $(CPPFLAGS) -DLINUX -DCOI_LIBRARY_VERSION=2 -DMYO_SUPPORT -DOFFLOAD_DEBUG=1 -DSEP_SUPPORT -DTIMING_SUPPORT -DHOST_LIBRARY=1 -I$(coi_inc_dir) -I$(myo_inc_dir) -I$(liboffload_src_dir) -I$(libgomp_src_dir) -I$(libgomp_dir) -I$(target_prefix_dir)/include -I$(target_build_dir) -I$(target_install_dir)/include
|
||||
@PLUGIN_HOST_TRUE@libgomp_plugin_intelmic_la_LDFLAGS = -L$(liboffload_dir)/.libs -loffloadmic_host -version-info 1:0:0
|
||||
@PLUGIN_HOST_FALSE@plugin_includedir = $(libsubincludedir)
|
||||
@PLUGIN_HOST_FALSE@plugin_include_HEADERS = main_target_image.h
|
||||
@PLUGIN_HOST_FALSE@AM_CPPFLAGS = $(CPPFLAGS) -DLINUX -DCOI_LIBRARY_VERSION=2 -DMYO_SUPPORT -DOFFLOAD_DEBUG=1 -DSEP_SUPPORT -DTIMING_SUPPORT -DHOST_LIBRARY=0 -I$(coi_inc_dir) -I$(myo_inc_dir) -I$(liboffload_src_dir) -I$(libgomp_dir)
|
||||
@PLUGIN_HOST_FALSE@AM_CXXFLAGS = $(CXXFLAGS)
|
||||
@PLUGIN_HOST_FALSE@AM_LDFLAGS = -L$(liboffload_dir)/.libs -L$(libgomp_dir)/.libs -loffloadmic_target -lcoi_device -lmyo-service -lgomp -rdynamic
|
||||
|
||||
# Work around what appears to be a GNU make bug handling MAKEFLAGS
|
||||
# values defined in terms of make variables, as is the case for CC and
|
||||
# friends when we are called from the top level Makefile.
|
||||
AM_MAKEFLAGS = \
|
||||
"AR_FLAGS=$(AR_FLAGS)" \
|
||||
"CC_FOR_BUILD=$(CC_FOR_BUILD)" \
|
||||
"CFLAGS=$(CFLAGS)" \
|
||||
"CXXFLAGS=$(CXXFLAGS)" \
|
||||
"CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
|
||||
"CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \
|
||||
"INSTALL=$(INSTALL)" \
|
||||
"INSTALL_DATA=$(INSTALL_DATA)" \
|
||||
"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
|
||||
"INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
|
||||
"JC1FLAGS=$(JC1FLAGS)" \
|
||||
"LDFLAGS=$(LDFLAGS)" \
|
||||
"LIBCFLAGS=$(LIBCFLAGS)" \
|
||||
"LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \
|
||||
"MAKE=$(MAKE)" \
|
||||
"MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \
|
||||
"PICFLAG=$(PICFLAG)" \
|
||||
"PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \
|
||||
"SHELL=$(SHELL)" \
|
||||
"RUNTESTFLAGS=$(RUNTESTFLAGS)" \
|
||||
"exec_prefix=$(exec_prefix)" \
|
||||
"infodir=$(infodir)" \
|
||||
"libdir=$(libdir)" \
|
||||
"prefix=$(prefix)" \
|
||||
"includedir=$(includedir)" \
|
||||
"AR=$(AR)" \
|
||||
"AS=$(AS)" \
|
||||
"LD=$(LD)" \
|
||||
"LIBCFLAGS=$(LIBCFLAGS)" \
|
||||
"NM=$(NM)" \
|
||||
"PICFLAG=$(PICFLAG)" \
|
||||
"RANLIB=$(RANLIB)" \
|
||||
"DESTDIR=$(DESTDIR)"
|
||||
|
||||
MAKEOVERRIDES =
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .cpp .lo .o .obj
|
||||
am--refresh:
|
||||
@:
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
|
||||
$(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
$(am__cd) $(srcdir) && $(AUTOCONF)
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
$(am__aclocal_m4_deps):
|
||||
install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(toolexeclibdir)" || $(MKDIR_P) "$(DESTDIR)$(toolexeclibdir)"
|
||||
@list='$(toolexeclib_LTLIBRARIES)'; test -n "$(toolexeclibdir)" || list=; \
|
||||
list2=; for p in $$list; do \
|
||||
if test -f $$p; then \
|
||||
list2="$$list2 $$p"; \
|
||||
else :; fi; \
|
||||
done; \
|
||||
test -z "$$list2" || { \
|
||||
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(toolexeclibdir)'"; \
|
||||
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(toolexeclibdir)"; \
|
||||
}
|
||||
|
||||
uninstall-toolexeclibLTLIBRARIES:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(toolexeclib_LTLIBRARIES)'; test -n "$(toolexeclibdir)" || list=; \
|
||||
for p in $$list; do \
|
||||
$(am__strip_dir) \
|
||||
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(toolexeclibdir)/$$f'"; \
|
||||
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(toolexeclibdir)/$$f"; \
|
||||
done
|
||||
|
||||
clean-toolexeclibLTLIBRARIES:
|
||||
-test -z "$(toolexeclib_LTLIBRARIES)" || rm -f $(toolexeclib_LTLIBRARIES)
|
||||
@list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \
|
||||
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
|
||||
test "$$dir" != "$$p" || dir=.; \
|
||||
echo "rm -f \"$${dir}/so_locations\""; \
|
||||
rm -f "$${dir}/so_locations"; \
|
||||
done
|
||||
libgomp-plugin-intelmic.la: $(libgomp_plugin_intelmic_la_OBJECTS) $(libgomp_plugin_intelmic_la_DEPENDENCIES)
|
||||
$(libgomp_plugin_intelmic_la_LINK) $(am_libgomp_plugin_intelmic_la_rpath) $(libgomp_plugin_intelmic_la_OBJECTS) $(libgomp_plugin_intelmic_la_LIBADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgomp_plugin_intelmic_la-libgomp-plugin-intelmic.Plo@am__quote@
|
||||
|
||||
.cpp.o:
|
||||
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
|
||||
|
||||
.cpp.obj:
|
||||
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
.cpp.lo:
|
||||
@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
|
||||
|
||||
libgomp_plugin_intelmic_la-libgomp-plugin-intelmic.lo: libgomp-plugin-intelmic.cpp
|
||||
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgomp_plugin_intelmic_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libgomp_plugin_intelmic_la-libgomp-plugin-intelmic.lo -MD -MP -MF $(DEPDIR)/libgomp_plugin_intelmic_la-libgomp-plugin-intelmic.Tpo -c -o libgomp_plugin_intelmic_la-libgomp-plugin-intelmic.lo `test -f 'libgomp-plugin-intelmic.cpp' || echo '$(srcdir)/'`libgomp-plugin-intelmic.cpp
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libgomp_plugin_intelmic_la-libgomp-plugin-intelmic.Tpo $(DEPDIR)/libgomp_plugin_intelmic_la-libgomp-plugin-intelmic.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='libgomp-plugin-intelmic.cpp' object='libgomp_plugin_intelmic_la-libgomp-plugin-intelmic.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgomp_plugin_intelmic_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libgomp_plugin_intelmic_la-libgomp-plugin-intelmic.lo `test -f 'libgomp-plugin-intelmic.cpp' || echo '$(srcdir)/'`libgomp-plugin-intelmic.cpp
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool config.lt
|
||||
|
||||
# GNU Make needs to see an explicit $(MAKE) variable in the command it
|
||||
# runs to enable its job server during parallel builds. Hence the
|
||||
# comments below.
|
||||
all-multi:
|
||||
$(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do # $(MAKE)
|
||||
install-multi:
|
||||
$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do # $(MAKE)
|
||||
|
||||
mostlyclean-multi:
|
||||
$(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean # $(MAKE)
|
||||
clean-multi:
|
||||
$(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean # $(MAKE)
|
||||
distclean-multi:
|
||||
$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean # $(MAKE)
|
||||
maintainer-clean-multi:
|
||||
$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean # $(MAKE)
|
||||
install-plugin_includeHEADERS: $(plugin_include_HEADERS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(plugin_includedir)" || $(MKDIR_P) "$(DESTDIR)$(plugin_includedir)"
|
||||
@list='$(plugin_include_HEADERS)'; test -n "$(plugin_includedir)" || list=; \
|
||||
for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
echo "$$d$$p"; \
|
||||
done | $(am__base_list) | \
|
||||
while read files; do \
|
||||
echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(plugin_includedir)'"; \
|
||||
$(INSTALL_HEADER) $$files "$(DESTDIR)$(plugin_includedir)" || exit $$?; \
|
||||
done
|
||||
|
||||
uninstall-plugin_includeHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(plugin_include_HEADERS)'; test -n "$(plugin_includedir)" || list=; \
|
||||
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
|
||||
test -n "$$files" || exit 0; \
|
||||
echo " ( cd '$(DESTDIR)$(plugin_includedir)' && rm -f" $$files ")"; \
|
||||
cd "$(DESTDIR)$(plugin_includedir)" && rm -f $$files
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(LTLIBRARIES) all-multi $(HEADERS)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(toolexeclibdir)" "$(DESTDIR)$(plugin_includedir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am clean-multi
|
||||
|
||||
clean-am: clean-generic clean-libtool clean-toolexeclibLTLIBRARIES \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am distclean-multi
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-plugin_includeHEADERS
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am: install-multi install-toolexeclibLTLIBRARIES
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am maintainer-clean-multi
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am mostlyclean-multi
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-plugin_includeHEADERS \
|
||||
uninstall-toolexeclibLTLIBRARIES
|
||||
|
||||
.MAKE: all-multi clean-multi distclean-multi install-am install-multi \
|
||||
install-strip maintainer-clean-multi mostlyclean-multi
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am all-multi am--refresh check check-am \
|
||||
clean clean-generic clean-libtool clean-multi \
|
||||
clean-toolexeclibLTLIBRARIES ctags distclean distclean-compile \
|
||||
distclean-generic distclean-libtool distclean-multi \
|
||||
distclean-tags dvi dvi-am html html-am info info-am install \
|
||||
install-am install-data install-data-am install-dvi \
|
||||
install-dvi-am install-exec install-exec-am install-html \
|
||||
install-html-am install-info install-info-am install-man \
|
||||
install-multi install-pdf install-pdf-am \
|
||||
install-plugin_includeHEADERS install-ps install-ps-am \
|
||||
install-strip install-toolexeclibLTLIBRARIES installcheck \
|
||||
installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic maintainer-clean-multi mostlyclean \
|
||||
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
|
||||
mostlyclean-multi pdf pdf-am ps ps-am tags uninstall \
|
||||
uninstall-am uninstall-plugin_includeHEADERS \
|
||||
uninstall-toolexeclibLTLIBRARIES
|
||||
|
||||
|
||||
main_target_image.h: offload_target_main
|
||||
@echo -n "const int image_size = " > $@
|
||||
@stat -c '%s' $< >> $@
|
||||
@echo ";" >> $@
|
||||
@echo "struct MainTargetImage {" >> $@
|
||||
@echo " int64_t size;" >> $@
|
||||
@echo " char name[sizeof \"offload_target_main\"];" >> $@
|
||||
@echo " char data[image_size];" >> $@
|
||||
@echo "};" >> $@
|
||||
@echo "extern \"C\" const MainTargetImage main_target_image = {" >> $@
|
||||
@echo " image_size, \"offload_target_main\"," >> $@
|
||||
@cat $< | xxd -include >> $@
|
||||
@echo "};" >> $@
|
||||
|
||||
offload_target_main: $(liboffload_dir)/ofldbegin.o offload_target_main.o $(liboffload_dir)/ofldend.o
|
||||
$(CXX) $(AM_LDFLAGS) $^ -o $@
|
||||
|
||||
offload_target_main.o: offload_target_main.cpp
|
||||
$(CXX) $(AM_CXXFLAGS) $(AM_CPPFLAGS) -c $< -o $@
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
979
liboffloadmic/plugin/aclocal.m4
vendored
Normal file
979
liboffloadmic/plugin/aclocal.m4
vendored
Normal file
@ -0,0 +1,979 @@
|
||||
# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||
# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
m4_ifndef([AC_AUTOCONF_VERSION],
|
||||
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
||||
m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.64],,
|
||||
[m4_warning([this file was generated for autoconf 2.64.
|
||||
You have another version of autoconf. It may work, but is not guaranteed to.
|
||||
If you have problems, you may need to regenerate the build system entirely.
|
||||
To do so, use the procedure documented by the package, typically `autoreconf'.])])
|
||||
|
||||
# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_AUTOMAKE_VERSION(VERSION)
|
||||
# ----------------------------
|
||||
# Automake X.Y traces this macro to ensure aclocal.m4 has been
|
||||
# generated from the m4 files accompanying Automake X.Y.
|
||||
# (This private macro should not be called outside this file.)
|
||||
AC_DEFUN([AM_AUTOMAKE_VERSION],
|
||||
[am__api_version='1.11'
|
||||
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
|
||||
dnl require some minimum version. Point them to the right macro.
|
||||
m4_if([$1], [1.11.1], [],
|
||||
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
|
||||
])
|
||||
|
||||
# _AM_AUTOCONF_VERSION(VERSION)
|
||||
# -----------------------------
|
||||
# aclocal traces this macro to find the Autoconf version.
|
||||
# This is a private macro too. Using m4_define simplifies
|
||||
# the logic in aclocal, which can simply ignore this definition.
|
||||
m4_define([_AM_AUTOCONF_VERSION], [])
|
||||
|
||||
# AM_SET_CURRENT_AUTOMAKE_VERSION
|
||||
# -------------------------------
|
||||
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
|
||||
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
|
||||
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
||||
[AM_AUTOMAKE_VERSION([1.11.1])dnl
|
||||
m4_ifndef([AC_AUTOCONF_VERSION],
|
||||
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
||||
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
|
||||
|
||||
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
|
||||
# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
|
||||
# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
|
||||
#
|
||||
# Of course, Automake must honor this variable whenever it calls a
|
||||
# tool from the auxiliary directory. The problem is that $srcdir (and
|
||||
# therefore $ac_aux_dir as well) can be either absolute or relative,
|
||||
# depending on how configure is run. This is pretty annoying, since
|
||||
# it makes $ac_aux_dir quite unusable in subdirectories: in the top
|
||||
# source directory, any form will work fine, but in subdirectories a
|
||||
# relative path needs to be adjusted first.
|
||||
#
|
||||
# $ac_aux_dir/missing
|
||||
# fails when called from a subdirectory if $ac_aux_dir is relative
|
||||
# $top_srcdir/$ac_aux_dir/missing
|
||||
# fails if $ac_aux_dir is absolute,
|
||||
# fails when called from a subdirectory in a VPATH build with
|
||||
# a relative $ac_aux_dir
|
||||
#
|
||||
# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
|
||||
# are both prefixed by $srcdir. In an in-source build this is usually
|
||||
# harmless because $srcdir is `.', but things will broke when you
|
||||
# start a VPATH build or use an absolute $srcdir.
|
||||
#
|
||||
# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
|
||||
# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
|
||||
# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
|
||||
# and then we would define $MISSING as
|
||||
# MISSING="\${SHELL} $am_aux_dir/missing"
|
||||
# This will work as long as MISSING is not called from configure, because
|
||||
# unfortunately $(top_srcdir) has no meaning in configure.
|
||||
# However there are other variables, like CC, which are often used in
|
||||
# configure, and could therefore not use this "fixed" $ac_aux_dir.
|
||||
#
|
||||
# Another solution, used here, is to always expand $ac_aux_dir to an
|
||||
# absolute PATH. The drawback is that using absolute paths prevent a
|
||||
# configured tree to be moved without reconfiguration.
|
||||
|
||||
AC_DEFUN([AM_AUX_DIR_EXPAND],
|
||||
[dnl Rely on autoconf to set up CDPATH properly.
|
||||
AC_PREREQ([2.50])dnl
|
||||
# expand $ac_aux_dir to an absolute path
|
||||
am_aux_dir=`cd $ac_aux_dir && pwd`
|
||||
])
|
||||
|
||||
# AM_CONDITIONAL -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 9
|
||||
|
||||
# AM_CONDITIONAL(NAME, SHELL-CONDITION)
|
||||
# -------------------------------------
|
||||
# Define a conditional.
|
||||
AC_DEFUN([AM_CONDITIONAL],
|
||||
[AC_PREREQ(2.52)dnl
|
||||
ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
|
||||
[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
|
||||
AC_SUBST([$1_TRUE])dnl
|
||||
AC_SUBST([$1_FALSE])dnl
|
||||
_AM_SUBST_NOTMAKE([$1_TRUE])dnl
|
||||
_AM_SUBST_NOTMAKE([$1_FALSE])dnl
|
||||
m4_define([_AM_COND_VALUE_$1], [$2])dnl
|
||||
if $2; then
|
||||
$1_TRUE=
|
||||
$1_FALSE='#'
|
||||
else
|
||||
$1_TRUE='#'
|
||||
$1_FALSE=
|
||||
fi
|
||||
AC_CONFIG_COMMANDS_PRE(
|
||||
[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
|
||||
AC_MSG_ERROR([[conditional "$1" was never defined.
|
||||
Usually this means the macro was only invoked conditionally.]])
|
||||
fi])])
|
||||
|
||||
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 10
|
||||
|
||||
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
|
||||
# written in clear, in which case automake, when reading aclocal.m4,
|
||||
# will think it sees a *use*, and therefore will trigger all it's
|
||||
# C support machinery. Also note that it means that autoscan, seeing
|
||||
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
|
||||
|
||||
|
||||
# _AM_DEPENDENCIES(NAME)
|
||||
# ----------------------
|
||||
# See how the compiler implements dependency checking.
|
||||
# NAME is "CC", "CXX", "GCJ", or "OBJC".
|
||||
# We try a few techniques and use that to set a single cache variable.
|
||||
#
|
||||
# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
|
||||
# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
|
||||
# dependency, and given that the user is not expected to run this macro,
|
||||
# just rely on AC_PROG_CC.
|
||||
AC_DEFUN([_AM_DEPENDENCIES],
|
||||
[AC_REQUIRE([AM_SET_DEPDIR])dnl
|
||||
AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
|
||||
AC_REQUIRE([AM_MAKE_INCLUDE])dnl
|
||||
AC_REQUIRE([AM_DEP_TRACK])dnl
|
||||
|
||||
ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
|
||||
[$1], CXX, [depcc="$CXX" am_compiler_list=],
|
||||
[$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
|
||||
[$1], UPC, [depcc="$UPC" am_compiler_list=],
|
||||
[$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
|
||||
[depcc="$$1" am_compiler_list=])
|
||||
|
||||
AC_CACHE_CHECK([dependency style of $depcc],
|
||||
[am_cv_$1_dependencies_compiler_type],
|
||||
[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
|
||||
# We make a subdir and do the tests there. Otherwise we can end up
|
||||
# making bogus files that we don't know about and never remove. For
|
||||
# instance it was reported that on HP-UX the gcc test will end up
|
||||
# making a dummy file named `D' -- because `-MD' means `put the output
|
||||
# in D'.
|
||||
mkdir conftest.dir
|
||||
# Copy depcomp to subdir because otherwise we won't find it if we're
|
||||
# using a relative directory.
|
||||
cp "$am_depcomp" conftest.dir
|
||||
cd conftest.dir
|
||||
# We will build objects and dependencies in a subdirectory because
|
||||
# it helps to detect inapplicable dependency modes. For instance
|
||||
# both Tru64's cc and ICC support -MD to output dependencies as a
|
||||
# side effect of compilation, but ICC will put the dependencies in
|
||||
# the current directory while Tru64 will put them in the object
|
||||
# directory.
|
||||
mkdir sub
|
||||
|
||||
am_cv_$1_dependencies_compiler_type=none
|
||||
if test "$am_compiler_list" = ""; then
|
||||
am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
|
||||
fi
|
||||
am__universal=false
|
||||
m4_case([$1], [CC],
|
||||
[case " $depcc " in #(
|
||||
*\ -arch\ *\ -arch\ *) am__universal=true ;;
|
||||
esac],
|
||||
[CXX],
|
||||
[case " $depcc " in #(
|
||||
*\ -arch\ *\ -arch\ *) am__universal=true ;;
|
||||
esac])
|
||||
|
||||
for depmode in $am_compiler_list; do
|
||||
# Setup a source with many dependencies, because some compilers
|
||||
# like to wrap large dependency lists on column 80 (with \), and
|
||||
# we should not choose a depcomp mode which is confused by this.
|
||||
#
|
||||
# We need to recreate these files for each test, as the compiler may
|
||||
# overwrite some of them when testing with obscure command lines.
|
||||
# This happens at least with the AIX C compiler.
|
||||
: > sub/conftest.c
|
||||
for i in 1 2 3 4 5 6; do
|
||||
echo '#include "conftst'$i'.h"' >> sub/conftest.c
|
||||
# Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
|
||||
# Solaris 8's {/usr,}/bin/sh.
|
||||
touch sub/conftst$i.h
|
||||
done
|
||||
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
|
||||
|
||||
# We check with `-c' and `-o' for the sake of the "dashmstdout"
|
||||
# mode. It turns out that the SunPro C++ compiler does not properly
|
||||
# handle `-M -o', and we need to detect this. Also, some Intel
|
||||
# versions had trouble with output in subdirs
|
||||
am__obj=sub/conftest.${OBJEXT-o}
|
||||
am__minus_obj="-o $am__obj"
|
||||
case $depmode in
|
||||
gcc)
|
||||
# This depmode causes a compiler race in universal mode.
|
||||
test "$am__universal" = false || continue
|
||||
;;
|
||||
nosideeffect)
|
||||
# after this tag, mechanisms are not by side-effect, so they'll
|
||||
# only be used when explicitly requested
|
||||
if test "x$enable_dependency_tracking" = xyes; then
|
||||
continue
|
||||
else
|
||||
break
|
||||
fi
|
||||
;;
|
||||
msvisualcpp | msvcmsys)
|
||||
# This compiler won't grok `-c -o', but also, the minuso test has
|
||||
# not run yet. These depmodes are late enough in the game, and
|
||||
# so weak that their functioning should not be impacted.
|
||||
am__obj=conftest.${OBJEXT-o}
|
||||
am__minus_obj=
|
||||
;;
|
||||
none) break ;;
|
||||
esac
|
||||
if depmode=$depmode \
|
||||
source=sub/conftest.c object=$am__obj \
|
||||
depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
|
||||
$SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
|
||||
>/dev/null 2>conftest.err &&
|
||||
grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
|
||||
grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
|
||||
grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
|
||||
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
|
||||
# icc doesn't choke on unknown options, it will just issue warnings
|
||||
# or remarks (even with -Werror). So we grep stderr for any message
|
||||
# that says an option was ignored or not supported.
|
||||
# When given -MP, icc 7.0 and 7.1 complain thusly:
|
||||
# icc: Command line warning: ignoring option '-M'; no argument required
|
||||
# The diagnosis changed in icc 8.0:
|
||||
# icc: Command line remark: option '-MP' not supported
|
||||
if (grep 'ignoring option' conftest.err ||
|
||||
grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
|
||||
am_cv_$1_dependencies_compiler_type=$depmode
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
cd ..
|
||||
rm -rf conftest.dir
|
||||
else
|
||||
am_cv_$1_dependencies_compiler_type=none
|
||||
fi
|
||||
])
|
||||
AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
|
||||
AM_CONDITIONAL([am__fastdep$1], [
|
||||
test "x$enable_dependency_tracking" != xno \
|
||||
&& test "$am_cv_$1_dependencies_compiler_type" = gcc3])
|
||||
])
|
||||
|
||||
|
||||
# AM_SET_DEPDIR
|
||||
# -------------
|
||||
# Choose a directory name for dependency files.
|
||||
# This macro is AC_REQUIREd in _AM_DEPENDENCIES
|
||||
AC_DEFUN([AM_SET_DEPDIR],
|
||||
[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
|
||||
AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
|
||||
])
|
||||
|
||||
|
||||
# AM_DEP_TRACK
|
||||
# ------------
|
||||
AC_DEFUN([AM_DEP_TRACK],
|
||||
[AC_ARG_ENABLE(dependency-tracking,
|
||||
[ --disable-dependency-tracking speeds up one-time build
|
||||
--enable-dependency-tracking do not reject slow dependency extractors])
|
||||
if test "x$enable_dependency_tracking" != xno; then
|
||||
am_depcomp="$ac_aux_dir/depcomp"
|
||||
AMDEPBACKSLASH='\'
|
||||
fi
|
||||
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
|
||||
AC_SUBST([AMDEPBACKSLASH])dnl
|
||||
_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
|
||||
])
|
||||
|
||||
# Generate code to set up dependency tracking. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
#serial 5
|
||||
|
||||
# _AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
# ------------------------------
|
||||
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
[{
|
||||
# Autoconf 2.62 quotes --file arguments for eval, but not when files
|
||||
# are listed without --file. Let's play safe and only enable the eval
|
||||
# if we detect the quoting.
|
||||
case $CONFIG_FILES in
|
||||
*\'*) eval set x "$CONFIG_FILES" ;;
|
||||
*) set x $CONFIG_FILES ;;
|
||||
esac
|
||||
shift
|
||||
for mf
|
||||
do
|
||||
# Strip MF so we end up with the name of the file.
|
||||
mf=`echo "$mf" | sed -e 's/:.*$//'`
|
||||
# Check whether this is an Automake generated Makefile or not.
|
||||
# We used to match only the files named `Makefile.in', but
|
||||
# some people rename them; so instead we look at the file content.
|
||||
# Grep'ing the first line is not enough: some people post-process
|
||||
# each Makefile.in and add a new line on top of each file to say so.
|
||||
# Grep'ing the whole file is not good either: AIX grep has a line
|
||||
# limit of 2048, but all sed's we know have understand at least 4000.
|
||||
if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
|
||||
dirpart=`AS_DIRNAME("$mf")`
|
||||
else
|
||||
continue
|
||||
fi
|
||||
# Extract the definition of DEPDIR, am__include, and am__quote
|
||||
# from the Makefile without running `make'.
|
||||
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
|
||||
test -z "$DEPDIR" && continue
|
||||
am__include=`sed -n 's/^am__include = //p' < "$mf"`
|
||||
test -z "am__include" && continue
|
||||
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
|
||||
# When using ansi2knr, U may be empty or an underscore; expand it
|
||||
U=`sed -n 's/^U = //p' < "$mf"`
|
||||
# Find all dependency output files, they are included files with
|
||||
# $(DEPDIR) in their names. We invoke sed twice because it is the
|
||||
# simplest approach to changing $(DEPDIR) to its actual value in the
|
||||
# expansion.
|
||||
for file in `sed -n "
|
||||
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
|
||||
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
|
||||
# Make sure the directory exists.
|
||||
test -f "$dirpart/$file" && continue
|
||||
fdir=`AS_DIRNAME(["$file"])`
|
||||
AS_MKDIR_P([$dirpart/$fdir])
|
||||
# echo "creating $dirpart/$file"
|
||||
echo '# dummy' > "$dirpart/$file"
|
||||
done
|
||||
done
|
||||
}
|
||||
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
|
||||
|
||||
# AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
# -----------------------------
|
||||
# This macro should only be invoked once -- use via AC_REQUIRE.
|
||||
#
|
||||
# This code is only required when automatic dependency tracking
|
||||
# is enabled. FIXME. This creates each `.P' file that we will
|
||||
# need in order to bootstrap the dependency handling code.
|
||||
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
[AC_CONFIG_COMMANDS([depfiles],
|
||||
[test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
[AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
|
||||
])
|
||||
|
||||
# Do all the work for Automake. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||
# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 16
|
||||
|
||||
# This macro actually does too much. Some checks are only needed if
|
||||
# your package does certain things. But this isn't really a big deal.
|
||||
|
||||
# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
|
||||
# AM_INIT_AUTOMAKE([OPTIONS])
|
||||
# -----------------------------------------------
|
||||
# The call with PACKAGE and VERSION arguments is the old style
|
||||
# call (pre autoconf-2.50), which is being phased out. PACKAGE
|
||||
# and VERSION should now be passed to AC_INIT and removed from
|
||||
# the call to AM_INIT_AUTOMAKE.
|
||||
# We support both call styles for the transition. After
|
||||
# the next Automake release, Autoconf can make the AC_INIT
|
||||
# arguments mandatory, and then we can depend on a new Autoconf
|
||||
# release and drop the old call support.
|
||||
AC_DEFUN([AM_INIT_AUTOMAKE],
|
||||
[AC_PREREQ([2.62])dnl
|
||||
dnl Autoconf wants to disallow AM_ names. We explicitly allow
|
||||
dnl the ones we care about.
|
||||
m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
|
||||
AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
|
||||
AC_REQUIRE([AC_PROG_INSTALL])dnl
|
||||
if test "`cd $srcdir && pwd`" != "`pwd`"; then
|
||||
# Use -I$(srcdir) only when $(srcdir) != ., so that make's output
|
||||
# is not polluted with repeated "-I."
|
||||
AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
|
||||
# test to see if srcdir already configured
|
||||
if test -f $srcdir/config.status; then
|
||||
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
|
||||
fi
|
||||
fi
|
||||
|
||||
# test whether we have cygpath
|
||||
if test -z "$CYGPATH_W"; then
|
||||
if (cygpath --version) >/dev/null 2>/dev/null; then
|
||||
CYGPATH_W='cygpath -w'
|
||||
else
|
||||
CYGPATH_W=echo
|
||||
fi
|
||||
fi
|
||||
AC_SUBST([CYGPATH_W])
|
||||
|
||||
# Define the identity of the package.
|
||||
dnl Distinguish between old-style and new-style calls.
|
||||
m4_ifval([$2],
|
||||
[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
|
||||
AC_SUBST([PACKAGE], [$1])dnl
|
||||
AC_SUBST([VERSION], [$2])],
|
||||
[_AM_SET_OPTIONS([$1])dnl
|
||||
dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
|
||||
m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
|
||||
[m4_fatal([AC_INIT should be called with package and version arguments])])dnl
|
||||
AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
|
||||
AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
|
||||
|
||||
_AM_IF_OPTION([no-define],,
|
||||
[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
|
||||
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
|
||||
|
||||
# Some tools Automake needs.
|
||||
AC_REQUIRE([AM_SANITY_CHECK])dnl
|
||||
AC_REQUIRE([AC_ARG_PROGRAM])dnl
|
||||
AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
|
||||
AM_MISSING_PROG(AUTOCONF, autoconf)
|
||||
AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
|
||||
AM_MISSING_PROG(AUTOHEADER, autoheader)
|
||||
AM_MISSING_PROG(MAKEINFO, makeinfo)
|
||||
AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
|
||||
AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
|
||||
AC_REQUIRE([AM_PROG_MKDIR_P])dnl
|
||||
# We need awk for the "check" target. The system "awk" is bad on
|
||||
# some platforms.
|
||||
AC_REQUIRE([AC_PROG_AWK])dnl
|
||||
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
|
||||
AC_REQUIRE([AM_SET_LEADING_DOT])dnl
|
||||
_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
|
||||
[_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
|
||||
[_AM_PROG_TAR([v7])])])
|
||||
_AM_IF_OPTION([no-dependencies],,
|
||||
[AC_PROVIDE_IFELSE([AC_PROG_CC],
|
||||
[_AM_DEPENDENCIES(CC)],
|
||||
[define([AC_PROG_CC],
|
||||
defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
|
||||
AC_PROVIDE_IFELSE([AC_PROG_CXX],
|
||||
[_AM_DEPENDENCIES(CXX)],
|
||||
[define([AC_PROG_CXX],
|
||||
defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
|
||||
AC_PROVIDE_IFELSE([AC_PROG_OBJC],
|
||||
[_AM_DEPENDENCIES(OBJC)],
|
||||
[define([AC_PROG_OBJC],
|
||||
defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
|
||||
])
|
||||
_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
|
||||
dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
|
||||
dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
|
||||
dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
|
||||
AC_CONFIG_COMMANDS_PRE(dnl
|
||||
[m4_provide_if([_AM_COMPILER_EXEEXT],
|
||||
[AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
|
||||
])
|
||||
|
||||
dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
|
||||
dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
|
||||
dnl mangled by Autoconf and run in a shell conditional statement.
|
||||
m4_define([_AC_COMPILER_EXEEXT],
|
||||
m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
|
||||
|
||||
|
||||
# When config.status generates a header, we must update the stamp-h file.
|
||||
# This file resides in the same directory as the config header
|
||||
# that is generated. The stamp files are numbered to have different names.
|
||||
|
||||
# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
|
||||
# loop where config.status creates the headers, so we can generate
|
||||
# our stamp files there.
|
||||
AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
|
||||
[# Compute $1's index in $config_headers.
|
||||
_am_arg=$1
|
||||
_am_stamp_count=1
|
||||
for _am_header in $config_headers :; do
|
||||
case $_am_header in
|
||||
$_am_arg | $_am_arg:* )
|
||||
break ;;
|
||||
* )
|
||||
_am_stamp_count=`expr $_am_stamp_count + 1` ;;
|
||||
esac
|
||||
done
|
||||
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_PROG_INSTALL_SH
|
||||
# ------------------
|
||||
# Define $install_sh.
|
||||
AC_DEFUN([AM_PROG_INSTALL_SH],
|
||||
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||
if test x"${install_sh}" != xset; then
|
||||
case $am_aux_dir in
|
||||
*\ * | *\ *)
|
||||
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
|
||||
*)
|
||||
install_sh="\${SHELL} $am_aux_dir/install-sh"
|
||||
esac
|
||||
fi
|
||||
AC_SUBST(install_sh)])
|
||||
|
||||
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
|
||||
# From Jim Meyering
|
||||
|
||||
# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 5
|
||||
|
||||
# AM_MAINTAINER_MODE([DEFAULT-MODE])
|
||||
# ----------------------------------
|
||||
# Control maintainer-specific portions of Makefiles.
|
||||
# Default is to disable them, unless `enable' is passed literally.
|
||||
# For symmetry, `disable' may be passed as well. Anyway, the user
|
||||
# can override the default with the --enable/--disable switch.
|
||||
AC_DEFUN([AM_MAINTAINER_MODE],
|
||||
[m4_case(m4_default([$1], [disable]),
|
||||
[enable], [m4_define([am_maintainer_other], [disable])],
|
||||
[disable], [m4_define([am_maintainer_other], [enable])],
|
||||
[m4_define([am_maintainer_other], [enable])
|
||||
m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
|
||||
AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
|
||||
dnl maintainer-mode's default is 'disable' unless 'enable' is passed
|
||||
AC_ARG_ENABLE([maintainer-mode],
|
||||
[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful
|
||||
(and sometimes confusing) to the casual installer],
|
||||
[USE_MAINTAINER_MODE=$enableval],
|
||||
[USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
|
||||
AC_MSG_RESULT([$USE_MAINTAINER_MODE])
|
||||
AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
|
||||
MAINT=$MAINTAINER_MODE_TRUE
|
||||
AC_SUBST([MAINT])dnl
|
||||
]
|
||||
)
|
||||
|
||||
AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
|
||||
|
||||
# Check to see how 'make' treats includes. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 4
|
||||
|
||||
# AM_MAKE_INCLUDE()
|
||||
# -----------------
|
||||
# Check to see how make treats includes.
|
||||
AC_DEFUN([AM_MAKE_INCLUDE],
|
||||
[am_make=${MAKE-make}
|
||||
cat > confinc << 'END'
|
||||
am__doit:
|
||||
@echo this is the am__doit target
|
||||
.PHONY: am__doit
|
||||
END
|
||||
# If we don't find an include directive, just comment out the code.
|
||||
AC_MSG_CHECKING([for style of include used by $am_make])
|
||||
am__include="#"
|
||||
am__quote=
|
||||
_am_result=none
|
||||
# First try GNU make style include.
|
||||
echo "include confinc" > confmf
|
||||
# Ignore all kinds of additional output from `make'.
|
||||
case `$am_make -s -f confmf 2> /dev/null` in #(
|
||||
*the\ am__doit\ target*)
|
||||
am__include=include
|
||||
am__quote=
|
||||
_am_result=GNU
|
||||
;;
|
||||
esac
|
||||
# Now try BSD make style include.
|
||||
if test "$am__include" = "#"; then
|
||||
echo '.include "confinc"' > confmf
|
||||
case `$am_make -s -f confmf 2> /dev/null` in #(
|
||||
*the\ am__doit\ target*)
|
||||
am__include=.include
|
||||
am__quote="\""
|
||||
_am_result=BSD
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
AC_SUBST([am__include])
|
||||
AC_SUBST([am__quote])
|
||||
AC_MSG_RESULT([$_am_result])
|
||||
rm -f confinc confmf
|
||||
])
|
||||
|
||||
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 6
|
||||
|
||||
# AM_MISSING_PROG(NAME, PROGRAM)
|
||||
# ------------------------------
|
||||
AC_DEFUN([AM_MISSING_PROG],
|
||||
[AC_REQUIRE([AM_MISSING_HAS_RUN])
|
||||
$1=${$1-"${am_missing_run}$2"}
|
||||
AC_SUBST($1)])
|
||||
|
||||
|
||||
# AM_MISSING_HAS_RUN
|
||||
# ------------------
|
||||
# Define MISSING if not defined so far and test if it supports --run.
|
||||
# If it does, set am_missing_run to use it, otherwise, to nothing.
|
||||
AC_DEFUN([AM_MISSING_HAS_RUN],
|
||||
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||
AC_REQUIRE_AUX_FILE([missing])dnl
|
||||
if test x"${MISSING+set}" != xset; then
|
||||
case $am_aux_dir in
|
||||
*\ * | *\ *)
|
||||
MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
|
||||
*)
|
||||
MISSING="\${SHELL} $am_aux_dir/missing" ;;
|
||||
esac
|
||||
fi
|
||||
# Use eval to expand $SHELL
|
||||
if eval "$MISSING --run true"; then
|
||||
am_missing_run="$MISSING --run "
|
||||
else
|
||||
am_missing_run=
|
||||
AC_MSG_WARN([`missing' script is too old or missing])
|
||||
fi
|
||||
])
|
||||
|
||||
# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_PROG_MKDIR_P
|
||||
# ---------------
|
||||
# Check for `mkdir -p'.
|
||||
AC_DEFUN([AM_PROG_MKDIR_P],
|
||||
[AC_PREREQ([2.60])dnl
|
||||
AC_REQUIRE([AC_PROG_MKDIR_P])dnl
|
||||
dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
|
||||
dnl while keeping a definition of mkdir_p for backward compatibility.
|
||||
dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
|
||||
dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
|
||||
dnl Makefile.ins that do not define MKDIR_P, so we do our own
|
||||
dnl adjustment using top_builddir (which is defined more often than
|
||||
dnl MKDIR_P).
|
||||
AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
|
||||
case $mkdir_p in
|
||||
[[\\/$]]* | ?:[[\\/]]*) ;;
|
||||
*/*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
|
||||
esac
|
||||
])
|
||||
|
||||
# Helper functions for option handling. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 4
|
||||
|
||||
# _AM_MANGLE_OPTION(NAME)
|
||||
# -----------------------
|
||||
AC_DEFUN([_AM_MANGLE_OPTION],
|
||||
[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
|
||||
|
||||
# _AM_SET_OPTION(NAME)
|
||||
# ------------------------------
|
||||
# Set option NAME. Presently that only means defining a flag for this option.
|
||||
AC_DEFUN([_AM_SET_OPTION],
|
||||
[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
|
||||
|
||||
# _AM_SET_OPTIONS(OPTIONS)
|
||||
# ----------------------------------
|
||||
# OPTIONS is a space-separated list of Automake options.
|
||||
AC_DEFUN([_AM_SET_OPTIONS],
|
||||
[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
|
||||
|
||||
# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
|
||||
# -------------------------------------------
|
||||
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
|
||||
AC_DEFUN([_AM_IF_OPTION],
|
||||
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
|
||||
|
||||
# Check to make sure that the build environment is sane. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 5
|
||||
|
||||
# AM_SANITY_CHECK
|
||||
# ---------------
|
||||
AC_DEFUN([AM_SANITY_CHECK],
|
||||
[AC_MSG_CHECKING([whether build environment is sane])
|
||||
# Just in case
|
||||
sleep 1
|
||||
echo timestamp > conftest.file
|
||||
# Reject unsafe characters in $srcdir or the absolute working directory
|
||||
# name. Accept space and tab only in the latter.
|
||||
am_lf='
|
||||
'
|
||||
case `pwd` in
|
||||
*[[\\\"\#\$\&\'\`$am_lf]]*)
|
||||
AC_MSG_ERROR([unsafe absolute working directory name]);;
|
||||
esac
|
||||
case $srcdir in
|
||||
*[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
|
||||
AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
|
||||
esac
|
||||
|
||||
# Do `set' in a subshell so we don't clobber the current shell's
|
||||
# arguments. Must try -L first in case configure is actually a
|
||||
# symlink; some systems play weird games with the mod time of symlinks
|
||||
# (eg FreeBSD returns the mod time of the symlink's containing
|
||||
# directory).
|
||||
if (
|
||||
set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
|
||||
if test "$[*]" = "X"; then
|
||||
# -L didn't work.
|
||||
set X `ls -t "$srcdir/configure" conftest.file`
|
||||
fi
|
||||
rm -f conftest.file
|
||||
if test "$[*]" != "X $srcdir/configure conftest.file" \
|
||||
&& test "$[*]" != "X conftest.file $srcdir/configure"; then
|
||||
|
||||
# If neither matched, then we have a broken ls. This can happen
|
||||
# if, for instance, CONFIG_SHELL is bash and it inherits a
|
||||
# broken ls alias from the environment. This has actually
|
||||
# happened. Such a system could not be considered "sane".
|
||||
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
|
||||
alias in your environment])
|
||||
fi
|
||||
|
||||
test "$[2]" = conftest.file
|
||||
)
|
||||
then
|
||||
# Ok.
|
||||
:
|
||||
else
|
||||
AC_MSG_ERROR([newly created file is older than distributed files!
|
||||
Check your system clock])
|
||||
fi
|
||||
AC_MSG_RESULT(yes)])
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_PROG_INSTALL_STRIP
|
||||
# ---------------------
|
||||
# One issue with vendor `install' (even GNU) is that you can't
|
||||
# specify the program used to strip binaries. This is especially
|
||||
# annoying in cross-compiling environments, where the build's strip
|
||||
# is unlikely to handle the host's binaries.
|
||||
# Fortunately install-sh will honor a STRIPPROG variable, so we
|
||||
# always use install-sh in `make install-strip', and initialize
|
||||
# STRIPPROG with the value of the STRIP variable (set by the user).
|
||||
AC_DEFUN([AM_PROG_INSTALL_STRIP],
|
||||
[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
|
||||
# Installed binaries are usually stripped using `strip' when the user
|
||||
# run `make install-strip'. However `strip' might not be the right
|
||||
# tool to use in cross-compilation environments, therefore Automake
|
||||
# will honor the `STRIP' environment variable to overrule this program.
|
||||
dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
|
||||
if test "$cross_compiling" != no; then
|
||||
AC_CHECK_TOOL([STRIP], [strip], :)
|
||||
fi
|
||||
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
|
||||
AC_SUBST([INSTALL_STRIP_PROGRAM])])
|
||||
|
||||
# Copyright (C) 2006, 2008 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 2
|
||||
|
||||
# _AM_SUBST_NOTMAKE(VARIABLE)
|
||||
# ---------------------------
|
||||
# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
|
||||
# This macro is traced by Automake.
|
||||
AC_DEFUN([_AM_SUBST_NOTMAKE])
|
||||
|
||||
# AM_SUBST_NOTMAKE(VARIABLE)
|
||||
# ---------------------------
|
||||
# Public sister of _AM_SUBST_NOTMAKE.
|
||||
AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
|
||||
|
||||
# Check how to create a tarball. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 2
|
||||
|
||||
# _AM_PROG_TAR(FORMAT)
|
||||
# --------------------
|
||||
# Check how to create a tarball in format FORMAT.
|
||||
# FORMAT should be one of `v7', `ustar', or `pax'.
|
||||
#
|
||||
# Substitute a variable $(am__tar) that is a command
|
||||
# writing to stdout a FORMAT-tarball containing the directory
|
||||
# $tardir.
|
||||
# tardir=directory && $(am__tar) > result.tar
|
||||
#
|
||||
# Substitute a variable $(am__untar) that extract such
|
||||
# a tarball read from stdin.
|
||||
# $(am__untar) < result.tar
|
||||
AC_DEFUN([_AM_PROG_TAR],
|
||||
[# Always define AMTAR for backward compatibility.
|
||||
AM_MISSING_PROG([AMTAR], [tar])
|
||||
m4_if([$1], [v7],
|
||||
[am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
|
||||
[m4_case([$1], [ustar],, [pax],,
|
||||
[m4_fatal([Unknown tar format])])
|
||||
AC_MSG_CHECKING([how to create a $1 tar archive])
|
||||
# Loop over all known methods to create a tar archive until one works.
|
||||
_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
|
||||
_am_tools=${am_cv_prog_tar_$1-$_am_tools}
|
||||
# Do not fold the above two line into one, because Tru64 sh and
|
||||
# Solaris sh will not grok spaces in the rhs of `-'.
|
||||
for _am_tool in $_am_tools
|
||||
do
|
||||
case $_am_tool in
|
||||
gnutar)
|
||||
for _am_tar in tar gnutar gtar;
|
||||
do
|
||||
AM_RUN_LOG([$_am_tar --version]) && break
|
||||
done
|
||||
am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
|
||||
am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
|
||||
am__untar="$_am_tar -xf -"
|
||||
;;
|
||||
plaintar)
|
||||
# Must skip GNU tar: if it does not support --format= it doesn't create
|
||||
# ustar tarball either.
|
||||
(tar --version) >/dev/null 2>&1 && continue
|
||||
am__tar='tar chf - "$$tardir"'
|
||||
am__tar_='tar chf - "$tardir"'
|
||||
am__untar='tar xf -'
|
||||
;;
|
||||
pax)
|
||||
am__tar='pax -L -x $1 -w "$$tardir"'
|
||||
am__tar_='pax -L -x $1 -w "$tardir"'
|
||||
am__untar='pax -r'
|
||||
;;
|
||||
cpio)
|
||||
am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
|
||||
am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
|
||||
am__untar='cpio -i -H $1 -d'
|
||||
;;
|
||||
none)
|
||||
am__tar=false
|
||||
am__tar_=false
|
||||
am__untar=false
|
||||
;;
|
||||
esac
|
||||
|
||||
# If the value was cached, stop now. We just wanted to have am__tar
|
||||
# and am__untar set.
|
||||
test -n "${am_cv_prog_tar_$1}" && break
|
||||
|
||||
# tar/untar a dummy directory, and stop if the command works
|
||||
rm -rf conftest.dir
|
||||
mkdir conftest.dir
|
||||
echo GrepMe > conftest.dir/file
|
||||
AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
|
||||
rm -rf conftest.dir
|
||||
if test -s conftest.tar; then
|
||||
AM_RUN_LOG([$am__untar <conftest.tar])
|
||||
grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
|
||||
fi
|
||||
done
|
||||
rm -rf conftest.dir
|
||||
|
||||
AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
|
||||
AC_MSG_RESULT([$am_cv_prog_tar_$1])])
|
||||
AC_SUBST([am__tar])
|
||||
AC_SUBST([am__untar])
|
||||
]) # _AM_PROG_TAR
|
||||
|
||||
m4_include([../../config/depstand.m4])
|
||||
m4_include([../../config/lead-dot.m4])
|
||||
m4_include([../../config/multi.m4])
|
||||
m4_include([../../config/override.m4])
|
||||
m4_include([../../libtool.m4])
|
||||
m4_include([../../ltoptions.m4])
|
||||
m4_include([../../ltsugar.m4])
|
||||
m4_include([../../ltversion.m4])
|
||||
m4_include([../../lt~obsolete.m4])
|
16656
liboffloadmic/plugin/configure
vendored
Normal file
16656
liboffloadmic/plugin/configure
vendored
Normal file
File diff suppressed because it is too large
Load Diff
135
liboffloadmic/plugin/configure.ac
Normal file
135
liboffloadmic/plugin/configure.ac
Normal file
@ -0,0 +1,135 @@
|
||||
# Plugin for offload execution on Intel MIC devices.
|
||||
#
|
||||
# Copyright (C) 2014 Free Software Foundation, Inc.
|
||||
#
|
||||
# Contributed by Andrey Turetskiy <andrey.turetskiy@intel.com>.
|
||||
#
|
||||
# This file is part of the GNU OpenMP 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/>.
|
||||
|
||||
# Process this file with autoconf to produce a configure script, like so:
|
||||
# aclocal -I ../.. -I ../../config && autoconf && automake
|
||||
|
||||
AC_PREREQ([2.64])
|
||||
AC_INIT([Intel MIC Offload Plugin], [1.0], ,[libgomp-plugin-intelmic])
|
||||
|
||||
AC_CONFIG_AUX_DIR(../..)
|
||||
|
||||
AC_CANONICAL_SYSTEM
|
||||
target_alias=${target_alias-$host_alias}
|
||||
AC_SUBST(target_alias)
|
||||
|
||||
AM_INIT_AUTOMAKE([1.9.0 foreign no-dist])
|
||||
|
||||
AM_MAINTAINER_MODE
|
||||
|
||||
AC_PROG_CC
|
||||
AC_PROG_CXX
|
||||
AC_CONFIG_FILES([Makefile])
|
||||
AM_ENABLE_MULTILIB(, ../..)
|
||||
|
||||
if test "${multilib}" = "yes"; then
|
||||
multilib_arg="--enable-multilib"
|
||||
else
|
||||
multilib_arg=
|
||||
fi
|
||||
|
||||
# Make sure liboffloadmic is enabled
|
||||
case "$enable_liboffloadmic" in
|
||||
host | target)
|
||||
;;
|
||||
*)
|
||||
AC_MSG_ERROR([Liboffloadmic is disabled]) ;;
|
||||
esac
|
||||
AM_CONDITIONAL(PLUGIN_HOST, [test x"$enable_liboffloadmic" = xhost])
|
||||
|
||||
# Get accel target and path to build or install tree of accel compiler
|
||||
accel_search_dir=
|
||||
accel_target=
|
||||
if test x"$enable_liboffloadmic" = xhost; then
|
||||
for accel in `echo $enable_offload_targets | sed -e 's#,# #g'`; do
|
||||
accel_name=`echo $accel | sed 's/=.*//'`
|
||||
accel_dir=`echo $accel | grep '=' | sed 's/.*=//'`
|
||||
case "$accel_name" in
|
||||
*-intelmic-* | *-intelmicemul-*)
|
||||
accel_target=$accel_name
|
||||
accel_search_dir=$accel_dir
|
||||
;;
|
||||
esac
|
||||
done
|
||||
if test x"$accel_target" = x; then
|
||||
AC_MSG_ERROR([--enable-offload-targets does not contain intelmic target])
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(accel_search_dir)
|
||||
AC_SUBST(accel_target)
|
||||
|
||||
AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
|
||||
AC_ARG_ENABLE([version-specific-runtime-libs],
|
||||
AC_HELP_STRING([--enable-version-specific-runtime-libs],
|
||||
[Specify that runtime libraries should be installed in a compiler-specific directory]),
|
||||
[case "$enableval" in
|
||||
yes) enable_version_specific_runtime_libs=yes ;;
|
||||
no) enable_version_specific_runtime_libs=no ;;
|
||||
*) AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
|
||||
esac],
|
||||
[enable_version_specific_runtime_libs=no])
|
||||
AC_MSG_RESULT($enable_version_specific_runtime_libs)
|
||||
|
||||
|
||||
# Calculate toolexeclibdir.
|
||||
# Also toolexecdir, though it's only used in toolexeclibdir.
|
||||
case ${enable_version_specific_runtime_libs} in
|
||||
yes)
|
||||
# Need the gcc compiler version to know where to install libraries
|
||||
# and header files if --enable-version-specific-runtime-libs option
|
||||
# is selected.
|
||||
toolexecdir='$(libdir)/gcc/$(target_alias)'
|
||||
toolexeclibdir='$(toolexecdir)/$(gcc_version)$(MULTISUBDIR)'
|
||||
;;
|
||||
no)
|
||||
if test -n "$with_cross_host" &&
|
||||
test x"$with_cross_host" != x"no"; then
|
||||
# Install a library built with a cross compiler in tooldir, not libdir.
|
||||
toolexecdir='$(exec_prefix)/$(target_alias)'
|
||||
toolexeclibdir='$(toolexecdir)/lib'
|
||||
else
|
||||
toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
|
||||
toolexeclibdir='$(libdir)'
|
||||
fi
|
||||
multi_os_directory=`$CC -print-multi-os-directory`
|
||||
case $multi_os_directory in
|
||||
.) ;; # Avoid trailing /.
|
||||
*) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_LIBTOOL_DLOPEN
|
||||
AM_PROG_LIBTOOL
|
||||
# Forbid libtool to hardcode RPATH, because we want to be able to specify
|
||||
# library search directory using LD_LIBRARY_PATH
|
||||
hardcode_into_libs=no
|
||||
AC_SUBST(toolexecdir)
|
||||
AC_SUBST(toolexeclibdir)
|
||||
|
||||
# Must be last
|
||||
AC_OUTPUT
|
447
liboffloadmic/plugin/libgomp-plugin-intelmic.cpp
Normal file
447
liboffloadmic/plugin/libgomp-plugin-intelmic.cpp
Normal file
@ -0,0 +1,447 @@
|
||||
/* Plugin for offload execution on Intel MIC devices.
|
||||
|
||||
Copyright (C) 2014 Free Software Foundation, Inc.
|
||||
|
||||
Contributed by Ilya Verbin <ilya.verbin@intel.com>.
|
||||
|
||||
This file is part of the GNU OpenMP 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/>. */
|
||||
|
||||
/* Host side part of a libgomp plugin. */
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
#include <libgomp_target.h>
|
||||
#include "compiler_if_host.h"
|
||||
#include "main_target_image.h"
|
||||
|
||||
#define LD_LIBRARY_PATH_ENV "LD_LIBRARY_PATH"
|
||||
#define MIC_LD_LIBRARY_PATH_ENV "MIC_LD_LIBRARY_PATH"
|
||||
|
||||
#ifdef DEBUG
|
||||
#define TRACE(...) \
|
||||
{ \
|
||||
fprintf (stderr, "HOST:\t%s:%s ", __FILE__, __FUNCTION__); \
|
||||
fprintf (stderr, __VA_ARGS__); \
|
||||
fprintf (stderr, "\n"); \
|
||||
}
|
||||
#else
|
||||
#define TRACE { }
|
||||
#endif
|
||||
|
||||
|
||||
static VarDesc vd_host2tgt = {
|
||||
{ 1, 1 }, /* dst, src */
|
||||
{ 1, 0 }, /* in, out */
|
||||
1, /* alloc_if */
|
||||
1, /* free_if */
|
||||
4, /* align */
|
||||
0, /* mic_offset */
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0 }, /* is_static, is_static_dstn, has_length,
|
||||
is_stack_buf, sink_addr, alloc_disp,
|
||||
is_noncont_src, is_noncont_dst */
|
||||
0, /* offset */
|
||||
0, /* size */
|
||||
1, /* count */
|
||||
0, /* alloc */
|
||||
0, /* into */
|
||||
0 /* ptr */
|
||||
};
|
||||
|
||||
static VarDesc vd_tgt2host = {
|
||||
{ 1, 1 }, /* dst, src */
|
||||
{ 0, 1 }, /* in, out */
|
||||
1, /* alloc_if */
|
||||
1, /* free_if */
|
||||
4, /* align */
|
||||
0, /* mic_offset */
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0 }, /* is_static, is_static_dstn, has_length,
|
||||
is_stack_buf, sink_addr, alloc_disp,
|
||||
is_noncont_src, is_noncont_dst */
|
||||
0, /* offset */
|
||||
0, /* size */
|
||||
1, /* count */
|
||||
0, /* alloc */
|
||||
0, /* into */
|
||||
0 /* ptr */
|
||||
};
|
||||
|
||||
|
||||
/* Total number of shared libraries with offloading to Intel MIC. */
|
||||
static int num_libraries;
|
||||
|
||||
/* Pointers to the descriptors, containing pointers to host-side tables and to
|
||||
target images. */
|
||||
static std::vector< std::pair<void *, void *> > lib_descrs;
|
||||
|
||||
/* Thread-safe registration of the main image. */
|
||||
static pthread_once_t main_image_is_registered = PTHREAD_ONCE_INIT;
|
||||
|
||||
|
||||
/* Add path specified in LD_LIBRARY_PATH to MIC_LD_LIBRARY_PATH, which is
|
||||
required by liboffloadmic. */
|
||||
__attribute__((constructor))
|
||||
static void
|
||||
set_mic_lib_path (void)
|
||||
{
|
||||
const char *ld_lib_path = getenv (LD_LIBRARY_PATH_ENV);
|
||||
const char *mic_lib_path = getenv (MIC_LD_LIBRARY_PATH_ENV);
|
||||
|
||||
if (!ld_lib_path)
|
||||
return;
|
||||
|
||||
if (!mic_lib_path)
|
||||
setenv (MIC_LD_LIBRARY_PATH_ENV, ld_lib_path, 1);
|
||||
else
|
||||
{
|
||||
size_t len = strlen (mic_lib_path) + strlen (ld_lib_path) + 2;
|
||||
bool use_alloca = len <= 2048;
|
||||
char *mic_lib_path_new = (char *) (use_alloca ? alloca (len)
|
||||
: malloc (len));
|
||||
if (!mic_lib_path_new)
|
||||
{
|
||||
fprintf (stderr, "%s: Can't allocate memory\n", __FILE__);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
sprintf (mic_lib_path_new, "%s:%s", mic_lib_path, ld_lib_path);
|
||||
setenv (MIC_LD_LIBRARY_PATH_ENV, mic_lib_path_new, 1);
|
||||
|
||||
if (!use_alloca)
|
||||
free (mic_lib_path_new);
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" enum offload_target_type
|
||||
GOMP_OFFLOAD_get_type (void)
|
||||
{
|
||||
enum offload_target_type res = OFFLOAD_TARGET_TYPE_INTEL_MIC;
|
||||
TRACE ("(): return %d", res);
|
||||
return res;
|
||||
}
|
||||
|
||||
extern "C" int
|
||||
GOMP_OFFLOAD_get_num_devices (void)
|
||||
{
|
||||
int res = _Offload_number_of_devices ();
|
||||
TRACE ("(): return %d", res);
|
||||
return res;
|
||||
}
|
||||
|
||||
/* This should be called from every shared library with offloading. */
|
||||
extern "C" void
|
||||
GOMP_OFFLOAD_register_image (void *host_table, void *target_image)
|
||||
{
|
||||
TRACE ("(host_table = %p, target_image = %p)", host_table, target_image);
|
||||
lib_descrs.push_back (std::make_pair (host_table, target_image));
|
||||
num_libraries++;
|
||||
}
|
||||
|
||||
static void
|
||||
offload (const char *file, uint64_t line, int device, const char *name,
|
||||
int num_vars, VarDesc *vars, VarDesc2 *vars2)
|
||||
{
|
||||
OFFLOAD ofld = __offload_target_acquire1 (&device, file, line);
|
||||
if (ofld)
|
||||
__offload_offload1 (ofld, name, 0, num_vars, vars, vars2, 0, NULL, NULL);
|
||||
else
|
||||
{
|
||||
fprintf (stderr, "%s:%d: Offload target acquire failed\n", file, line);
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
register_main_image ()
|
||||
{
|
||||
__offload_register_image (&main_target_image);
|
||||
}
|
||||
|
||||
/* Load offload_target_main on target. */
|
||||
extern "C" void
|
||||
GOMP_OFFLOAD_init_device (int device)
|
||||
{
|
||||
TRACE ("");
|
||||
pthread_once (&main_image_is_registered, register_main_image);
|
||||
offload (__FILE__, __LINE__, device, "__offload_target_init_proc", 0,
|
||||
NULL, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
get_target_table (int device, int &num_funcs, int &num_vars, void **&table)
|
||||
{
|
||||
VarDesc vd1[2] = { vd_tgt2host, vd_tgt2host };
|
||||
vd1[0].ptr = &num_funcs;
|
||||
vd1[0].size = sizeof (num_funcs);
|
||||
vd1[1].ptr = &num_vars;
|
||||
vd1[1].size = sizeof (num_vars);
|
||||
VarDesc2 vd1g[2] = { { "num_funcs", 0 }, { "num_vars", 0 } };
|
||||
|
||||
offload (__FILE__, __LINE__, device, "__offload_target_table_p1", 2,
|
||||
vd1, vd1g);
|
||||
|
||||
int table_size = num_funcs + 2 * num_vars;
|
||||
if (table_size > 0)
|
||||
{
|
||||
table = new void * [table_size];
|
||||
|
||||
VarDesc vd2;
|
||||
vd2 = vd_tgt2host;
|
||||
vd2.ptr = table;
|
||||
vd2.size = table_size * sizeof (void *);
|
||||
VarDesc2 vd2g = { "table", 0 };
|
||||
|
||||
offload (__FILE__, __LINE__, device, "__offload_target_table_p2", 1,
|
||||
&vd2, &vd2g);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
load_lib_and_get_table (int device, int lib_num, mapping_table *&table,
|
||||
int &table_size)
|
||||
{
|
||||
struct TargetImage {
|
||||
int64_t size;
|
||||
/* 10 characters is enough for max int value. */
|
||||
char name[sizeof ("lib0000000000.so")];
|
||||
char data[];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
void ***host_table_descr = (void ***) lib_descrs[lib_num].first;
|
||||
void **host_func_start = host_table_descr[0];
|
||||
void **host_func_end = host_table_descr[1];
|
||||
void **host_var_start = host_table_descr[2];
|
||||
void **host_var_end = host_table_descr[3];
|
||||
|
||||
void **target_image_descr = (void **) lib_descrs[lib_num].second;
|
||||
void *image_start = target_image_descr[0];
|
||||
void *image_end = target_image_descr[1];
|
||||
|
||||
TRACE ("() host_table_descr { %p, %p, %p, %p }", host_func_start,
|
||||
host_func_end, host_var_start, host_var_end);
|
||||
TRACE ("() target_image_descr { %p, %p }", image_start, image_end);
|
||||
|
||||
int64_t image_size = (uintptr_t) image_end - (uintptr_t) image_start;
|
||||
TargetImage *image
|
||||
= (TargetImage *) malloc (sizeof (int64_t) + sizeof ("lib0000000000.so")
|
||||
+ image_size);
|
||||
if (!image)
|
||||
{
|
||||
fprintf (stderr, "%s: Can't allocate memory\n", __FILE__);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
image->size = image_size;
|
||||
sprintf (image->name, "lib%010d.so", lib_num);
|
||||
memcpy (image->data, image_start, image->size);
|
||||
|
||||
TRACE ("() __offload_register_image %s { %p, %d }",
|
||||
image->name, image_start, image->size);
|
||||
__offload_register_image (image);
|
||||
|
||||
int tgt_num_funcs = 0;
|
||||
int tgt_num_vars = 0;
|
||||
void **tgt_table = NULL;
|
||||
get_target_table (device, tgt_num_funcs, tgt_num_vars, tgt_table);
|
||||
free (image);
|
||||
|
||||
/* The func table contains only addresses, the var table contains addresses
|
||||
and corresponding sizes. */
|
||||
int host_num_funcs = host_func_end - host_func_start;
|
||||
int host_num_vars = (host_var_end - host_var_start) / 2;
|
||||
TRACE ("() host_num_funcs = %d, tgt_num_funcs = %d",
|
||||
host_num_funcs, tgt_num_funcs);
|
||||
TRACE ("() host_num_vars = %d, tgt_num_vars = %d",
|
||||
host_num_vars, tgt_num_vars);
|
||||
if (host_num_funcs != tgt_num_funcs)
|
||||
{
|
||||
fprintf (stderr, "%s: Can't map target functions\n", __FILE__);
|
||||
exit (1);
|
||||
}
|
||||
if (host_num_vars != tgt_num_vars)
|
||||
{
|
||||
fprintf (stderr, "%s: Can't map target variables\n", __FILE__);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
table = (mapping_table *) realloc (table, (table_size + host_num_funcs
|
||||
+ host_num_vars)
|
||||
* sizeof (mapping_table));
|
||||
if (table == NULL)
|
||||
{
|
||||
fprintf (stderr, "%s: Can't allocate memory\n", __FILE__);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
for (int i = 0; i < host_num_funcs; i++)
|
||||
{
|
||||
mapping_table t;
|
||||
t.host_start = (uintptr_t) host_func_start[i];
|
||||
t.host_end = t.host_start + 1;
|
||||
t.tgt_start = (uintptr_t) tgt_table[i];
|
||||
t.tgt_end = t.tgt_start + 1;
|
||||
|
||||
TRACE ("() lib %d, func %d:\t0x%llx -- 0x%llx",
|
||||
lib_num, i, t.host_start, t.tgt_start);
|
||||
|
||||
table[table_size++] = t;
|
||||
}
|
||||
|
||||
for (int i = 0; i < host_num_vars * 2; i += 2)
|
||||
{
|
||||
mapping_table t;
|
||||
t.host_start = (uintptr_t) host_var_start[i];
|
||||
t.host_end = t.host_start + (uintptr_t) host_var_start[i+1];
|
||||
t.tgt_start = (uintptr_t) tgt_table[tgt_num_funcs+i];
|
||||
t.tgt_end = t.tgt_start + (uintptr_t) tgt_table[tgt_num_funcs+i+1];
|
||||
|
||||
TRACE ("() lib %d, var %d:\t0x%llx (%d) -- 0x%llx (%d)", lib_num, i/2,
|
||||
t.host_start, t.host_end - t.host_start,
|
||||
t.tgt_start, t.tgt_end - t.tgt_start);
|
||||
|
||||
table[table_size++] = t;
|
||||
}
|
||||
|
||||
delete [] tgt_table;
|
||||
}
|
||||
|
||||
extern "C" int
|
||||
GOMP_OFFLOAD_get_table (int device, void *result)
|
||||
{
|
||||
TRACE ("(num_libraries = %d)", num_libraries);
|
||||
|
||||
mapping_table *table = NULL;
|
||||
int table_size = 0;
|
||||
|
||||
for (int i = 0; i < num_libraries; i++)
|
||||
load_lib_and_get_table (device, i, table, table_size);
|
||||
|
||||
*(void **) result = table;
|
||||
return table_size;
|
||||
}
|
||||
|
||||
extern "C" void *
|
||||
GOMP_OFFLOAD_alloc (int device, size_t size)
|
||||
{
|
||||
TRACE ("(size = %d)", size);
|
||||
|
||||
void *tgt_ptr;
|
||||
VarDesc vd1[2] = { vd_host2tgt, vd_tgt2host };
|
||||
vd1[0].ptr = &size;
|
||||
vd1[0].size = sizeof (size);
|
||||
vd1[1].ptr = &tgt_ptr;
|
||||
vd1[1].size = sizeof (void *);
|
||||
VarDesc2 vd1g[2] = { { "size", 0 }, { "tgt_ptr", 0 } };
|
||||
|
||||
offload (__FILE__, __LINE__, device, "__offload_target_alloc", 2, vd1, vd1g);
|
||||
|
||||
return tgt_ptr;
|
||||
}
|
||||
|
||||
extern "C" void
|
||||
GOMP_OFFLOAD_free (int device, void *tgt_ptr)
|
||||
{
|
||||
TRACE ("(tgt_ptr = %p)", tgt_ptr);
|
||||
|
||||
VarDesc vd1 = vd_host2tgt;
|
||||
vd1.ptr = &tgt_ptr;
|
||||
vd1.size = sizeof (void *);
|
||||
VarDesc2 vd1g = { "tgt_ptr", 0 };
|
||||
|
||||
offload (__FILE__, __LINE__, device, "__offload_target_free", 1, &vd1, &vd1g);
|
||||
}
|
||||
|
||||
extern "C" void *
|
||||
GOMP_OFFLOAD_host2dev (int device, void *tgt_ptr, const void *host_ptr,
|
||||
size_t size)
|
||||
{
|
||||
TRACE ("(tgt_ptr = %p, host_ptr = %p, size = %d)", tgt_ptr, host_ptr, size);
|
||||
if (!size)
|
||||
return tgt_ptr;
|
||||
|
||||
VarDesc vd1[2] = { vd_host2tgt, vd_host2tgt };
|
||||
vd1[0].ptr = &tgt_ptr;
|
||||
vd1[0].size = sizeof (void *);
|
||||
vd1[1].ptr = &size;
|
||||
vd1[1].size = sizeof (size);
|
||||
VarDesc2 vd1g[2] = { { "tgt_ptr", 0 }, { "size", 0 } };
|
||||
|
||||
offload (__FILE__, __LINE__, device, "__offload_target_host2tgt_p1", 2,
|
||||
vd1, vd1g);
|
||||
|
||||
VarDesc vd2 = vd_host2tgt;
|
||||
vd2.ptr = (void *) host_ptr;
|
||||
vd2.size = size;
|
||||
VarDesc2 vd2g = { "var", 0 };
|
||||
|
||||
offload (__FILE__, __LINE__, device, "__offload_target_host2tgt_p2", 1,
|
||||
&vd2, &vd2g);
|
||||
|
||||
return tgt_ptr;
|
||||
}
|
||||
|
||||
extern "C" void *
|
||||
GOMP_OFFLOAD_dev2host (int device, void *host_ptr, const void *tgt_ptr,
|
||||
size_t size)
|
||||
{
|
||||
TRACE ("(host_ptr = %p, tgt_ptr = %p, size = %d)", host_ptr, tgt_ptr, size);
|
||||
if (!size)
|
||||
return host_ptr;
|
||||
|
||||
VarDesc vd1[2] = { vd_host2tgt, vd_host2tgt };
|
||||
vd1[0].ptr = &tgt_ptr;
|
||||
vd1[0].size = sizeof (void *);
|
||||
vd1[1].ptr = &size;
|
||||
vd1[1].size = sizeof (size);
|
||||
VarDesc2 vd1g[2] = { { "tgt_ptr", 0 }, { "size", 0 } };
|
||||
|
||||
offload (__FILE__, __LINE__, device, "__offload_target_tgt2host_p1", 2,
|
||||
vd1, vd1g);
|
||||
|
||||
VarDesc vd2 = vd_tgt2host;
|
||||
vd2.ptr = (void *) host_ptr;
|
||||
vd2.size = size;
|
||||
VarDesc2 vd2g = { "var", 0 };
|
||||
|
||||
offload (__FILE__, __LINE__, device, "__offload_target_tgt2host_p2", 1,
|
||||
&vd2, &vd2g);
|
||||
|
||||
return host_ptr;
|
||||
}
|
||||
|
||||
extern "C" void
|
||||
GOMP_OFFLOAD_run (int device, void *tgt_fn, void *tgt_vars)
|
||||
{
|
||||
TRACE ("(tgt_fn = %p, tgt_vars = %p)", tgt_fn, tgt_vars);
|
||||
|
||||
VarDesc vd1[2] = { vd_host2tgt, vd_host2tgt };
|
||||
vd1[0].ptr = &tgt_fn;
|
||||
vd1[0].size = sizeof (void *);
|
||||
vd1[1].ptr = &tgt_vars;
|
||||
vd1[1].size = sizeof (void *);
|
||||
VarDesc2 vd1g[2] = { { "tgt_fn", 0 }, { "tgt_vars", 0 } };
|
||||
|
||||
offload (__FILE__, __LINE__, device, "__offload_target_run", 2, vd1, vd1g);
|
||||
}
|
366
liboffloadmic/plugin/offload_target_main.cpp
Normal file
366
liboffloadmic/plugin/offload_target_main.cpp
Normal file
@ -0,0 +1,366 @@
|
||||
/* Plugin for offload execution on Intel MIC devices.
|
||||
|
||||
Copyright (C) 2014 Free Software Foundation, Inc.
|
||||
|
||||
Contributed by Ilya Verbin <ilya.verbin@intel.com>.
|
||||
|
||||
This file is part of the GNU OpenMP 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/>. */
|
||||
|
||||
/* Target side part of a libgomp plugin. */
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "compiler_if_target.h"
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
#define TRACE(...) \
|
||||
{ \
|
||||
fprintf (stderr, "TARGET:\t%s:%s ", __FILE__, __FUNCTION__); \
|
||||
fprintf (stderr, __VA_ARGS__); \
|
||||
fprintf (stderr, "\n"); \
|
||||
}
|
||||
#else
|
||||
#define TRACE { }
|
||||
#endif
|
||||
|
||||
|
||||
static VarDesc vd_host2tgt = {
|
||||
{ 1, 1 }, /* dst, src */
|
||||
{ 1, 0 }, /* in, out */
|
||||
1, /* alloc_if */
|
||||
1, /* free_if */
|
||||
4, /* align */
|
||||
0, /* mic_offset */
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0 }, /* is_static, is_static_dstn, has_length,
|
||||
is_stack_buf, sink_addr, alloc_disp,
|
||||
is_noncont_src, is_noncont_dst */
|
||||
0, /* offset */
|
||||
0, /* size */
|
||||
1, /* count */
|
||||
0, /* alloc */
|
||||
0, /* into */
|
||||
0 /* ptr */
|
||||
};
|
||||
|
||||
static VarDesc vd_tgt2host = {
|
||||
{ 1, 1 }, /* dst, src */
|
||||
{ 0, 1 }, /* in, out */
|
||||
1, /* alloc_if */
|
||||
1, /* free_if */
|
||||
4, /* align */
|
||||
0, /* mic_offset */
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0 }, /* is_static, is_static_dstn, has_length,
|
||||
is_stack_buf, sink_addr, alloc_disp,
|
||||
is_noncont_src, is_noncont_dst */
|
||||
0, /* offset */
|
||||
0, /* size */
|
||||
1, /* count */
|
||||
0, /* alloc */
|
||||
0, /* into */
|
||||
0 /* ptr */
|
||||
};
|
||||
|
||||
/* Pointer to the descriptor of the last loaded shared library. */
|
||||
static void *last_loaded_library = NULL;
|
||||
|
||||
/* Pointer and size of the variable, used in __offload_target_host2tgt_p[12]
|
||||
and __offload_target_tgt2host_p[12]. */
|
||||
static void *last_var_ptr = NULL;
|
||||
static int last_var_size = 0;
|
||||
|
||||
|
||||
/* Override the corresponding functions from libgomp. */
|
||||
extern "C" int
|
||||
omp_is_initial_device (void) __GOMP_NOTHROW
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern "C" int32_t
|
||||
omp_is_initial_device_ (void)
|
||||
{
|
||||
return omp_is_initial_device ();
|
||||
}
|
||||
|
||||
|
||||
/* Dummy function needed for the initialization of target process during the
|
||||
first call to __offload_offload1. */
|
||||
static void
|
||||
__offload_target_init_proc (OFFLOAD ofldt)
|
||||
{
|
||||
TRACE ("");
|
||||
}
|
||||
|
||||
/* Collect addresses of the offload functions and of the global variables from
|
||||
the library descriptor and send them to host.
|
||||
Part 1: Send num_funcs and num_vars to host. */
|
||||
static void
|
||||
__offload_target_table_p1 (OFFLOAD ofldt)
|
||||
{
|
||||
void ***lib_descr = (void ***) last_loaded_library;
|
||||
|
||||
if (lib_descr == NULL)
|
||||
{
|
||||
TRACE ("");
|
||||
fprintf (stderr, "Error! No shared libraries loaded on target.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
void **func_table_begin = lib_descr[0];
|
||||
void **func_table_end = lib_descr[1];
|
||||
void **var_table_begin = lib_descr[2];
|
||||
void **var_table_end = lib_descr[3];
|
||||
|
||||
/* The func table contains only addresses, the var table contains addresses
|
||||
and corresponding sizes. */
|
||||
int num_funcs = func_table_end - func_table_begin;
|
||||
int num_vars = (var_table_end - var_table_begin) / 2;
|
||||
TRACE ("(num_funcs = %d, num_vars = %d)", num_funcs, num_vars);
|
||||
|
||||
VarDesc vd1[2] = { vd_tgt2host, vd_tgt2host };
|
||||
vd1[0].ptr = &num_funcs;
|
||||
vd1[0].size = sizeof (num_funcs);
|
||||
vd1[1].ptr = &num_vars;
|
||||
vd1[1].size = sizeof (num_vars);
|
||||
VarDesc2 vd2[2] = { { "num_funcs", 0 }, { "num_vars", 0 } };
|
||||
|
||||
__offload_target_enter (ofldt, 2, vd1, vd2);
|
||||
__offload_target_leave (ofldt);
|
||||
}
|
||||
|
||||
/* Part 2: Send the table with addresses to host. */
|
||||
static void
|
||||
__offload_target_table_p2 (OFFLOAD ofldt)
|
||||
{
|
||||
void ***lib_descr = (void ***) last_loaded_library;
|
||||
void **func_table_begin = lib_descr[0];
|
||||
void **func_table_end = lib_descr[1];
|
||||
void **var_table_begin = lib_descr[2];
|
||||
void **var_table_end = lib_descr[3];
|
||||
|
||||
int num_funcs = func_table_end - func_table_begin;
|
||||
int num_vars = (var_table_end - var_table_begin) / 2;
|
||||
int table_size = (num_funcs + 2 * num_vars) * sizeof (void *);
|
||||
void **table = (void **) malloc (table_size);
|
||||
TRACE ("(table_size = %d)", table_size);
|
||||
|
||||
VarDesc vd1;
|
||||
vd1 = vd_tgt2host;
|
||||
vd1.ptr = table;
|
||||
vd1.size = table_size;
|
||||
VarDesc2 vd2 = { "table", 0 };
|
||||
|
||||
__offload_target_enter (ofldt, 1, &vd1, &vd2);
|
||||
|
||||
void **p;
|
||||
int i = 0;
|
||||
for (p = func_table_begin; p < func_table_end; p++, i++)
|
||||
table[i] = *p;
|
||||
|
||||
for (p = var_table_begin; p < var_table_end; p++, i++)
|
||||
table[i] = *p;
|
||||
|
||||
__offload_target_leave (ofldt);
|
||||
free (table);
|
||||
}
|
||||
|
||||
/* Allocate size bytes and send a pointer to the allocated memory to host. */
|
||||
static void
|
||||
__offload_target_alloc (OFFLOAD ofldt)
|
||||
{
|
||||
size_t size = 0;
|
||||
void *ptr = NULL;
|
||||
|
||||
VarDesc vd1[2] = { vd_host2tgt, vd_tgt2host };
|
||||
vd1[0].ptr = &size;
|
||||
vd1[0].size = sizeof (size);
|
||||
vd1[1].ptr = &ptr;
|
||||
vd1[1].size = sizeof (void *);
|
||||
VarDesc2 vd2[2] = { { "size", 0 }, { "ptr", 0 } };
|
||||
|
||||
__offload_target_enter (ofldt, 2, vd1, vd2);
|
||||
ptr = malloc (size);
|
||||
TRACE ("(size = %d): ptr = %p", size, ptr);
|
||||
__offload_target_leave (ofldt);
|
||||
}
|
||||
|
||||
/* Free the memory space pointed to by ptr. */
|
||||
static void
|
||||
__offload_target_free (OFFLOAD ofldt)
|
||||
{
|
||||
void *ptr = 0;
|
||||
|
||||
VarDesc vd1 = vd_host2tgt;
|
||||
vd1.ptr = &ptr;
|
||||
vd1.size = sizeof (void *);
|
||||
VarDesc2 vd2 = { "ptr", 0 };
|
||||
|
||||
__offload_target_enter (ofldt, 1, &vd1, &vd2);
|
||||
TRACE ("(ptr = %p)", ptr);
|
||||
free (ptr);
|
||||
__offload_target_leave (ofldt);
|
||||
}
|
||||
|
||||
/* Receive var_size bytes from host and store to var_ptr.
|
||||
Part 1: Receive var_ptr and var_size from host. */
|
||||
static void
|
||||
__offload_target_host2tgt_p1 (OFFLOAD ofldt)
|
||||
{
|
||||
void *var_ptr = NULL;
|
||||
size_t var_size = 0;
|
||||
|
||||
VarDesc vd1[2] = { vd_host2tgt, vd_host2tgt };
|
||||
vd1[0].ptr = &var_ptr;
|
||||
vd1[0].size = sizeof (void *);
|
||||
vd1[1].ptr = &var_size;
|
||||
vd1[1].size = sizeof (var_size);
|
||||
VarDesc2 vd2[2] = { { "var_ptr", 0 }, { "var_size", 0 } };
|
||||
|
||||
__offload_target_enter (ofldt, 2, vd1, vd2);
|
||||
TRACE ("(var_ptr = %p, var_size = %d)", var_ptr, var_size);
|
||||
last_var_ptr = var_ptr;
|
||||
last_var_size = var_size;
|
||||
__offload_target_leave (ofldt);
|
||||
}
|
||||
|
||||
/* Part 2: Receive the data from host. */
|
||||
static void
|
||||
__offload_target_host2tgt_p2 (OFFLOAD ofldt)
|
||||
{
|
||||
TRACE ("(last_var_ptr = %p, last_var_size = %d)",
|
||||
last_var_ptr, last_var_size);
|
||||
|
||||
VarDesc vd1 = vd_host2tgt;
|
||||
vd1.ptr = last_var_ptr;
|
||||
vd1.size = last_var_size;
|
||||
VarDesc2 vd2 = { "var", 0 };
|
||||
|
||||
__offload_target_enter (ofldt, 1, &vd1, &vd2);
|
||||
__offload_target_leave (ofldt);
|
||||
}
|
||||
|
||||
/* Send var_size bytes from var_ptr to host.
|
||||
Part 1: Receive var_ptr and var_size from host. */
|
||||
static void
|
||||
__offload_target_tgt2host_p1 (OFFLOAD ofldt)
|
||||
{
|
||||
void *var_ptr = NULL;
|
||||
size_t var_size = 0;
|
||||
|
||||
VarDesc vd1[2] = { vd_host2tgt, vd_host2tgt };
|
||||
vd1[0].ptr = &var_ptr;
|
||||
vd1[0].size = sizeof (void *);
|
||||
vd1[1].ptr = &var_size;
|
||||
vd1[1].size = sizeof (var_size);
|
||||
VarDesc2 vd2[2] = { { "var_ptr", 0 }, { "var_size", 0 } };
|
||||
|
||||
__offload_target_enter (ofldt, 2, vd1, vd2);
|
||||
TRACE ("(var_ptr = %p, var_size = %d)", var_ptr, var_size);
|
||||
last_var_ptr = var_ptr;
|
||||
last_var_size = var_size;
|
||||
__offload_target_leave (ofldt);
|
||||
}
|
||||
|
||||
/* Part 2: Send the data to host. */
|
||||
static void
|
||||
__offload_target_tgt2host_p2 (OFFLOAD ofldt)
|
||||
{
|
||||
TRACE ("(last_var_ptr = %p, last_var_size = %d)",
|
||||
last_var_ptr, last_var_size);
|
||||
|
||||
VarDesc vd1 = vd_tgt2host;
|
||||
vd1.ptr = last_var_ptr;
|
||||
vd1.size = last_var_size;
|
||||
VarDesc2 vd2 = { "var", 0 };
|
||||
|
||||
__offload_target_enter (ofldt, 1, &vd1, &vd2);
|
||||
__offload_target_leave (ofldt);
|
||||
}
|
||||
|
||||
/* Call offload function by the address fn_ptr and pass vars_ptr to it. */
|
||||
static void
|
||||
__offload_target_run (OFFLOAD ofldt)
|
||||
{
|
||||
void *fn_ptr;
|
||||
void *vars_ptr;
|
||||
|
||||
VarDesc vd1[2] = { vd_host2tgt, vd_host2tgt };
|
||||
vd1[0].ptr = &fn_ptr;
|
||||
vd1[0].size = sizeof (void *);
|
||||
vd1[1].ptr = &vars_ptr;
|
||||
vd1[1].size = sizeof (void *);
|
||||
VarDesc2 vd2[2] = { { "fn_ptr", 0 }, { "vars_ptr", 0 } };
|
||||
|
||||
__offload_target_enter (ofldt, 2, vd1, vd2);
|
||||
TRACE ("(fn_ptr = %p, vars_ptr = %p)", fn_ptr, vars_ptr);
|
||||
void (*fn)(void *) = (void (*)(void *)) fn_ptr;
|
||||
fn (vars_ptr);
|
||||
__offload_target_leave (ofldt);
|
||||
}
|
||||
|
||||
|
||||
/* This should be called from every library with offloading. */
|
||||
extern "C" void
|
||||
target_register_lib (const void *target_table)
|
||||
{
|
||||
TRACE ("(target_table = %p { %p, %p, %p, %p })", target_table,
|
||||
((void **) target_table)[0], ((void **) target_table)[1],
|
||||
((void **) target_table)[2], ((void **) target_table)[3]);
|
||||
|
||||
last_loaded_library = (void *) target_table;
|
||||
}
|
||||
|
||||
/* Use __offload_target_main from liboffload. */
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
__offload_target_main ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* Register offload_target_main's functions in the liboffload. */
|
||||
|
||||
struct Entry {
|
||||
const char *name;
|
||||
void *func;
|
||||
};
|
||||
|
||||
#define REGISTER(f) \
|
||||
extern "C" const Entry __offload_target_##f##_$entry \
|
||||
__attribute__ ((section(".OffloadEntryTable."))) = { \
|
||||
"__offload_target_"#f, \
|
||||
(void *) __offload_target_##f \
|
||||
}
|
||||
REGISTER (init_proc);
|
||||
REGISTER (table_p1);
|
||||
REGISTER (table_p2);
|
||||
REGISTER (alloc);
|
||||
REGISTER (free);
|
||||
REGISTER (host2tgt_p1);
|
||||
REGISTER (host2tgt_p2);
|
||||
REGISTER (tgt2host_p1);
|
||||
REGISTER (tgt2host_p2);
|
||||
REGISTER (run);
|
||||
#undef REGISTER
|
Loading…
Reference in New Issue
Block a user