Index: gcc-11.1.1+git536/gcc/gcc.c =================================================================== --- gcc-11.1.1+git536.orig/gcc/gcc.c +++ gcc-11.1.1+git536/gcc/gcc.c @@ -319,6 +319,10 @@ static const char *spec_host_machine = D static char *offload_targets = NULL; +/* Set to true if -foffload has not been used and offload_targets + is set to the configured in default. */ +static bool offload_targets_default; + /* Nonzero if cross-compiling. When -b is used, the value comes from the `specs' file. */ @@ -4830,7 +4834,10 @@ process_command (unsigned int decoded_op /* If the user didn't specify any, default to all configured offload targets. */ if (ENABLE_OFFLOADING && offload_targets == NULL) - handle_foffload_option (OFFLOAD_TARGETS); + { + handle_foffload_option (OFFLOAD_TARGETS); + offload_targets_default = true; + } /* Handle -gtoggle as it would later in toplev.c:process_options to make the debug-level-gt spec function work as expected. */ @@ -8498,6 +8505,8 @@ driver::maybe_putenv_OFFLOAD_TARGETS () obstack_grow (&collect_obstack, offload_targets, strlen (offload_targets) + 1); xputenv (XOBFINISH (&collect_obstack, char *)); + if (offload_targets_default) + xputenv ("OFFLOAD_TARGET_DEFAULT=1"); } free (offload_targets); Index: gcc-11.1.1+git536/gcc/lto-wrapper.c =================================================================== --- gcc-11.1.1+git536.orig/gcc/lto-wrapper.c +++ gcc-11.1.1+git536/gcc/lto-wrapper.c @@ -52,6 +52,7 @@ along with GCC; see the file COPYING3. /* 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 @@ -907,6 +908,12 @@ compile_offload_image (const char *targe break; } + if (!compiler && getenv (OFFLOAD_TARGET_DEFAULT_ENV)) + { + free_array_of_ptrs ((void **) paths, n_paths); + return NULL; + } + if (!compiler) fatal_error (input_location, "could not find %s in %s (consider using %<-B%>)", @@ -991,8 +998,13 @@ compile_images_for_offload_targets (unsi compiler_opts, compiler_opt_count, linker_opts, linker_opt_count); if (!offload_names[i]) - fatal_error (input_location, - "problem with building target image for %s", names[i]); + continue; + } + + if (num_targets == 0) + { + free (offload_names); + offload_names = NULL; } out: Index: gcc-11.1.1+git536/libgomp/target.c =================================================================== --- gcc-11.1.1+git536.orig/libgomp/target.c +++ gcc-11.1.1+git536/libgomp/target.c @@ -3173,7 +3173,7 @@ gomp_load_plugin_for_device (struct gomp void *plugin_handle = dlopen (plugin_name, RTLD_LAZY); if (!plugin_handle) - goto dl_fail; + return 0; /* Check if all required functions are available in the plugin and store their handlers. None of the symbols can legitimately be NULL,