On Tue, 12 Jan 2021, Jakub Jelinek wrote:

> Hi!
> 
> As reported by Matthias, --enable-link-serialization=1 can currently start
> two concurrent links first (e.g. gnat1 and cc1).
> The problem is that make var = value values seem to work differently between
> dependencies and actual rules (where it was tested).
> As the language make fragments can be in different order, we can have:
> # Part of Makefile added by configure
> ada.prev = ... magic that will become $(c.serial) under 
> --enable-link-serialization=1
> # ada/gcc-interface/Make-lang.in
> gnat1$(exe): ..... $(ada.prev)
>       ...
> # c/Make-lang.in
> c.serial = cc1$(exe)
> and while if I add echo $(ada.prev) in the gnat1 rule's command, it prints
> cc1, the dependencies are actually evaluated during reading of the goal or
> when.
> The configure creates (and puts into Makefile) some serialization order of
> the languages and in that order c always comes first, and the rest is
> actually sorted the way the all_lang_makefrags are already sorted,
> so just by forcing c/Make-lang.in first we achieve that X.serial variable
> is always defined before some other Y.prev will use it in its goal
> dependencies.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, without
> --enable-link-serialization altogether, with =1 and with =3, all results
> look good.  Ok for trunk?

OK.

Richard.

> 2021-01-12  Jakub Jelinek  <ja...@redhat.com>
> 
>       * configure.ac: Ensure c/Make-lang.in comes first in 
> @all_lang_makefrags@.
>       * configure: Regenerated.
> 
> --- gcc/configure.ac.jj       2021-01-05 13:57:59.911905006 +0100
> +++ gcc/configure.ac  2021-01-11 14:49:22.878218318 +0100
> @@ -6975,7 +6975,12 @@ changequote([,])dnl
>       $ok || continue
>  
>       all_lang_configurefrags="$all_lang_configurefrags 
> \$(srcdir)/$gcc_subdir/config-lang.in"
> -     all_lang_makefrags="$all_lang_makefrags 
> \$(srcdir)/$gcc_subdir/Make-lang.in"
> +     if test "x$language" = xc && test -n "$all_lang_makefrags"; then
> +         # Put c/Make-lang.in fragment first to match serialization 
> languages order.
> +         all_lang_makefrags="\$(srcdir)/$gcc_subdir/Make-lang.in 
> $all_lang_makefrags"
> +     else
> +         all_lang_makefrags="$all_lang_makefrags 
> \$(srcdir)/$gcc_subdir/Make-lang.in"
> +     fi
>       if test -f $srcdir/$gcc_subdir/lang.opt; then
>           lang_opt_files="$lang_opt_files $srcdir/$gcc_subdir/lang.opt"
>           all_opt_files="$all_opt_files $srcdir/$gcc_subdir/lang.opt"
> --- gcc/configure.jj  2021-01-06 22:17:07.275967932 +0100
> +++ gcc/configure     2021-01-11 14:49:29.708140555 +0100
> @@ -31174,7 +31174,12 @@ do
>       $ok || continue
>  
>       all_lang_configurefrags="$all_lang_configurefrags 
> \$(srcdir)/$gcc_subdir/config-lang.in"
> -     all_lang_makefrags="$all_lang_makefrags 
> \$(srcdir)/$gcc_subdir/Make-lang.in"
> +     if test "x$language" = xc && test -n "$all_lang_makefrags"; then
> +         # Put c/Make-lang.in fragment first to match serialization 
> languages order.
> +         all_lang_makefrags="\$(srcdir)/$gcc_subdir/Make-lang.in 
> $all_lang_makefrags"
> +     else
> +         all_lang_makefrags="$all_lang_makefrags 
> \$(srcdir)/$gcc_subdir/Make-lang.in"
> +     fi
>       if test -f $srcdir/$gcc_subdir/lang.opt; then
>           lang_opt_files="$lang_opt_files $srcdir/$gcc_subdir/lang.opt"
>           all_opt_files="$all_opt_files $srcdir/$gcc_subdir/lang.opt"
> 
>       Jakub
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)

Reply via email to