* common.opt (fwhopr=): Update for -fwhopr=jobserver
authorak <ak@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 Aug 2010 16:58:46 +0000 (16:58 +0000)
committerak <ak@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 Aug 2010 16:58:46 +0000 (16:58 +0000)
       * doc/invoke.texi (fwhopr): Document -fwhopr=jobserver.
       * lto-wrapper.c (run_gcc): Add jobserver mode.
       * opts.c (common_handle_option): Fix OPT_fwhopr for non numeric
         argument.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@163680 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/common.opt
gcc/doc/invoke.texi
gcc/lto-wrapper.c
gcc/opts.c

index ac896e4..c25c889 100644 (file)
@@ -1,3 +1,11 @@
+2010-08-31  Andi Kleen      <ak@linux.intel.com>
+
+       * common.opt (fwhopr=): Update for -fwhopr=jobserver
+       * doc/invoke.texi (fwhopr): Document -fwhopr=jobserver.
+       * lto-wrapper.c (run_gcc): Add jobserver mode.
+       * opts.c (common_handle_option): Fix OPT_fwhopr for non numeric
+       argument.
+
 2010-08-31  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.md (popdi1): Rewrite using POST_INC memory operand.
index 76933a0..2147be8 100644 (file)
@@ -1579,8 +1579,8 @@ Common
 Enable partitioned link-time optimization
 
 fwhopr=
-Common RejectNegative UInteger Joined Var(flag_whopr)
-Enable partitioned link-time optimization with specified number of parallel jobs
+Common RejectNegative Joined Var(flag_whopr)
+Partitioned link-time optimization with number of parallel jobs or jobserver.
 
 ftree-builtin-call-dce
 Common Report Var(flag_tree_builtin_call_dce) Init(0) Optimization
index 52f9b39..cdd8d98 100644 (file)
@@ -7619,6 +7619,13 @@ parallel using @var{n} parallel jobs by utilizing an installed
 @command{make} program.  The environment variable @env{MAKE} may be
 used to override the program used.
 
+You can also specify @option{-fwhopr=jobserver} to use GNU make's 
+job server mode to determine the number of parallel jobs. This 
+is useful when the Makefile calling GCC is already parallel.
+The parent Makefile will need a @samp{+} prepended to the command recipe
+for this to work. This will likely only work if @env{MAKE} is 
+GNU make.
+
 Disabled by default.
 
 @item -fwpa
index da120b3..0ef8b87 100644 (file)
@@ -303,6 +303,7 @@ run_gcc (unsigned argc, char *argv[])
   struct obstack env_obstack;
   bool seen_o = false;
   int parallel = 0;
+  int jobserver = 0;
 
   /* Get the driver and options.  */
   collect_gcc = getenv ("COLLECT_GCC");
@@ -373,9 +374,17 @@ run_gcc (unsigned argc, char *argv[])
            lto_mode = LTO_MODE_WHOPR;
            if (option[7] == '=')
              {
-               parallel = atoi (option+8);
-               if (parallel <= 1)
-                 parallel = 0;
+               if (!strcmp (option + 8, "jobserver"))
+                 {
+                   jobserver = 1;
+                   parallel = 1;
+                 }
+               else
+                 {
+                   parallel = atoi (option+8);
+                   if (parallel <= 1)
+                     parallel = 0;
+                 }
              }
          }
        else
@@ -567,23 +576,32 @@ cont:
        {
          struct pex_obj *pex;
          char jobs[32];
+
          fprintf (mstream, "all:");
          for (i = 0; i < nr; ++i)
            fprintf (mstream, " \\\n\t%s", output_names[i]);
          fprintf (mstream, "\n");
          fclose (mstream);
-         /* Avoid passing --jobserver-fd= and similar flags.  */
-         putenv (xstrdup ("MAKEFLAGS="));
-         putenv (xstrdup ("MFLAGS="));
+         if (!jobserver)
+           {
+             /* Avoid passing --jobserver-fd= and similar flags 
+                unless jobserver mode is explicitly enabled.  */
+             putenv (xstrdup ("MAKEFLAGS="));
+             putenv (xstrdup ("MFLAGS="));
+           }
          new_argv[0] = getenv ("MAKE");
          if (!new_argv[0])
            new_argv[0] = "make";
          new_argv[1] = "-f";
          new_argv[2] = makefile;
-         snprintf (jobs, 31, "-j%d", parallel);
-         new_argv[3] = jobs;
-         new_argv[4] = "all";
-         new_argv[5] = NULL;
+         i = 3;
+         if (!jobserver)
+           {
+             snprintf (jobs, 31, "-j%d", parallel);
+             new_argv[i++] = jobs;
+           }
+         new_argv[i++] = "all";
+         new_argv[i++] = NULL;
          pex = collect_execute (CONST_CAST (char **, new_argv));
          collect_wait (new_argv[0], pex);
          maybe_unlink_file (makefile);
index 034157d..fbee8f6 100644 (file)
@@ -2089,7 +2089,7 @@ common_handle_option (const struct cl_decoded_option *decoded,
       break;
 
     case OPT_fwhopr:
-      flag_whopr = value;
+      flag_whopr = arg;
       break;
 
     case OPT_w: