aboutsummaryrefslogtreecommitdiff
path: root/gcc/lto-wrapper.c
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2021-04-28 18:46:47 +0200
committerTobias Burnus <tobias@codesourcery.com>2021-04-28 18:46:47 +0200
commitfe5bfa6704179f8db7d1ae0b485439e9896df8eb (patch)
tree7687db287a1ef04b1399cf8db2a06eb9398cc995 /gcc/lto-wrapper.c
parent3da80ed7efd582575e7850a403ce693ec882d087 (diff)
downloadgcc-fe5bfa6704179f8db7d1ae0b485439e9896df8eb.zip
gcc-fe5bfa6704179f8db7d1ae0b485439e9896df8eb.tar.gz
gcc-fe5bfa6704179f8db7d1ae0b485439e9896df8eb.tar.bz2
offload-defaulted: Config option to silently ignore uninstalled offload compilers
If configured with --enable-offload-defaulted, configured but not installed offload compilers and libgomp plugins are silently ignored. Useful for distribution compilers where those are in separate optional packages. 2021-04-28 Jakub Jelinek <jakub@redhat.com> Tobias Burnus <tobias@codesourcery.com> ChangeLog: * configure.ac (--enable-offload-defaulted): New. * configure: Regenerate. gcc/ChangeLog: * configure.ac (OFFLOAD_DEFAULTED): AC_DEFINE if offload-defaulted. * gcc.c (process_command): New variable. (driver::maybe_putenv_OFFLOAD_TARGETS): If OFFLOAD_DEFAULTED, set it if -foffload is defaulted. * lto-wrapper.c (OFFLOAD_TARGET_DEFAULT_ENV): Define. (compile_offload_image): If OFFLOAD_DEFAULTED and OFFLOAD_TARGET_DEFAULT is in the environment, don't fail if corresponding mkoffload can't be found. (compile_images_for_offload_targets): Likewise. Free and clear offload_names if no valid offload is found. * config.in: Regenerate. * configure: Regenerate. libgomp/ChangeLog: * configure.ac (OFFLOAD_DEFAULTED): AC_DEFINE if offload-defaulted. * target.c (gomp_load_plugin_for_device): If set and if a plugin can't be dlopened, silently assume it has no devices. * Makefile.in: Regenerate. * config.h.in: Regenerate. * configure: Regenerate.
Diffstat (limited to 'gcc/lto-wrapper.c')
-rw-r--r--gcc/lto-wrapper.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c
index 49894e4..e95b0d8 100644
--- a/gcc/lto-wrapper.c
+++ b/gcc/lto-wrapper.c
@@ -52,6 +52,7 @@ along with GCC; see the file COPYING3. If not see
/* Environment variable, used for passing the names of offload targets from GCC
driver to lto-wrapper. */
#define OFFLOAD_TARGET_NAMES_ENV "OFFLOAD_TARGET_NAMES"
+#define OFFLOAD_TARGET_DEFAULT_ENV "OFFLOAD_TARGET_DEFAULT"
/* By default there is no special suffix for target executables. */
#ifdef TARGET_EXECUTABLE_SUFFIX
@@ -906,6 +907,13 @@ compile_offload_image (const char *target, const char *compiler_path,
compiler = paths[i];
break;
}
+#if OFFLOAD_DEFAULTED
+ if (!compiler && getenv (OFFLOAD_TARGET_DEFAULT_ENV))
+ {
+ free_array_of_ptrs ((void **) paths, n_paths);
+ return NULL;
+ }
+#endif
if (!compiler)
fatal_error (input_location,
@@ -976,6 +984,7 @@ compile_images_for_offload_targets (unsigned in_argc, char *in_argv[],
if (!target_names)
return;
unsigned num_targets = parse_env_var (target_names, &names, NULL);
+ int next_name_entry = 0;
const char *compiler_path = getenv ("COMPILER_PATH");
if (!compiler_path)
@@ -986,15 +995,28 @@ compile_images_for_offload_targets (unsigned in_argc, char *in_argv[],
offload_names = XCNEWVEC (char *, num_targets + 1);
for (unsigned i = 0; i < num_targets; i++)
{
- offload_names[i]
+ offload_names[next_name_entry]
= compile_offload_image (names[i], compiler_path, in_argc, in_argv,
compiler_opts, compiler_opt_count,
linker_opts, linker_opt_count);
- if (!offload_names[i])
+ if (!offload_names[next_name_entry])
+#if OFFLOAD_DEFAULTED
+ continue;
+#else
fatal_error (input_location,
"problem with building target image for %s", names[i]);
+#endif
+ next_name_entry++;
}
+#if OFFLOAD_DEFAULTED
+ if (next_name_entry == 0)
+ {
+ free (offload_names);
+ offload_names = NULL;
+ }
+#endif
+
out:
free_array_of_ptrs ((void **) names, num_targets);
}