From a478ffff9550d91bf85532b2c6bf66d3051016c5 Mon Sep 17 00:00:00 2001 From: Andi Kleen Date: Tue, 31 Aug 2010 16:58:46 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 8 ++++++++ gcc/common.opt | 4 ++-- gcc/doc/invoke.texi | 7 +++++++ gcc/lto-wrapper.c | 38 ++++++++++++++++++++++++++++---------- gcc/opts.c | 2 +- 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 + + * 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 * 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: -- 2.11.4.GIT