summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndi Kleen <ak@linux.intel.com>2010-08-31 16:58:46 +0000
committerAndi Kleen <ak@gcc.gnu.org>2010-08-31 16:58:46 +0000
commita478ffff9550d91bf85532b2c6bf66d3051016c5 (patch)
tree1a55d621cc882fdcee8205efa2e197b4379a4ddd /gcc
parent7d2c38c0b9ae835080e7273bf61884e54b875961 (diff)
downloadgcc-a478ffff9550d91bf85532b2c6bf66d3051016c5.tar.gz
common.opt (fwhopr=): Update for -fwhopr=jobserver
* 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. From-SVN: r163680
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/common.opt4
-rw-r--r--gcc/doc/invoke.texi7
-rw-r--r--gcc/lto-wrapper.c38
-rw-r--r--gcc/opts.c2
5 files changed, 46 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ac896e4f55f..c25c88920c6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/common.opt b/gcc/common.opt
index 76933a00b44..2147be83e64 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -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
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 52f9b39e6ad..cdd8d980514 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -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
diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c
index da120b38e58..0ef8b8729ae 100644
--- a/gcc/lto-wrapper.c
+++ b/gcc/lto-wrapper.c
@@ -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);
diff --git a/gcc/opts.c b/gcc/opts.c
index 034157dc358..fbee8f63ab4 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -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: