diff options
author | Tobias Burnus <tobias@codesourcery.com> | 2021-04-28 18:46:47 +0200 |
---|---|---|
committer | Tobias Burnus <tobias@codesourcery.com> | 2021-04-28 18:46:47 +0200 |
commit | fe5bfa6704179f8db7d1ae0b485439e9896df8eb (patch) | |
tree | 7687db287a1ef04b1399cf8db2a06eb9398cc995 /gcc/lto-wrapper.c | |
parent | 3da80ed7efd582575e7850a403ce693ec882d087 (diff) | |
download | gcc-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.c | 26 |
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); } |