From ff99d05f40fc573ee405f1278f2bc5ac55019bdb Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 12 Jan 2021 11:02:16 +0100 Subject: [PATCH] configure, make: Fix up --enable-link-serialization 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: ada.prev = ... magic that will become $(c.serial) under --enable-link-serialization=1 gnat1$(exe): ..... $(ada.prev) ... 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. 2021-01-12 Jakub Jelinek * configure.ac: Ensure c/Make-lang.in comes first in @all_lang_makefrags@. * configure: Regenerated. --- gcc/configure | 7 ++++++- gcc/configure.ac | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/gcc/configure b/gcc/configure index 1a3154270cb..41641c64395 100755 --- a/gcc/configure +++ b/gcc/configure @@ -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" diff --git a/gcc/configure.ac b/gcc/configure.ac index f2ba3a3589d..ff4d3dc078b 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -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" -- 2.30.2