From: Thomas Schwinge Date: Wed, 23 Sep 2015 14:52:50 +0000 (+0200) Subject: Fix --enable-offload-targets/-foffload handling, pt. 1 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=64186aad5abe1c3e1468f172589b55a6449d6fc2;p=gcc.git Fix --enable-offload-targets/-foffload handling, pt. 1 gcc/ * configure.ac (offload_targets, OFFLOAD_TARGETS): Separate offload targets by commas, not colons. * config.in: Regenerate. * configure: Likewise. * gcc.c (driver::maybe_putenv_COLLECT_LTO_WRAPPER): Due to that, instead of setting up the default offload targets here... (process_command): ..., do it here. libgomp/ * plugin/configfrag.ac (OFFLOAD_TARGETS): Clarify that offload targets are separated by commas. * config.h.in: Regenerate. From-SVN: r228053 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0e9b728e6e5..df71558a7e5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,17 @@ +2015-09-23 Thomas Schwinge + + * configure.ac (offload_targets, OFFLOAD_TARGETS): Separate + offload targets by commas, not colons. + * config.in: Regenerate. + * configure: Likewise. + * gcc.c (driver::maybe_putenv_COLLECT_LTO_WRAPPER): Due to that, + instead of setting up the default offload targets here... + (process_command): ..., do it here. + libgomp/ + * plugin/configfrag.ac (OFFLOAD_TARGETS): Clarify that offload + targets are separated by commas. + * config.h.in: Regenerate. + 2015-09-23 Thomas Schwinge Nathan Sidwell diff --git a/gcc/config.in b/gcc/config.in index 431d26218d1..c5c1be4e488 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -1913,7 +1913,7 @@ #endif -/* Define to hold the list of target names suitable for offloading. */ +/* Define to offload targets, separated by commas. */ #ifndef USED_FOR_TARGET #undef OFFLOAD_TARGETS #endif diff --git a/gcc/configure b/gcc/configure index 6fb11a7c407..7493c800f48 100755 --- a/gcc/configure +++ b/gcc/configure @@ -7696,7 +7696,7 @@ for tgt in `echo $enable_offload_targets | sed 's/,/ /g'`; do if test x"$offload_targets" = x; then offload_targets=$tgt else - offload_targets="$offload_targets:$tgt" + offload_targets="$offload_targets,$tgt" fi done diff --git a/gcc/configure.ac b/gcc/configure.ac index a6e078a998a..9d1f6f18eba 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -941,11 +941,11 @@ for tgt in `echo $enable_offload_targets | sed 's/,/ /g'`; do if test x"$offload_targets" = x; then offload_targets=$tgt else - offload_targets="$offload_targets:$tgt" + offload_targets="$offload_targets,$tgt" fi done AC_DEFINE_UNQUOTED(OFFLOAD_TARGETS, "$offload_targets", - [Define to hold the list of target names suitable for offloading.]) + [Define to offload targets, separated by commas.]) if test x"$offload_targets" != x; then AC_DEFINE(ENABLE_OFFLOADING, 1, [Define this to enable support for offloading.]) diff --git a/gcc/gcc.c b/gcc/gcc.c index 757bfc988eb..78b68e28aa6 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -284,7 +284,8 @@ static const char *const spec_version = DEFAULT_TARGET_VERSION; static const char *spec_machine = DEFAULT_TARGET_MACHINE; static const char *spec_host_machine = DEFAULT_REAL_TARGET_MACHINE; -/* List of offload targets. */ +/* List of offload targets. Separated by colon. Empty string for + -foffload=disable. */ static char *offload_targets = NULL; @@ -4376,6 +4377,13 @@ process_command (unsigned int decoded_options_count, CL_DRIVER, &handlers, global_dc); } +#ifdef ENABLE_OFFLOADING + /* If the user didn't specify any, default to all configured offload + targets. */ + if (offload_targets == NULL) + handle_foffload_option (OFFLOAD_TARGETS); +#endif + if (output_file && strcmp (output_file, "-") != 0 && strcmp (output_file, HOST_BIT_BUCKET) != 0) @@ -7572,22 +7580,17 @@ driver::maybe_putenv_COLLECT_LTO_WRAPPER () const void driver::maybe_putenv_OFFLOAD_TARGETS () const { - const char *targets = offload_targets; - - /* If no targets specified by -foffload, use all available targets. */ - if (!targets) - targets = OFFLOAD_TARGETS; - - if (strlen (targets) > 0) + if (offload_targets && offload_targets[0] != '\0') { obstack_grow (&collect_obstack, "OFFLOAD_TARGET_NAMES=", sizeof ("OFFLOAD_TARGET_NAMES=") - 1); - obstack_grow (&collect_obstack, targets, - strlen (targets) + 1); + obstack_grow (&collect_obstack, offload_targets, + strlen (offload_targets) + 1); xputenv (XOBFINISH (&collect_obstack, char *)); } free (offload_targets); + offload_targets = NULL; } /* Reject switches that no pass was interested in. */ diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c index 150d36845d6..e13a82a28c8 100644 --- a/gcc/lto-wrapper.c +++ b/gcc/lto-wrapper.c @@ -594,6 +594,8 @@ append_offload_options (obstack *argv_obstack, const char *target, else { opts = strchr (option->arg, '='); + /* If there are offload targets specified, but no actual options, + there is nothing to do here. */ if (!opts) continue; @@ -606,10 +608,12 @@ append_offload_options (obstack *argv_obstack, const char *target, next = opts; next = (next > opts) ? opts : next; + /* Are we looking for this offload target? */ if (strlen (target) == (size_t) (next - cur) && strncmp (target, cur, next - cur) == 0) break; + /* Skip the comma or equal sign. */ cur = next + 1; } diff --git a/libgomp/config.h.in b/libgomp/config.h.in index 8533f0345b7..2e4c6981aea 100644 --- a/libgomp/config.h.in +++ b/libgomp/config.h.in @@ -95,7 +95,7 @@ */ #undef LT_OBJDIR -/* Define to hold the list of target names suitable for offloading. */ +/* Define to offload targets, separated by commas. */ #undef OFFLOAD_TARGETS /* Name of package */ diff --git a/libgomp/plugin/configfrag.ac b/libgomp/plugin/configfrag.ac index 8c2a420d793..ad70dd1f3e8 100644 --- a/libgomp/plugin/configfrag.ac +++ b/libgomp/plugin/configfrag.ac @@ -141,7 +141,7 @@ if test x"$enable_offload_targets" != x; then done fi AC_DEFINE_UNQUOTED(OFFLOAD_TARGETS, "$offload_targets", - [Define to hold the list of target names suitable for offloading.]) + [Define to offload targets, separated by commas.]) AM_CONDITIONAL([PLUGIN_NVPTX], [test $PLUGIN_NVPTX = 1]) AC_DEFINE_UNQUOTED([PLUGIN_NVPTX], [$PLUGIN_NVPTX], [Define to 1 if the NVIDIA plugin is built, 0 if not.])