LTO: check that make command works
authorMartin Liska <mliska@suse.cz>
Thu, 22 Oct 2020 12:07:29 +0000 (14:07 +0200)
committerMartin Liska <mliska@suse.cz>
Fri, 23 Oct 2020 07:48:10 +0000 (09:48 +0200)
gcc/ChangeLog:

PR lto/97524
* lto-wrapper.c (make_exists): New function.
(run_gcc): Use it to check that make is present and working
for parallel execution.

gcc/lto-wrapper.c

index 9072a3cc0fe1d9c431094a1c2b8a535e50fc9461..b2af3caa021b904dfb43fe4d65884393f95d71db 100644 (file)
@@ -1334,6 +1334,26 @@ jobserver_active_p (void)
     return JS_PREFIX "cannot access %<" JS_NEEDLE "%> file descriptors";
 }
 
+/* Test that a make command is present and working, return true if so.  */
+
+static bool
+make_exists (void)
+{
+  const char *make = "make";
+  char **make_argv = buildargv (getenv ("MAKE"));
+  if (make_argv)
+    make = make_argv[0];
+  const char *make_args[] = {make, "--version", NULL};
+
+  int exit_status = 0;
+  int err = 0;
+  const char *errmsg
+    = pex_one (PEX_SEARCH, make_args[0], CONST_CAST (char **, make_args),
+              "make", NULL, NULL, &exit_status, &err);
+  freeargv (make_argv);
+  return errmsg == NULL && exit_status == 0 && err == 0;
+}
+
 /* Execute gcc. ARGC is the number of arguments. ARGV contains the arguments. */
 
 static void
@@ -1570,6 +1590,10 @@ run_gcc (unsigned argc, char *argv[])
        }
     }
 
+  /* We need make working for a parallel execution.  */
+  if (parallel && !make_exists ())
+    parallel = 0;
+
   if (!dumppfx)
     {
       if (!linker_output